关于SENSYN流技术堆栈和改善日的举措
这是2023年圣新机器人的圣诞日历的第一天文章。
大家好,欢迎来到森信机器人的知乎专栏。我是服务质量团队/系统可靠性工程师的安达 (@adachin0817)。顺便说一下,我在今年5月加入了森信公司,今后将会在系统可靠性工程和技术宣传等方面进行分享,希望大家多多支持!另外,我计划在12月18日的圣诞日历中公开一些有关我转职前后的事情。
首先,让我来介绍一下我们的服务和技术栈,最后再谈一谈关于KAIZEN DAY的事情。
服务
我公司是社会/产业基础设施设备检查、灾害损失情况了解等防灾减灾应对、保安监控等业务为中心,并通过无人机等机器人技术支持的业务流程改革提供一揽子的支持服务和产品,成为社会基础设施数字转型领先的公司。我们提供各种类型的服务,包括网络工程师、移动工程师、人工智能工程师、机器人工程师、SRE等,利用多样的国际成员和广泛的技术进行开发。
顺便提一下,我喜欢的服务是“SOLAR Check”!
关于技术堆栈
-
- インフラ: Azure(AKS)/AWS /GCP
-
- 開発環境: Docker,docker-compose
-
- バックエンド:PHP/Laravel, Go, Python, TypeScript, C#, C++, Unity, Swift, Flutter
-
- フロントエンド: Nodejs, Nuxt.js, Vue.js
-
- 認証基盤: Auth0
-
- データベース: MySQL
-
- IaC:Terraform
-
- CI/CD: GitHub Actions
-
- モニタリング/Grafana, Prometheus, Sentry
- WEBミドルウェア:Nginx
我们的技术栈使用Azure在AKS上运维系统,开发环境使用Docker,基础设施即代码(IaC)使用Terraform进行管理。CI/CD通过GitHub Actions自动化进行,管理界面使用Laravel和TypeScript构建,前端使用Nuxt.js。数据库在上个月升级到了MySQL8。另外,由于是微服务架构,账户认证基础设施使用了Auth0。
无人机和机器人采用了C/C++和Unity进行开发,数据分析方面使用Python。监控基础设施运用Prometheus和Grafana、Grafana Loki、Grafana Mimir在AKS上进行运维,未来计划利用Sentry进行错误日志检测和APM,并着手实现SLI/SLO。
顺便说一下,我们正在使用 “Findy Team+” 来可视化开发生产力。接下来,我想介绍一下“改善日”。
KAIZEN DAY是什么?
- タイムスケジュール
KAIZEN DAY是从上个月开始的一项集会活动,旨在改善平时忙碌工作中每月一号无法处理的任务,我们会一起聚集起来进行改进,无论是亲自到公司上班还是远程工作都可以参与。
最近,我们在GitHub上建立了统一分支策略的内部规定,由于仍有许多仓库未适应这一规定,因此大家决定抽时间一起进行适应。此外,由于平时都在全程远程工作,也是为了增进面对面交流。以下是上次举办的以CI改善为主题的活动总结。
順便提一下,以下是我们用无人机进行办公室导览的视频,希望你们可以了解一下我们的氛围。(只有我们公司才能做这样的事情!)
我的任务。
因为参与者众多,要将全部介绍出来非常困难,所以我打算主要写一下我参与处理的事情。
- Terraformのdev,stgへのapplyを自動化
首先,AKS采用了一种机制,即在每次Pull请求后将发布方式应用于staging和development的feature分支。但是,由于经常发生应用遗漏的情况,因此我们考虑使用github-script,在Pull请求的评论中轻松应用该机制。
- github/workflows/azure_cd_development.yaml
name: terraform apply development from feature by pull request
on:
issue_comment:
types:
- created
jobs:
dev-terraform-apply:
if: (github.event.issue.pull_request != null) && github.event.comment.body == '!github dev-terraform-apply'
runs-on: ubuntu-latest
steps:
# プルリクのコメントが付けられたマージ元ブランチ名を取得
- uses: actions/github-script@v2
id: set-target-branch
with:
github-token: ${{secrets.GITHUB_TOKEN}}
result-encoding: string
script: |
const pull_request = await github.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number
})
return pull_request.data.head.ref
# 上記で取得したブランチをチェックアウト
- uses: actions/checkout@v2
with:
ref: ${{ steps.set-target-branch.outputs.result }}
# チェックアウトしたブランチをデプロイ
- name: terraform-apply-dev
run: |
git branch
git checkout development
git merge origin ${{ github.event.pull_request.base.ref }}"
git push origin development
我写了上面的代码,但在调试过程中不小心跟进了以下机器人团队成员的事情,所以稍后会验证并修正文章。可能会起作用。
- ロボットチームとペアプログラミング
在机器人团队中,我们主要使用C/C++和cmake来进行本地测试。然而,大约两年前开始,我们的持续集成(CI)进展缓慢。继续推动下去后,我们发现在执行initial_build.sh时,每个操作系统包的初始安装需要超过一个小时的时间。
由于判断在下一次的处理中,先在Docker Hub上下载构建好的容器较为合适,因此我们计划进行修正。
name: C/C++ CI
on:
pull_request:
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_USERNAME: hoge
SLACK_CHANNEL: hoge_ci
SLACK_ICON: https://avatars.githubusercontent.com/u/44036562?s=280&v=4
jobs:
run_initial_build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2.0.0
- name: Setup cmake
uses: jwlawson/actions-setup-cmake@v1.13
with:
cmake-version: '3.16.3'
- name: build
uses: mxschmitt/action-tmate@v3
run: script/initial_build.sh
- name: Slack Success
if: ${{ success() }}
uses: rtCamp/action-slack-notify@v2
env:
SLACK_TITLE: initial_build Success
SLACK_COLOR: good
- name: Slack Failure
if: ${{ failure() }}
uses: rtCamp/action-slack-notify@v2
env:
SLACK_TITLE: initial_build Failure
SLACK_COLOR: danger
试着举办一次。
良かった点
普段後回しにしていたタスクができた
機能追加やバグ修正以外をやる口実ができた
CI/CDに半強制的に取り組めた
気軽にコミュニケーションを取りながらできた
相談、ペアプロ
改善点
もっとコミュニケーションしやすい方が良かった
必ずしもオフィスでなくても良いかも
テーマに沿ったサンプルや講師の準備があると良い
詳しい人は支援だけに集中しても良い
オフィス参加者、リモート参加者を事前に把握したい
各PJ/PDで課題が整理されて一元的に確認できたら良い
总结
个人而言,与平时很少交流机会的成员进行配对编程非常有趣,整个团队的沟通也更加活跃。本月即将举行 KAIZEN DAY,计划对本地开发环境进行改进。到时候会撰写报告等内容,敬请期待更多消息!虽然圣诞节日历还有空缺,但马上会填满的!