Github Actionsを試してみた
Github Actions を使い始めてみました。 ブランチにpushされたらtarで固めて転送して、 転送ファイル名をブランチにより切り替える みたいなものをやってみた。
workflowファイル
サーバ名とかは隠してる。
name: Actions Test
on:
push:
branches:
- master
- development
jobs:
build:
name: test job
runs-on: ubuntu-latest
steps:
- name: checkout master
if: github.ref == 'refs/heads/master'
uses: actions/checkout@v2
with:
ref: master
path: source
- name: checkout development
if: github.ref == 'refs/heads/development'
uses: actions/checkout@v2
with:
ref: development
path: source
- name: make tarball
run: tar -zcvf source.tar.gz -C source .
- name: make ssh key
run: echo "$SSH_PRIVATE_KEY" > secret && chmod 600 secret
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
- name: echo github context
run: echo "$GITHUB_CONTEXT"
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
- name: scp tarball master
if: github.ref == 'refs/heads/master'
run: scp -i secret -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no source.tar.gz zzzzzz@zzzzz:master.tar.gz
- name: scp tarball development
if: github.ref == 'refs/heads/development'
run: scp -i secret -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no source.tar.gz zzzzzz@zzzzz:development.tar.gz
やっていることは
- ソースをチェックアウト
- tarでソースを圧縮
- secretsからrsa鍵を取得
- github contextのダンプの表示(ただの確認)
- masterブランチだったら、master.tar.gzとしてファイルを転送、developmentブランチの場合development.tar.gzとしてファイルをscpする
こんな感じ
チェックアウト
- name: checkout master
uses: actions/checkout@v2
with:
ref: release
path: source
特定のブランチやら何やらをチェックアウトできる
コンテキストのダンプ
- name: echo github context
run: echo "$GITHUB_CONTEXT"
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
この部分でgithubコンテキストをjsonにして、表示をしている。github actionsのページでdump結果が確認できればOK。 コンテキストは公式ドキュメントを見るといい。
if
if: github.ref == 'refs/heads/master'
if 文自体は割とすんなり書けた。 else は現状できない。今回はやっていることが単純だからほぼ一緒のコマンドが並んでるんだけど、 コマンドが複雑になりそうとかだったらそもそもworkflowファイルを分けるか、専用のactionsを書いた方がいい感じがする。
secretの取得
- name: make ssh key
run: echo "$SSH_PRIVATE_KEY" > secret && chmod 600 secret
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
レポジトリのSettingsタブからSecretsを開くと秘密情報を入力できるページにいく。 そこで設定した変数がActionsから参照できるようになる。
普段Ansibleに触っているので、yamlを書くのはそんなに違和感がないので良かった。あと、ifとかの構文が入ってくると途端にややこしくなるっていう肌感もAnsibleと似てる気がする。
長いworkflowを書くよりも細かく区切って一つ一つをわかりやすくした方がつかいやすそうな印象。思ったよりも簡単だったので使えるところにぶっ込んでいこう。