はしがき
うちの会社から、gitlab -> github への platform を移行しました。
なので、gitlab から使っていた CI を全部 github に migration する必要があります。
先日アップロードしたことを活用して、branch を自動で作成や削除をします。
作業の段階はいかになります。
- 毎日、master branch への merge 向けの branch や PR を作成
- 毎日、master branch への merge 向けの branch や PR を削除
CICD とは?
Red Hat には以下に紹介されています。
CI/CD (継続的インテグレーションおよび継続的デリバリー/デプロイメントの略) は、ソフトウェア開発ライフサイクルを最適化し、加速することを目的としています。
継続的インテグレーション(continuous integration)はコードの変更を 共有ソースコードリポジトリに 自動的かつ頻繁に取り込む手法
継続的デリバリーまたはデプロイメント (CD) は 2 つの部分からなるプロセスで、コード変更の統合、テスト、デリバリーを指します。
build, テスト、デプロイ... などを自動化することで、アプリケーションのエラーをよく発見したり、開発を高速化します。
github actions とは?
GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD.
「CICD を通じて自動的にある作業(build, PR 生成, 配布 ...etc)を行う」と認識しました。
gitlab のように、ある yaml file の作成で、段階を分けて、コードを実行できそうです。
また、schedule を実装するとき、github actions は UTC なので、UTC で設定する必要があります。
やり方
このやり方は gitlab の加入前提で行います。
- github repository を作る
- github setting
- PR 作成 yaml file を生成や commit
- PR 削除 yaml file を生成や commit
- 結果
github repository を作る
dashboard 上の +
をクリックして、New repository を作ります。
スクショのように oraganization を作って、repository を作っても構いません。
ほかのユーザーから見えるように public で設定しました。
これで作ります。
github setting
setting > Actions > general に遷移します。
Workflow で repository を Read and write できるように設定します。
PR もつくる予定なので、checkbox もチェックしておきます。
organization の repository から変更できない場合
このように変更できない場合があります。
organization の setting を変更する必要があります。
上のスクショのように organization の setting > Actions > General に入って、設定を変更してください。
Pair GitHub Packages with Actions to simplify package management, including version updates, fast distribution with our global CDN, and dependency resolution, using your existing GITHUB_TOKEN.
github は GITHUB_TOKEN
という token が使えるので、特に token を作る必要はありません。
PR 作成 yaml file を生成や commit
.github/workflows
から、以下のコードを活用して、yaml file を作ってください。
name: Create Daily Release Branch
on:
schedule:
- cron: '0 9 * * *'
jobs:
build:
name: build
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: Set daily branch name
id: set_branch_name
run: |
BRANCH_NAME="release/$(date --date 'tomorrow' +%Y-%m-%d)"
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
- name: Git Setting
run: |
git config --global user.email "youremail@gmail.com"
git config --global user.name "Ci Schedule Bot"
- name: Create release branch and pr
id: create_pr
run: |
git fetch origin main
git checkout -b ${{ steps.set_branch_name.outputs.branch_name }} origin/main
git commit --allow-empty -m "Release/${{ steps.set_branch_name.outputs.branch_name }}"
git push origin ${{ steps.set_branch_name.outputs.branch_name }}
pr_url=$(gh pr create -B main -t ${{ steps.set_branch_name.outputs.branch_name }} -b ${{ steps.set_branch_name.outputs.branch_name }})
echo pr_url
毎日、18時(UTC 9時 -> JST 18時)に「明日」の pr 生成します。
gh を使うので、git の url 設定は必要ありません。また、gh pr create は pr の url を return しますので、actions 上から確認もできます。
PR 削除 yaml file を生成や commit
.github/workflows
から、以下のコードを活用して、yaml file を作ってください。
name: Close Daily Release Branch
on:
schedule:
- cron: '0 0 * * *'
jobs:
build:
name: build
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: Set daily branch name
id: set_branch_name
run: |
BRANCH_NAME="release/$(date --date 'yesterday' +%Y-%m-%d)"
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
- name: Git Setting
run: |
git config --global user.email "youremail@gmail.com"
git config --global user.name "Ci Schedule Bot"
git remote set-url origin "https://github.com/yourgithublink.git"
- name: Close release branch and pr
run: |
git fetch origin ${{ steps.set_branch_name.outputs.branch_name }}
git push -d origin ${{ steps.set_branch_name.outputs.branch_name }}
毎日、9時(UTC 0時 -> JST 9時)に「昨日」の pr 削除します。
branch 削除には git を使うので、github link の設定が必要です。
結果
branch | actions | pr |
---|---|---|
確認が遅れていて、結果だけですが、うまく生成されて、branch の削除(pr close)もできました。
まとめ
すでに実装されているコードがあって、すぐできまいた。
自分の repository から、確認するときは、すぐ確認できるように、設定しました。
参考したページ