10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

セゾン情報システムズAdvent Calendar 2022

Day 7

最小の対応で Github Actions による CI/CD のとっかかりを作る(バッジも添えて)

Posted at

この記事は セゾン情報システムズ Advent Calendar 2022 7日目の記事です。

概要

4日目の記事にもあるように CI を導入することでソフトウェア開発の生産性を高めることができます。
しかし、CI/CD 導入の有用性を理解しつつも導入が難しいというケースはままあると思います。
(プロジェクトの中で開発が始まっている、予定外の工数確保が難しい、ノウハウが無い、、、)

そこで、弊社でも採用している Github の Actions を利用してまずは最小の対応で CI を実現したいと思います。

実現すること

  • Github Actions の導入
    • ソースコードのビルド
      • 今回は gradle による java のリポジトリを想定
    • Pull Request 関連対応時に自動実行
    • ビルド(Actions のワークフロー)失敗時に Pull Request のマージをブロックする
    • バッジを README に載せる
      • このような
        image.png

ソースコードをビルドするワークフローの作成

  1. github のリポジトリのページから、Actions を選択して set up workflow yourself のリンクをクリック。
    image.png
  2. エディタに遷移するので、以下内容を貼り付けてコミットする。
    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
    
  3. Actions タブからワークフローが手動実行できるので以下画像を参考に実行する
    image.png
  4. 処理が成功したかを確認
    image.png
  5. Pull Request 作成時、対応ブランチへの push 時にも実行されます
    image.png

ビルド(Actions のワークフロー)失敗時に Pull Request のマージをブロックする

手動・自動でワークフローが実行できるようになりましたが、ワークフロー失敗時には Pull Requset をマージできないようにしたいです。
(ソースコードに問題がある状態でマージしたくない)
Github の機能を使って以下手順で実現できます。

  1. 以下画像を参考に Branch protection rules をクリック
    image.png
  2. 保護するブランチのパターンを入力(今回は main ブランチのみを保護)
    image.png
  3. Require status checks to pass before merging をチェック
    image.png
  4. テキストボックスに build と入力し、表示された build を選択
    image.png
    image.png
  5. 下までスクロールして Create ボタンをクリック
  6. Pull Request の対象ブランチに push した場合などにワークフローが実行される。実行中はマージ不可。
    image.png
  7. ワークフローが失敗した場合もマージ不可となる
    image.png

バッジの作成

Github のリポジトリに README.md ファイルが存在する場合はデフォルトで内容を表示してくれます。
そこに、ワークフローの実行結果をバッジとして README に記述して表示させましょう。

  1. 以下画像を参考に Create status badge をクリック
    image.png
  2. markdown の記述がポップアップするので Copy status badge Markdown ボタンをクリック
    image.png
  3. Copy された markdown を READM.md を編集して貼り付けてコミット・push する
    image.png
  4. リポジトリのページにバッジが表示されます!
    image.png

おわりに

まずは CI/CD の土台が整えることが出来ました。
今回の対応のみでもビルド失敗を早めに検知できます。(ライブラリ追加時のビルドファイルコミット漏れなど)
今後は、ユニットテストの作成・実行・カバレッジ計測、ソースコードの静的解析などに順次対応していき、CD などにも対応していきたいです。
何かの参考になれば幸いです。
引き続き Advent カレンダーをよろしくお願いします。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?