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

CircleCIで実現できる「高速、安全なソフトウェア開発」

 CircleCIで実現できる「高速、安全なソフトウェア開発」

2023/07/26にお話しした
CircleCIで実現できる「高速、安全なソフトウェア開発」
のスライドデッキです。

https://circleci.connpass.com/event/290071/

More Decks by Masahiko Funaki(舟木 将彦)

Other Decks in Programming

Transcript

  1. 3

  2. 6 また これ 僕がテスト するんですか? ちゃんと テストに通るやつ 持ってきてください 今日早く 帰りたかったんです

    けどね… ここって 修正箇所と関係 ないから、 経験から言って テストしなくても きっと大丈夫 人に迷惑をかけてしまうと思うと、おいそれと失敗できない
  3. 7 プラン コード ビルド テスト リリー ス デプ ロイ 運用

    監視 自動化できない 非正常系は 自動化できない 自動化できる コード追加・修正時は 常にビルド・テスト (最後にまとめてやら ない→早く失敗すれば 早く品質が安定する) サービス停止せず常に リリース/デプロイ (失敗時にはクイック に修正 / 前バージョ ンに戻せる)しくみ 共有 リポジトリ 上で 常に作業 運用・監視しやすい 品質をコードに反映 (必要なデータの取得、 スケーラビリティの 確保) + メトリクスを自動取得するための自動化
  4. 9

  5. 10

  6. 11

  7. 12 • クラス vCPU RAM 実行時間 medium [email protected] 8GB 6:48

    macos.x86.medium.gen2 [email protected] 8GB 4:33 large [email protected] 16GB 4:33 macos.m1.large.gen1 [email protected] 12GB 2:45 クレジット 350 375 500 750 金額 ¢21 ¢22.5 ¢30 ¢45 利用可能なリソースクラス: https://circleci.com/ja/product/features/resource-classes/ CircleCI で macOS (x64, M1) を使って iOS アプリをテスト: https://youtu.be/YOD2OXs5_RY
  8. 13

  9. 15

  10. 16 1 5 50 5 45 40 100 60 1

    0 30 20 100 1 5 50 60 20 1 0 45 40 30 5 100 50 1 0 45 1 5 60 20 5 40 30
  11. 17

  12. 20

  13. 21

  14. 25 Orbで簡潔にした依存ライブラリ取得+テスト自動化 • 完全に同じ部分は Orb 内で定義しておくことによって、 ほとんど同じ部分は、異なる部分(下例では version: <node-version>)を パラメータとして切り出すことで、

    設定の大幅な削減(例: 27行→8行)や、記述ミスによるエラーを防き、 効率をアップ、品質をアップ可能→設定をだれにでも作成/変更しやすく
  15. 26 CircleCI Orb レジストリ • 公開された Orb の一覧 https://circleci.com/developer/orbs •

    命名規約 組織名/Orb名@バージョン番号 • 自組織にのみ公開することも可能 (プライベート Orb)
  16. 27

  17. 28

  18. 29

  19. 31 未知のセキュリティリスクを最小化する • セキュアなソフトウェアを提供する上で、2つのアプローチが重要 2. 未知のリスクを最小化する (守るべきポリシーの策定/適用) ▪ ポリシー違反があればCI/CDを実行させない CircleCIが用意している組み込み機能(一般的なユースケースで使用)

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

    Rego言語を使って記述 (条件を満たす組み合わせを 検証する) • ポリシーはCircleCIプロジェクトと してVCSで管理し、 変更時にCircleCIが自動実行、 差分を通知可能 • 右例はDockerイメージを CircleCI提供のみに限定する定義
  21. 33

  22. 34

  23. 36

  24. 37 • ブログ ◦ テスト分割と並列実行 - 実行時間を短縮する (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/)