【GitHub Actions】Dockerコンテナを実行してみた
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パイプラインをつくってみようと思います。
参考資料
Author And Source
この問題について(【GitHub Actions】Dockerコンテナを実行してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/suzuki0430/items/d625f8b57ae317ae7d66著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .