以前、GoReleaserを使ってのGoのアプリケーションを配布するというタイトルの記事でGoReleaserを使ったバイナリ配布の方法について書いたが、Dockerhubへのイメージプッシュもやってみたのでまとめておく。
ソースコードの全体像はbmf-san/gondolaを参照。
ockers:
- image_templates:
- bmfsan/gondola:latest-amd64
- bmfsan/gondola:{{ .Version }}-amd64
use: buildx
goos: linux
goarch: amd64
build_flag_templates:
- --platform=linux/amd64
- image_templates:
- bmfsan/gondola:latest-arm64
- bmfsan/gondola:{{ .Version }}-arm64
use: buildx
goos: linux
goarch: arm64
build_flag_templates:
- --platform=linux/arm64
- image_templates:
- bmfsan/gondola:latest-arm
- bmfsan/gondola:{{ .Version }}-arm
use: buildx
goos: linux
goarch: arm
build_flag_templates:
- --platform=linux/arm
ちょっと長たらしいが、こんな感じでdockersのオプションを書く。
長らしくなっているのは、builds(バイナリ作成)の方のオプションと同じように成果物を作成するように調整しているためである。(もうちょっとまとめて書いたりできるのかもしれないが・・)
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm
- arm64
main: ./cmd/main.go
goreleaserのデフォルト値は以下を参照。
cf. github.com/goreleaser/goreleaser/blob/main/.goreleaser.yaml
FROM gcr.io/distroless/static-debian12
COPY gondola /
ENTRYPOINT ["./gondola", "-config", "config.yaml"]
COPYしているバイナリは、goreleaserがバイナリを生成してくれるので、自分でビルドする必要はない。
name: GoReleaser
on:
push:
tags:
- '*'
permissions:
contents: write
jobs:
goreleaser:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.22.3' ]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
distribution: goreleaser
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DockerhubへのイメージプッシュがしたいのでDockerhubへログインするように調整。
secretsはGithubのリポジトリの設定から事前に設定しておく。
と、こんな感じで簡単に設定できる! GoReleaser便利・・!!
関連書籍