GitHubにバージョンをつけたTagをPushしたらContainer Imageをビルドして、GitHub側と同じTagをつけたContainer ImageをDocker HubにPushするGitHub Actionsを作ろうとして、今日やったらハマったので書いておく。
そのへんの情報を見てやったらできるだろうと思ったら思ったよりうまくいかなかった。。。
TL;DR
1つ目のリンクのHandle tags and labelsの項読め & 2つ目のリンクDocker Meta使え
失敗のながれ
最初にこのサイトのUsageだけをみて真似しようとしたところから始まる
name: ci on: push: branches: master jobs: main: runs-on: ubuntu-latest steps: - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: push: true tags: user/app:latest build-args: | arg1=value1 arg2=value2 - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }}
これを見たときに docker/build-push-action@v2
のtagsにどうやってGitHub側のTagをつけるかというふうに考えた。
失敗1: GitHub Actionsの環境変数をいい感じに利用
GitHub Actionsの変数に ${GITHUB_REF} があるが、そのままでは refs/tags/v1.0.0
のような形になるので、${GITHUB_REF#refs/tags/}
として最後のバージョンだけをもってきたかった。
が、そのまま下記のようにすると失敗する
- name: Build and push id: docker_build uses: docker/build-push-action@v2 with: push: true tags: user/app:${GITHUB_REF#refs/tags/} build-args: | arg1=value1 arg2=value2
buildx call failed with: invalid tag "***/app:${GITHUB_REF#refs/tags/}": invalid reference format
どうやらこの tags
のところではBashの変数としてはできないらしい。
失敗2: set-envを使う
調べてるとこんなのを見つけたので環境変数に入れればいけるのかーと思い試す
しかし、set-envはどうも使えなくなったらしい・・・
The `set-env` command is disabled. Please upgrade to using Environment Files or opt into unsecure command execution by setting the `ACTIONS_ALLOW_UNSECURE_COMMANDS` environment variable to `true`. For more information see: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/
あるいみ失敗3: set-output
build-push-actionのページに行ってみるとやり方書いてるじゃんということでなぜかv1 -> v2のUPGRADEの資料を引っ掛けて対応
たしかにこれで動いたのだが、実はこの記事を書くのに追加で調べてたら、もっと簡単そうなDocker Metaを見つけたのであった・・・
そんなわけで、次からはDocker Meta使います。。。