GitHub Actionsのジョブ内でDockerコンテナを起動し、コンテナで簡単なステップを実行してみました。
#簡単なステップの実行
Dockerイメージを指定してワークフローを実行すると、仮想マシン(Linux)上でコンテナが実行されます。
name: Container
on: push
jobs:
node-docker:
runs-on: ubuntu-latest
container: #起動するコンテナイメージを指定
image: node:13.5.0-alpine3.10 #指定のdockerイメージを使用
steps: #dockerコンテナ内でステップを実行
- name: Log node version
run: |
node -v #nodeバージョンの確認
cat /etc/os-release #Linuxバージョンの確認
nodeとLinuxのバージョンを確認すると、指定したdockerイメージのバージョンと確かに同じです。
#ステップ単位でDockerイメージを利用
ステップごとにDockerイメージを指定してコンテナを起動することができます。
例えば、以下のdocker-steps
ジョブではnode:10.18.0-jessie
のイメージを指定しており、log node version
のステップではこのコンテナでnode -v
が実行されます。
次のStep with docker
のステップでは、docker://node:12.14.1-alpine3.10
がアクションとして実行され、node:12.14.1-alpine3.10
のイメージからコンテナが起動します。そのため、with
で指定している/bin/echo
はこちらのコマンドで実行されます。
最後のLog node version
ステップも、同様にuses
で指定したイメージから起動したコンテナで/usr/local/bin/node
が実行されます。
name: Container
on: push
jobs:
docker-steps:
runs-on: ubuntu-latest
container:
image: node:10.18.0-jessie
steps:
- name: log node version
run: node -v
- name: Step with docker
uses: docker://node:12.14.1-alpine3.10 #このステップだけで起動するコンテナイメージ
with:
entrypoint: '/bin/echo' #コンテナ起動時にechoコマンドを実行
args: 'Hello World' #echoコマンドの引数
- name: Log node version
uses: docker://node:12.14.1-alpine3.10
with:
entrypoint: '/usr/local/bin/node' #コンテナ起動時にnodeコマンドを実行
args: -v #nodeコマンドの引数(バージョン確認)
#自作シェルスクリプトの実行
ローカルで作成したシェルスクリプトのファイル(script.sh
)をコンテナで実行するステップ(Run a script
)を作成します。
ステップから与えた引数とHello World
を出力する簡単なスクリプトを作成し、chmod +x script.sh
で予めすべてのユーザに実行権限を与えます。
#!/bin/sh
echo $1
echo "Hello World"
ジョブに新しいステップを追加します。
作成したスクリプトを実行するため、ステップの前にactions/checkout@v2
のアクションを追加します。スクリプトを含むリポジトリがコンテナ内にクローンされます。
- uses: actions/checkout@v2 #次ステップでファイル読み込むのでクローンが必要
- name: Run a script
uses: docker://node:12.14.1-alpine3.10
with:
entrypoint: './script.sh' #作成したシェルスクリプトを実行
args: "Some string"
#Slackへの通知
Slack-NotifyのDockerイメージを使い、Incoming Webhook経由でSlackに通知を行うステップを作成します。
- name: send a slack message
uses: docker://technosophos/slack-notify
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} #WEBHOOK URL
SLACK_MESSAGE: "Hello slack"
通知を行うためにはWebhookのURLであるSLACK_WEBHOOK
と通知メッセージであるSLACK_MESSAGE
が必要です。
以下がWebhookURLの作成手順です。
slack apiでCreate an App
をクリックします。
トグルをonにしてAdd New Webhook to Workspace
をクリックすると、Webhook URLが表示されます。
ymlファイルを作成したGitHubリポジトリのSettingsでSLACK_WEBHOOK
という環境変数を作成します。
Valueに先ほど作成されたWebhook URLをコピーペーストします。
リポジトリをプッシュするとワークフローが実行され、チャンネルにメッセージが通知されます。
#おわりに
今度はCI/CDパイプラインをつくってみようと思います。
#参考資料
https://www.udemy.com/share/102DqFCEEZd11VRno=/