Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自動化→部品化すると社内開発は楽しくなる

 自動化→部品化すると社内開発は楽しくなる

2023/09/13開催のnew relic FUTURE STACK 2023 Tokyoでお話した際のスライドです。
Joy, Inc.(ジョイ・インク)の「自動ユニットテストフレームワークの実行に15分以上かかるような週があったら、次 の週、必ず1ペア4時間分を、テストの性能改善に割り当てるのだ。テストが15分以 下で終わるようになるまで、この割り当ては継続する。」から、CI (継続的インテグレーション)の取り組みとして、テストをどう自動化するか? に加え、CircleCI の並列実行機能+テストの過去実行実績をもとにした所要時間均等分割機能のご紹介をご紹介しています。

デモはこちらのYouTube動画「CircleCIでGitHubプロジェクトをビルド&テストする」をご覧ください: https://youtu.be/44BhdCb8J9Y?si=MGVI0pQNWhrq3orL

Masahiko Funaki(舟木 将彦)

September 13, 2023
Tweet

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Programming

Transcript

  1. 5 ソフトウェアデリバリーに関わる4つの主要な指標 4つの指標 ⽇本のCircleCIユーザー 平均値(2022) CircleCIが考える ⽬標値 スループット (ワークフロー実⾏回数) 1.0回/⽇

    必要なだけ 実⾏時間 (ワークフロー実⾏時間) 3.54分 10分以内 平均リカバリ所要時間 68.5分 60分以内 ワークフロー成功率 デフォルトブランチで75% デフォルトブランチで 90%以上 ⼿動・⾃動を問わず 現時点の値を踏まえた上で 世の中の平均にまずは 近い⽬標として到達し、 あるべき姿(⽬標値)を 実現を⽬指す取り組みを推進
  2. 6 そのプロセス、⼈じゃなきゃいけないのはどこ? プラン コード ビルド テスト リリー ス デプ ロイ

    運用 監視 継続的インテグレーション (CI) 継続的 デプロイ (CD) 自動化できない 非正常系は 自動化できない 自動化できる コード追加・修正時は 常にビルド・テスト (最後にまとめてやら ない→早く失敗すれば 早く品質が安定する) サービス停止せず常に リリース/デプロイ (失敗時にはクイック に修正 / 前バージョ ンに戻せる)しくみ 共有 リポジトリ 上で 常に作業 運用・監視しやすい 品質をコードに反映 (必要なデータの取得、 スケーラビリティの 確保) + メトリクスを自動取得するための自動化
  3. 13 CircleCI Orb レジストリ • 公開された Orb の⼀覧 https://circleci.com/developer/orbs •

    命名規約 組織名/Orb名@バージョン番号 • ⾃組織にのみ公開することも可能 (プライベート Orb)
  4. 16 セキュリティ問題を回避する(既知の問題) • セキュアなソフトウェアを提供する上で、2つのアプローチ(既知/未知)が 重要 1. 既知の問題を回避する (DevSecOps) ▪ SAST

    (静的解析): ソースコードやライブラリの脆弱性を検出 ▪ DAST (動的解析): アプリ/サービスの実⾏時脆弱性を検出
  5. 17 未知のセキュリティリスクを最⼩化する • セキュアなソフトウェアを提供する上で、2つのアプローチが重要 2. 未知のリスクを最⼩化する (守るべきポリシーの策定/適⽤) ▪ ポリシー違反があればCI/CDを実⾏させない CircleCIが⽤意している組み込み機能(⼀般的なユースケースで使⽤)

    • 使⽤可能なOrb / 使⽤してはいけないOrb (Orb名, バージョン) • 使⽤可能なリソースクラス (Linux, Windows, macOS, GPU…) • プロジェクト名やブランチ名ごとに使⽤可能なコンテクスト (例: 指定可能なデプロイ先定義など)
  6. 18 よりフレキシブルなポリシー設定 • Open Policy Agent (OPA) に基づく意思決定エンジンを使⽤ https://www.openpolicyagent.org/ •

    Rego⾔語を使って記述 (条件を満たす組み合わせを 検証する) • ポリシーはCircleCIプロジェクトと してVCSで管理し、 変更時にCircleCIが⾃動実⾏、 差分を通知可能 • 右例はDockerイメージを CircleCI提供のみに限定する定義
  7. 24 関連リソース (ブログ) • ブログ ◦ テスト分割と並列実⾏ - 実⾏時間を短縮する (https://circleci.com/ja/blog/parallelism-faster-tests/)

    ◦ 失敗したテストを再実⾏する (https://circleci.com/ja/blog/rerun-failed-flaky-tests/) ◦ ビルドしたコンテナのセキュリティチェック - Snykとの連携 (https://circleci.com/ja/blog/container-scan-with-snyk/)
  8. 25 関連リソース (ビデオ) • ビデオ ◦ CI/CD定義の部品化でより早く、組織ポリシーの設定でより安全に〜事業会 社(⾮IT企業)でもDevOpsでアプリ/サービスを早く安全にお届け (https://youtu.be/aNp7kIl7WTU) ◦

    CircleCIを使ってCI/CDでもモジュール化+再利⽤度を⾼めよう (https://youtu.be/T9mr3LudDdQ) ◦ CircleCIで失敗したテストを再実⾏する (https://youtu.be/mbScCnUqv-Q) ◦ CircleCI 公式 VSCode Extension を活⽤する (https://youtu.be/HZdOoUYaZ6o)