GitHubActionsでリリースドラフトをpublishするとリモートサーバにデプロイする設定
まえがき
サーバへのデプロイは自動化しないとね
デプロイ方法忘れるからね
設定
code:.github/workflows/main.yml
name: deploy
on:
release:
jobs:
deploy:
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Build artifact
# ここにデプロイ対象を作る
run: echo foobar > artifact.txt
- name: Release
uses: softprops/action-gh-release@v1
with:
files: artifact.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy application
run: curl ${{ secrets.WEBHOOK_URL }}
サーバ側にもWebhookを受けるようのWebサーバを立てておく
設定の解説
on.release.typeでリリースドラフトがpublishされたときにCIが走る
stepsのBuild artifactの部分でデプロイ対象を生成する
今回は簡易でただのテキストファイルを作っている
ReleaseでGitHub Releaseにアーティファクトをリリース
最後にサーバ側にリクエストを投げる
この例では単純化のためにcurlでGETリクエストを投げている
URLはGitHubのリポジトリ設定のSecretsに追加している サーバ側はGitHub Releaseにリリースされた最新のアーティファクトを取得しにいくように実装する
取得しに行くURLは https://api.github.com/repos/{user_name}/{repo}/releases/latest
巨大なJSONが返却される
JSONの.assets[0].browser_download_urlのURLを取得する
curlなり何なりでアーティファクトを取得する
curl --silent --retry 3 -L -o {tmp_file} {download_url}
あとはよしなにアーティファクトを展開するなりして所定のパスに配置する