この記事は セゾン情報システムズ Advent Calendar 2022 7日目の記事です。
概要
4日目の記事にもあるように CI を導入することでソフトウェア開発の生産性を高めることができます。
しかし、CI/CD 導入の有用性を理解しつつも導入が難しいというケースはままあると思います。
(プロジェクトの中で開発が始まっている、予定外の工数確保が難しい、ノウハウが無い、、、)
そこで、弊社でも採用している Github の Actions を利用してまずは最小の対応で CI を実現したいと思います。
実現すること
- Github Actions の導入
ソースコードをビルドするワークフローの作成
- github のリポジトリのページから、
Actions
を選択してset up workflow yourself
のリンクをクリック。
- エディタに遷移するので、以下内容を貼り付けてコミットする。
name: Build on: # Pull Request に関連する変更があった場合に実行する pull_request: # 手動で実行可能にする workflow_dispatch: jobs: build: # セルフホストランナーを導入している場合は対応したラベル runs-on: セルフホストランナーのラベル steps: # ソースコードをチェックアウトする - uses: actions/checkout@v3 # java をセットアップして利用可能にする - name: Set up JDK 11 uses: actions/setup-java@v3 with: distribution: 'corretto' java-version: '11' # gradle wrapper のコマンドを実行してソースコードをビルドする - name: Execute gradle wrapper command. run: | chmod +x gradlew ./gradlew build
- Actions タブからワークフローが手動実行できるので以下画像を参考に実行する
- 処理が成功したかを確認
- Pull Request 作成時、対応ブランチへの push 時にも実行されます
ビルド(Actions のワークフロー)失敗時に Pull Request のマージをブロックする
手動・自動でワークフローが実行できるようになりましたが、ワークフロー失敗時には Pull Requset をマージできないようにしたいです。
(ソースコードに問題がある状態でマージしたくない)
Github の機能を使って以下手順で実現できます。
- 以下画像を参考に Branch protection rules をクリック
- 保護するブランチのパターンを入力(今回は main ブランチのみを保護)
- Require status checks to pass before merging をチェック
- テキストボックスに
build
と入力し、表示されたbuild
を選択
- 下までスクロールして
Create
ボタンをクリック - Pull Request の対象ブランチに push した場合などにワークフローが実行される。実行中はマージ不可。
- ワークフローが失敗した場合もマージ不可となる
バッジの作成
Github のリポジトリに README.md
ファイルが存在する場合はデフォルトで内容を表示してくれます。
そこに、ワークフローの実行結果をバッジとして README に記述して表示させましょう。
- 以下画像を参考に
Create status badge
をクリック
- markdown の記述がポップアップするので
Copy status badge Markdown
ボタンをクリック
- Copy された markdown を READM.md を編集して貼り付けてコミット・push する
- リポジトリのページにバッジが表示されます!
おわりに
まずは CI/CD の土台が整えることが出来ました。
今回の対応のみでもビルド失敗を早めに検知できます。(ライブラリ追加時のビルドファイルコミット漏れなど)
今後は、ユニットテストの作成・実行・カバレッジ計測、ソースコードの静的解析などに順次対応していき、CD などにも対応していきたいです。
何かの参考になれば幸いです。
引き続き Advent カレンダーをよろしくお願いします。