新しいGitHub ActionsとGitHub Package RegistryでCI/CD(サンプルあり)
ありがたいことにGitHub Actions(beta)とGitHub Package Registry(beta)両方が使えるようになったので試してみました。
About
絶賛 limited public beta な GitHub Actions ですが既に 2 世代存在します。
/.github/*.workflow
を HCL で書くもの- 忘れましょう
/.github/workflows/*.yml
を書くもの- この記事ではこちらのみ扱います
- CI/CD できる!
- Azure Pipelinesで動いていてUbuntu, macOS, Windows で並列実行できる!
ですので、もしこの画像のページにたどりついてしまったらハズレです。
https://help.github.com/en/articles/about-github-actions に行きましょう。
また GitHub Package Registry の概要はDocker image をローカルから push する記事もご参照ください。
Examples
サンプルはこのリポジトリにあります。
201908.github-actions-cicd-examples
GitHub Actions の実行結果は GitHub にログインしていればActions タブから見れます。
未ログインだと public repository でも今のところ 404 になります。
なるほど、未ログインだと404ですね
— Hidenori Matsuki (@mazgi) August 13, 2019
タブも出ない
仕様か調整中かは不明ですが pic.twitter.com/TPRz96ZuRg
各 workflow の yaml と内容はざっと以下です。
- /.github/workflows/basic-01-environment.yml
strategy
を使って macOS, Ubuntu 両方で job を実行する- commit hash を指定して action を使う
name
などで emoji や記号を使ってみるGitHub Context
を取得する- “default environment variables”を参照する
- 環境変数と Bash の Parameter Expansion を組み合わせて使う
- /.github/workflows/docker-01-build.yml
Dockerfile
から Docker image を build する- build した Docker image を GitHub Package Registry にpublishする
- /.github/workflows/xcode-01-macos-app.yml
xcodebuild
で macOS アプリを build && archive する- DMG イメージを作って archive した macOS アプリを格納する
- tag 契機の実行であれば作った DMG イメージをreleaseの asset として upload する
Status badge
同僚に教えていただいたのですが
https://github.com/${NAMESPACE}/${REPOSITORY}/workflows/${WORKFLOW_NAME}/badge.svg
でステータスバッヂが取れます。
注意点としては ${WORKFLOW_NAME}
は workflow ファイル名ではなく name
で指定 するようです。
したがって /.github/workflows/basic-01-environment.yml
に
name: "Basic 01: Environment"
と書いた場合、badge を取得するためには basic-01-environment
ではなく Basic%2001%3A%20Environment
と指定する必要があります。
今回の例であれば https://github.com/mazgi/201908.github-actions-cicd-examples/workflows/Basic%2001%3A%20Environment/badge.svg
みたいな感じですね。
…workflow 名をもう少しシンプルにすればよかった。
That’s all
私は Context
で取れるものを調べたりちょっとした書き方でハマってしまって時間を費やしたので、この記事がどなたかの参考になれば幸いです。
また github.com/ruby/ruby の workflow はとても参考になりました。
ありがとうございます 🙏
GitHub Actions は特に on
で思った通りに発火しないとか [skip ci]
的なことできなさそうとか beta なこともあり色々と試行錯誤していますが、総じてとても便利な機能だと感じたので引き続きじゃんじゃん使わせていただきます 💪