ラズパイ向けにGithub Actionsでgolangのクロスビルドしたバイナリをアップロードさせる その② -Github Release自動化-

先日のエントリで、CI/CD向けにgithub上にファイルをアップロードする方法としてUpload-Artifactアクションを使う方法を記述したが、
デプロイで外部からダウンロードするには不適切だったことがわかった。

ラズパイ向けにGithub Actionsでgolangのクロスビルドしたバイナリをアップロードさせる その①
Raspberry Pi上で動かすgolangアプリのGithub Actionsを使ったCI/CD化にむけて、golangで書いたアプリケーションをRaspberry Pi用にもクロスビルドしてアップロードできるようにしたい。g...

そこで、今回はGithub Actionsでリリースを自動化する方法をまとめておく。

golang クロスビルド

まずは、リリースの成果物としてgolangからクロスビルド。(ちなみに今回のような場合は特にgox使わず go buildで良いが)

ひとまずバージョンとして日付とgitのコミットhashをバージョン文字列にしている。(本来はSemantic Versioningなどに従うべき)
バイナリのバージョンがわかりやすいように、-ldflags "-X main.version= でバイナリにもバージョンを埋め込んでいる。
これはprometheusなどで出力しておくと便利。

    - name: Cross build
      id: build
      run: |
          DATE=`date +'%Y%m%d%H%M%S'`
          VER=`date +'%Y%m%d%H%M%S'`-`git rev-parse --short HEAD`
          echo "::set-output name=RELEASE_VER::${VER}"
          gox -osarch="linux/arm" -ldflags "-X main.version=${VER}" ./cmd/elexporter/

また echo "::set-output name=XXXX" としてechoしておくと、後続のactionから変数を参照できるようになる。
今回は上記で決めたバージョン文字列をsteps.build.outputs.RELEASE_VERで他のactionから取得できるようにしている。

github release作成

リリースの作成。create-releaseを使う。

GitHub - actions/create-release: An Action to create releases via the GitHub Release API
An Action to create releases via the GitHub Release API - actions/create-release
    - name: Create Release
      id: create_release
      uses: actions/create-release@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          tag_name: ${{ steps.build.outputs.RELEASE_VER }}
          release_name: Release ${{ steps.build.outputs.RELEASE_VER }}
          draft: false
          prerelease: false

release 成果物のアップロード

リリース成果物のアップロード。upload-release-asset を使う。

GitHub - actions/upload-release-asset: An Action to upload a release asset via the GitHub Release API
An Action to upload a release asset via the GitHub Release API - actions/upload-release-asset

デプロイのときにバイナリを個別にダウンロードしたかったので、ひとまずzipで固めずに個別にアップロードさせるようにした。
ただの実行形式バイナリなので、content-typeはapplication/octet-stream

    - name: Upload Release Asset
      uses: actions/upload-release-asset@v1
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./elexporter_linux_arm
          asset_name: elexporter_linux_arm
          asset_content_type: application/octet-stream

これで成功すると、githubのReleaseにこのように追加される。

github release

参考

こちらを参考にさせていただきました!

GitHub ActionsでReleaseを自動化する方法としたときに得た学び
どうも、sKawashimaです。 最近 GitHub Actionsでデプロイやファイル加工を自動化すること がクセになりつつあります。以前はプライベートリポジトリでも無料で使えるWerckerを使ってましたが、 GitHub Actionsは早くて無料で最高 です! というわけで、そんな中でも地味にハマった「Git...

コメント

  1. […] […]

タイトルとURLをコピーしました