メルマガ登録
ブレインパッドの自社開発プロダクトチームの新卒2年目のメンバーが、自社プロダクトの開発フローを改善した取り組みをブログにしました。
CI/CDで利用している「CircleCI」のワークフロー機能を使って改善を行い、「DevSecOps」の考え方を取り入れたことや、リリースエンジニアリングの視点をもとに整理した内容や利用したツールについても紹介しています。
こんにちは。プロダクト開発部、新卒2年目の城田です。
ブレインパッドの自社開発プロダクトチームでは、CI/CD (継続的インテグレーション/継続的デリバリー)でCircleCIを主に利用しています。
今回は「CircleCI」というプラットフォームのワークフロー機能を使って、コンテナのビルドとデプロイ部分の改善を行い、「DevSecOps」の考え方を取り入れてみたので、本ブログでその内容について紹介します。また、リリースエンジニアリングの観点で整理した項目や取り組んだこと、その際に使用ツールについても簡単にご紹介します!
まず「DevOps」という言葉は、IT関係の仕事に従事する方なら聞き覚えのある方も多いのではないでしょうか?
「DevOps」とは、開発チームと運用チームが連携し、ソフトウェアの開発・リリースプロセスをより柔軟に実行する開発手法です。
これにより、開発サイクルを迅速かつ頻繁に回せるようになることが期待できます。
しかし、いくら開発サイクルが迅速になってもその分セキュリティ面が疎かになり、リリース直前で大幅な手戻りが発生していてはあまり意味がありません。
そこで、開発と運用の観点にセキュリティの観点も組み込んで、開発サイクルを回せるようにしたのが「DevSecOps」の考え方です。
「DevSecOps」については、当社の運営するDX Media「DOORS」に詳しく紹介されていますので興味のある方はぜひご一読ください!
「DevSecOps」の考え方を取り入れるために改善したワークフローの改善前と改善後の状況を以下の図に示します。
ここでは、Google 社が発表している書籍「Site Reliability Engineering」の8章で定義されているリリースエンジニアリングに関する4つの哲学に従って今回の改善前、改善後の状況を整理していきます。
項目 | 改善前 | 改善後 |
---|---|---|
セルフサービスモデル(Self-Service Model) | 開発者はapplicationを作成すれば良し | 変わらず、Testが入った分、暗黙知をコード化 |
高速化(High Velocity) | Image Buildのみ | Testを通過分、処理時間は延びたがSecureなものを提供という意味では高速化 |
密封ビルド(Hermetic Builds) | docker commandのみ | OSSのコマンドの依存度が増えたが、単独でビルドは可能 |
ポリシーと手順の強制(Enforcement of Policies and Procedures) | TestやSecurityへの観点は個人任せ | TestやSecurityの観点を一様に適用する形 |
リリースエンジニアリング視点で整理した改善項目を実現するために、以下のツールを利用しました。
CircleCI例(ymlファイル)
- run:
name: lint dockerfile
command: hadolint <image name:tag>:${CIRCLE_BUILD_NUM}
- run:
name: test docker image
environment:
GOSS_FILES_STRATEGY: cp # circleci では設定する必要がある
command: |
cp <path to goss yaml>/goss.yaml .
dgoss run -e ENV_VAR="123" <image name:tag>:${CIRCLE_BUILD_NUM} /bin/sh
- run:
name: image scan trivy
command: trivy --exit-code 1 <image name:tag>:${CIRCLE_BUILD_NUM}
- run:
name: image scan dockle
command: dockle -c 1 <image name:tag>:${CIRCLE_BUILD_NUM}
項目 | 改善前 | 改善後 |
---|---|---|
Building,Packaging | Dockerfile で実行 | .dockerignore を追加してビルド速度を高速化 |
Branching | masterのみからcontainer作成 | 同じ |
Testing Dockerfile | なし | hadolint でテスト |
Testing Container | なし | dgoss でテスト |
Testing Scan | なし | trivy,dockle でテスト |
Deployment | docker push | 同じ |
これにより、コンテナのビルドとデプロイ部分におけるワークフローにセキュリティに関するチェックが追加され、「DevSecOps」の考え方を取り入れることができました。
今回は以上になります!
今後も継続してプロダクト開発の事例を発信していこうと思います!
最後になりますがブレインパッドではエンジニア採用を積極的に行っております。
ご興味のある方は是非ご応募お待ちしております!
https://www.brainpad.co.jp/recruit/
あなたにオススメの記事
2023.12.01
生成AI(ジェネレーティブAI)とは?ChatGPTとの違いや仕組み・種類・活用事例
2023.09.21
DX(デジタルトランスフォーメーション)とは?今さら聞けない意味・定義を分かりやすく解説【2024年最新】
2023.11.24
【現役社員が解説】データサイエンティストとは?仕事内容やAI・DX時代に必要なスキル
2023.09.08
DX事例26選:6つの業界別に紹介~有名企業はどんなDXをやっている?~【2024年最新版】
2023.08.23
LLM(大規模言語モデル)とは?生成AIとの違いや活用事例・課題
2024.03.22
生成AIの評価指標・ベンチマークとそれらに関連する問題点や限界を解説