はじめに
ようやくGitHub Actionsでworkflow単位の手動実行ができるようになったそうなので、workflow_dispatchを試してみました。
ついでにGitHub Container Registryがベータで出たそうなのでこちらも試してみました。
今回作成したレポジトリはhttps://github.com/yohei-yamazaki/workflow_dispatch_test
GitHub Container Registryの利用準備
GitHub Package RegistryからGitHub Container Registryへの移行より
Add your new container registry authentication personal access token (PAT) as a GitHub ACtions secret. GitHub Container Registry does not support using GITHUB_TOKEN for your PAT so you must use a different custom variable, such as CR_PAT. For more information, see "Creating and storing encrypted secrets."
GitHub Container RegistryではGITHUB_TOKEN
をサポートしていないのでパーソナルアクセストークンを作成する必要がある。必要な権限はread:packages
,write:packages
,delete:packages
の3つである。
作成したトークンを対象のリポジトリのSettingsタブのSecretsに登録する。今回はCR_PAT
として登録した。
今回のworkflow内容
今回のworkflowは以下で手動実行でGitHub Container Registryにpushするworkflowである。また、workflow内でinputの値を参照できるので、手動実行時にtag名を変更するとImageのtagを変更できる仕様を追加してみた。
name: manual trigger for push to GitHub Container Registry
on:
workflow_dispatch:
inputs:
tag:
description: Image tag
default: master
env:
DOMAIN: ghcr.io
jobs:
push-dhcr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Login GitHub Container Registry
run: docker login ${DOMAIN} -u ${GITHUB_ACTOR} -p ${{ secrets.CR_PAT }}
- name: Build image
run: docker build -f Dockerfile -t ${DOMAIN}/${{ github.repository_owner }}/centos:${{ github.event.inputs.tag }} .
- name: Push image to GitHub Container Registry
run: docker push ${DOMAIN}/${{ github.repository_owner }}/centos:${{ github.event.inputs.tag }}
workflow_dispatchを使用する
Actionsタブのworkflow_dispatchを使用したworkflowを選択する。今回はmanual trigger for push to GitHub Container Registry
を選択し、Run workflow
をクリック。
workflowを実行するブランチとinputsで設定した値を指定できる部分とworkflowを実行するボタンが出てくるので、確認した上でworkflowを実行してみると、画面がリフレッシュされて少し後に手動実行したworkflowの実行途中のresultが表示された。
GitHub Container Registryにpushされているか確認
Github Container Registryの方を確認してみると、無事pushできていた。
余談だが、GitHub Container Registryはレポジトリに依存しないので所有者の方のpackagesタブにしか表示されない。
感想
workflow_dispatchに関しては、workflow単位と任意のブランチ、変数を指定できて欲しかった機能だったので良さそうだが、inputのdefaultにgithub.sha
のように変数を使用したかったがそのまま埋め込まれてしまったので、回りくどい方法をする必要がありそうだなと感じた。
GitHub Container Registryに関しては、GitHub Package RegistryからDocker部分を切り出したという感じだと思うのでそんなないが、トークンに関してGITHUB_TOKEN
が万能?だったのはあるが、パーソナルアクセストークンはチームでの運用は大変そうなのでGITHUB_TOKEN
使用したいと思った。
参考文献
- https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/
- https://github.blog/2020-09-01-introducing-github-container-registry/
- https://docs.github.com/en/packages/getting-started-with-github-container-registry/migrating-to-github-container-registry-for-docker-images#updating-your-github-actions-workflow