はじめに
しばらく前に作った以下のレジュメサイトの DevOps を Travis CI から GitHub Actions に引っ越した。
cv.kheiakiyama.com
理由としては GitHub Actions を実用したかったためだ。
GitHub Actions のバックエンドが Azure Pipelines の fork 版
新 GitHub Actions 入門 - 生産性向上ブログ
と聞いていた背景と、普段 Azure Pipelines を利用している立場からも GitHub Actions との違いを知りたかった。
Travis CI で構成したときの記事は以下。
kheiakiyama.hateblo.jp
GitHub Actions のドキュメント
ドキュメントは日本語で用意されている。
help.github.com
ただ、Azure Pipelines を知っているせいか、「Artifact」 が「成果物」となっているなど、違和感が多々あり、英語のドキュメントを読むほうがしっくりくるかもしれない。
help.github.com
それにしても Azure Pipelines のドキュメントは英語のみなのに GitHub Actions は違うんですね。。
↓ Azure Pipelines のドキュメント
Azure Pipelines documentation | Microsoft Docs
GitHub Actions での実装
現物は GitHub 上のリンク を参照してもらうとして、定義ファイルの yaml に解説を追記しておく。
name: "release"
on: # rebuild master branch changes
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 # 利用する GitHub Actions を ダウンロードするための処理
- uses: actions/setup-ruby@v1 # jekyll で使う ruby のインストール用 GitHub Action
with:
ruby-version: 2.5
- name: Set up bundler
run: gem install bundler
- name: nokogiri dependencies # bundle install で nokogiri を正しくインストールするための依存ライブラリのインストール
run: |
sudo apt-get update
sudo apt-get install libxml2 libxslt1-dev
- name: jekyll build
run: |
bundle install --jobs 4
./scripts/cibuild
env:
NOKOGIRI_USE_SYSTEM_LIBRARIES: false
- name: Upload jekyll output # Azure DevOps ではおなじみの Artifact にアップロード、次の Job に受け渡す
uses: actions/upload-artifact@v1
with:
name: jekyll
path: './_site'
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v2
- uses: kheiakiyama/install-azcopy-action@v1 # azcopy のインストール。詳細は別記事で。
with:
version: 'v10'
- name: Download jekyll output # build job でアップロードした Artifact をダウンロード。 name と同名の path にダウンロードされる
uses: actions/download-artifact@v1
with:
name: jekyll
- name: azcopy upload jekyll content # azcopy で Blob Storage にコンテンツをアップロード
run: |
azcopy --version | grep 'azcopy'
azcopy --source ./jekyll --destination "$BLOB_CONTAINER_URL" --dest-key ${{ secrets.STORAGE_KEY }} --recursive --quiet --set-content-type
env:
BLOB_CONTAINER_URL: 'https://kheiakiyama.blob.core.windows.net/$web'
- uses: azure/login@v1 # Azure CDN のパージのために azcli でログイン
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Azure CLI script # Azure CDN パージ
uses: azure/CLI@v1
with:
inlineScript: |
az cdn endpoint purge -g kheiakiyama.com --profile-name kheiakiyama-cdn -n cv-kheiakiyama --content-paths '/*'
Travis CI の頃からこのリポジトリは public なのだが、GitHub Actions の実行ログにしてもシークレットは見えないので、特に問題ではない。
(Azure Resource の名前は見せているが、まあ特に問題ないかと)
感想
Azure DevOps の fork というのには納得で、Multi staging build の Azure Pipelines とほぼ同じ使い勝手だった。
Azure Pipelines でいうところの Task は GitHub Actions ではまだ充実していないところがあるという感じ。
Azure 関係の GitHub Actions は結構数がある様子。
GitHub Marketplace · Actions to improve your workflow · GitHub
開発者が 3rd Party の Actions を作れるので、今後 GitHub Actions がどの程度充実していって Azure Pipelines と差がついていくのかを見守っていきたい。