Github Actionsでプッシュされたブランチ名を自動で取得してコミットする方法(nodejs)
はじめに
この記事で解説することを行うことで、リポジトリ内に複数の本番ブランチがある際のGithub Actionsの設定が効率化できるかもです。
私は主に業務でCI/CDなどを担当しているのですが、その中でNodejsを使ったECサイトにおいて、リポジトリの構成として本番ブランチが複数ある、masterをベースに使い回して、masterの亜種のようなECサイトを開発し運用するタスクがあります。
このタスクでは本番ブランチがどんどん増えていくので、その度にgithub actionsのymlを作っていては手間がかかるのでどうにかして、プッシュされたブランチ名を自動で取得して、コミットできないかとやっていたところいい感じのymlができたので共有させていただきます。
一般的なGitのコードベースでは、masterと開発ブランチみたいに切って行って、開発ブランチをプルリクでマージしていく流れなので、なかなか本番ブランチが複数あるという状態はないと思うのですが、この記事で解説するymlの設定を変えれば開発ブランチのブランチ名を自動で取得して処理を行うということもできるので参考になれば幸いです。
使用するライブラリ
この記事で解説するymlでは自動でコミットするためにstefanzweifel/git-auto-commit-action
を使っています。
このライブラリはGithub Actionsで自動でコミットするのを簡単にしてくれるものです。
リンク
設定ファイル
以下が設定ファイルになります。Nodejsでのビルド向けに作ってありますが、少し変えれば他のプロジェクトにも使えます。後に解説します。
name: node js CI
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
env:
BRANCH: "${GITHUB_REF#refs/heads/}"
- run: |
npm i
npm run build --if-present
- name: Commit output
uses: stefanzweifel/git-auto-commit-action@v4.2.0
with:
commit_message: "自動ビルド:${{github.sha}}"
branch: ${{ env.BRANCH }}
解説します。まずは
on:
push:
で全てのプッシュに対してワークフローが動くようにしています。
env:
BRANCH: "${GITHUB_REF#refs/heads/}"
env:で環境変数にプッシュされたブランチ名とコミットメッセージを設定しています。
BRANCH: "${GITHUB_REF#refs/heads/}"
でプッシュされたブランチ名を取得してます。
ここで設定した環境変数は env.~
で参照できます。
- name: Commit output
uses: stefanzweifel/git-auto-commit-action@v4.2.0
with:
commit_message: "自動ビルド:${{github.sha}}"
branch: ${{ env.BRANCH }}
次にここで自動でコミットしています。
usesでstefanzweifel/git-auto-commit-action@v4.2.0
を使うことを宣言して
commit_message: "自動ビルド:${{github.sha}}"
でコミットメッセージを設定しています。
${{github.sha}}
でコミットIDを参照しています。
コミットメッセージは自動ビルド:自動ビルド:015a2b~
といった具合になります。
コミットメーセージにIDが入っていた方が後で見るときにわかりやすいと思ったので入れてみました。
不要な場合は"自動ビルド"
としても大丈夫です。
そして branch: ${{ env.BRANCH }}
でコミットしてプッシュするブランチを設定しています。
ここで先ほど取得して環境変数に設定したブランチを参照しています。
nodejs用の記述
このnameの部分と
- name: Use Node.js
npmのコマンドについてはnodejs用になるので、nodejs使わない場合は変更していただいて大丈夫です。
- run: |
npm i
npm run build --if-present
まとめ
以上でプッシュされたブランチ名を取得してコミットプッシュするymlになります。
下記の私のリポジトリで動作確認できるのでplaygroundのように動作を確認していただけます
参考
Discussion