GitHub Actionsで最新のmecab-ipadic-neologd辞書を持つdocker imageをDocker Hubにpushする
こんにちは@shunk031です。草津温泉からこの記事を書いています。温泉は良いぞ。
この記事は彌冨研 Advent Calendar 2019 17日目の記事です。
私のレポジトリshunk031/mecab-neologd-py3では、最新のmecab-ipadic-neologdを持つpython3用のdocker imageをTravisCIを使って定期的にビルドし、Docker Hubにpushしています。 今回はGitHub Actions公開に伴い、TravisCIからの乗り換えを行います。
以下、2019年12月現在の情報です。
GitHub Actionsを有効にする
まずはGitHub Actionsを有効にします。 こちらから指示に従ってGitHub Actionsにアクセスできるようにします。
Sign up for the beta
をクリックして進みます。
自身のユーザーアカウントが選択されている状態で Register for GitHub Actions Beta
をクリックします。
はい、完了です。早いですね。では対象のレポジトリで Actions
タブが現れていることを確認します。
Actions
タブが追加されています。今後はこのタブから設定を追加していきます。
GitHub Actionsでdocker imageをビルドする
GitHub Actionsでdocker imageをビルドするワークフローを定義します。
Actions
タブを選択すると、レポジトリの内容から自動的にマッチするワークフローがサジェストされています。今回は以下の Docker image
ワークフローをベースに、docker imageをビルドするワークフローを定義します。
以下が完成したワークフローです。GitHub Actionsのワークフローはyaml形式で記述します。
name: Docker Image CI on: push: schedule: - cron: "0 0 * * 2,5" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - name: Sign in Docker Hub run: docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} -p ${{ secrets.DOCKER_HUB_PASSWORD }} - name: Build and push Docker image run: | docker build -t shunk031/mecab-neologd-py3 . export TAG=`date +%Y.%m.%d` docker tag shunk031/mecab-neologd-py3 shunk031/mecab-neologd-py3:$TAG docker push shunk031/mecab-neologd-py3:$TAG docker tag shunk031/mecab-neologd-py3 shunk031/mecab-neologd-py3:latest docker push shunk031/mecab-neologd-py3:latest
steps
にワークフローの各ステップを記述します。今回Docker Hubにdocker imageをpushするにあたり、Docker Hubへのログイン
と Docker imageのbuildとpush
にステップを分けて実行させました。
Docker Hubへのログイン
Sign in Docker Hub
と名前をつけたステップに、Docker Hubへのログイン処理を記述しました。ログインするにあたり、Docker Hubの username
と password
が必要になるため、Secrets
画面にて DOCKER_HUB_USERNAME
と DOEKCER_HUB_PASSWORD
を設定しました。これらの変数は表からは直接見えないように暗号化されます。
このようにSecretsで設定した変数はyamlファイル内で ${{ secrets.DOCKER_HUB_USERNAME }}
のように参照することが可能です。
Docker imageのbuildとpush
Build and push Docker image
と名前をつけたステップに、docker imageのビルド等の処理を記述しました。
私の場合、最新の辞書を持ったimageがlatestになるよう、またビルドした日付をタグに付与しています。日々新語や道語に対応し変化する辞書の任意の時点でのimageを取得したいというモチベーションです。
cronを用いた定期的なbuildとpush
mecab-ipadic-neologdは月曜と木曜に更新されます*1。したがって、その翌日の火曜と金曜に新しい辞書を取り込んだdocker imageのビルドを schedule
の cron
機能で自動ビルドを実現します。
設定方法はlinuxのcronと同様のフォーマットで記述します。私はcronのフォーマットをいつもググって確認しているのですが、以下のようにポップアップで実行される時間が表示されるのでとても便利です。
(おまけ) READMEにバッジを付ける
ここまででGitHub Actionsで最新のmecab-ipadic-neologd辞書を持つdocker imageをDocker Hubにpushできるようにしました。おまけとしてワークフローが正しく実行されるかひと目で確認できるバッジをREADMEに追加します。
READMEにバッジを貼る際に必要なURLは https://github.com/(username)/(repository)/workflows/(workflow_name)/badge.svg
で取得可能です。 workflow_name
は ワークフローを記述するyaml
の先頭にある name
です。
READMEにバッジをつけるととてもそれっぽくなるので好きです。
おわりに
GitHub Actionsで最新のmecab-ipadic-neologd辞書を持つdocker imageをDocker Hubにpushするまでの工程を確認しました。GitHubがネイティブに提供するCI/CD環境はあたりまえですがGitHubと親和性が高く、これが無料*2で使えるというのは素晴らしいです。
Acknowledgement
mecab-ipadic-neologdにはいつもお世話になっております。作者の Toshinori Sato (@overlast)さま、ありがとうございます!