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. 1
    CircleCIで実現できる
    「高速、安全なソフトウェア開発」
    2023/07/26
    舟木 将彦 (@mfunaki)
    Principal Developer Advocate, CircleCI

    View full-size slide

  2. 2
    Agenda
    ソフトウェア開発のどこを自動化するのか?
    CI/CD定義を部品化して、社内で共有、再利用する
    利用可能なリソースを社内ルールで統制する
    1
    2
    3

    View full-size slide

  3. 4
    出典: トム・ウージェック:塔を建て、チームを作る https://youtu.be/H0_yKBitO8M

    View full-size slide

  4. 5
    出典: トム・ウージェック:塔を建て、チームを作る https://youtu.be/H0_yKBitO8M

    View full-size slide

  5. 6
    また
    これ
    僕がテスト
    するんですか?
    ちゃんと
    テストに通るやつ
    持ってきてください
    今日早く
    帰りたかったんです
    けどね…
    ここって
    修正箇所と関係
    ないから、
    経験から言って
    テストしなくても
    きっと大丈夫
    人に迷惑をかけてしまうと思うと、おいそれと失敗できない

    View full-size slide

  6. 7
    プラン コード ビルド テスト
    リリー

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

    View full-size slide

  7. 8
    https://circleci.com/ja/resources/2023-state-of-software-delivery/

    View full-size slide

  8. 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

    View full-size slide

  9. 14
    参考: https://circleci.com/ja/blog/deep-learning-nvidia-gpu-executor/

    View full-size slide

  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

    View full-size slide

  11. 18
    並列
    実行数
    並列実行時の割り振り方
    • ファイル名のアルファベット順
    • 過去のテスト実行時の所要時間
    ベースで均等割(timings)
    • ファイルサイズで均等割
    (filesize)
    • マニュアル指定

    View full-size slide

  12. 19
    評価ポイント1: スループット
    評価ポイント3: 復旧時間
    評価ポイント2: 実行時間
    評価ポイント4: 成功率

    View full-size slide

  13. 22
    CI/CDを導入したくてもできない理由
    (他社ではCI/CDで開発スピードが上がったというものの、我が社では)
    ● ビルドやテスト、リリースの手順書(日本語)を書くことはできても、
    ビルドやテスト、リリースを自動化する設定ファイル(YAML)を書くのは大変
    ● 自動化設定ファイルを書くスキルがあるレベルが高いエンジニアには、
    設定ファイルではなく、コードをどんどん書いて欲しい
    ● 上手に自動化設定ファイルを書くのが大変で(トライ&エラー)、
    開発に割ける時間が取られてしまう(本末転倒)

    View full-size slide

  14. 23
    自動化設定ファイルを部品化して再利用する: Orb
    ● プログラミング言語やフレームワーク、デプロイ先が同じであれば、
    設定ファイルは使い回しがきく(ほとんど同じで、少しだけ違う)
    ● 「少しだけ違う」部分をパラメーターとして切り出すことで、設定ファイルを
    部品化可能
    ● 単に設定ファイル全体を共有してコピーするのと違い、全体を理解しなく
    ても使用可能で、問題(バグ)があっても部品を修正すれば全体に反映可能

    View full-size slide

  15. 24
    Node.jsの依存ライブラリ取得+テストを自動化

    View full-size slide

  16. 25
    Orbで簡潔にした依存ライブラリ取得+テスト自動化
    ● 完全に同じ部分は Orb 内で定義しておくことによって、
    ほとんど同じ部分は、異なる部分(下例では version: )を
    パラメータとして切り出すことで、
    設定の大幅な削減(例: 27行→8行)や、記述ミスによるエラーを防き、
    効率をアップ、品質をアップ可能→設定をだれにでも作成/変更しやすく

    View full-size slide

  17. 26
    CircleCI Orb レジストリ
    ● 公開された Orb の一覧
    https://circleci.com/developer/orbs
    ● 命名規約
    組織名/Orb名@バージョン番号
    ● 自組織にのみ公開することも可能
    (プライベート Orb)

    View full-size slide

  18. 30
    セキュリティ問題を回避する(既知の問題)
    ● セキュアなソフトウェアを提供する上で、2つのアプローチ(既知/未知)が重要
    1. 既知の問題を回避する (DevSecOps)
    ■ SAST (静的解析): ソースコードやライブラリの脆弱性を検出
    ■ DAST (動的解析): アプリ/サービスの実行時脆弱性を検出

    View full-size slide

  19. 31
    未知のセキュリティリスクを最小化する
    ● セキュアなソフトウェアを提供する上で、2つのアプローチが重要
    2. 未知のリスクを最小化する (守るべきポリシーの策定/適用)
    ■ ポリシー違反があればCI/CDを実行させない
    CircleCIが用意している組み込み機能(一般的なユースケースで使用)
    ● 使用可能なOrb / 使用してはいけないOrb (Orb名, バージョン)
    ● 使用可能なリソースクラス (Linux, Windows, macOS, GPU…)
    ● プロジェクト名やブランチ名ごとに使用可能なコンテクスト
    (例: 指定可能なデプロイ先定義など)

    View full-size slide

  20. 32
    よりフレキシブルなポリシー設定
    ● Open Policy Agent (OPA) に基づく意思決定エンジンを使用
    https://www.openpolicyagent.org/
    ● Rego言語を使って記述
    (条件を満たす組み合わせを
    検証する)
    ● ポリシーはCircleCIプロジェクトと
    してVCSで管理し、
    変更時にCircleCIが自動実行、
    差分を通知可能
    ● 右例はDockerイメージを
    CircleCI提供のみに限定する定義

    View full-size slide

  21. 35








    View full-size slide

  22. 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/)

    View full-size slide

  23. 38
    ● ビデオ
    ○ 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)

    View full-size slide

  24. 39
    https://marketplace.visualstudio.com/items?
    itemName=circleci.circleci

    View full-size slide

  25. 40
    CircleCI について
    • Twitter: https://twitter.com/CircleCIJapan
    • YouTube: https://www.youtube.com/@CircleCI-
    Videos/playlists
    • Qiita: https://qiita.com/CircleCIJapan
    • connpass: https://circleci.connpass.com/

    View full-size slide

  26. Thank you.
    41

    View full-size slide