※事前に各種「secrets」変数は設定しておいたください。
→ログイン情報であったり、PUSH先のリポジトリ名になります
■secrets
※ github の 上部メニュー「settings」を選択し、「Secrets」メニューから追加してください。
キー | - |
---|---|
AWS_ACCESS_KEY_ID | AWSのIAMから発行してください |
AWS_SECRET_ACCESS_KEY | AWSのIAMから発行してください |
AWS_ECR_REPO_NAME | ECRでリポジトリを作成してください |
DOCKER_HUB_USERNAME | docker hub のアカウントを生成してください |
DOCKER_HUB_ACCESS_TOKEN | docker hub から発行してください |
SLACK_WEBHOOK | slackから通知先を取得してください |
■yml
create_image.yml
name: create image
# トリガーになります。
# イメージを作成したいタイミングを記載します。
# 下記の場合、githubのタグを生成した際に先頭に「v」をつけると処理が実行されます
on:
push:
tags:
- v*
jobs:
create:
runs-on: ubuntu-latest
steps:
# ソースを src 配下に配置
- name: checkout
uses: actions/checkout@v2
with:
path: src
# 準備処理
- name: setup
run: |
### タグ名を取得
CURRENT_VERSION=$(echo $GITHUB_REF | sed 's/refs\/tags\///')
### リポジトリ名を少々カスタマイズ(dockerhubやecrにpushするための)
REPO_NAME=$(echo ${{ github.repository }} | sed -e 's/^.\+\/\(.\+\)$/\1/g')
### 次のstepに値を渡す
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV
echo "REPO_NAME=$REPO_NAME" >> $GITHUB_ENV
# AWSのログイン処理(アクセスキーやシークレットキーをAWSから取得&設定をしておいてください)
- name: setup - AWS
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-1
# ECRのログイン処理
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
# dockerイメージを作成
- name: build image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: ${{ secrets.AWS_ECR_REPO_NAME }}
run: |
### dockerhubのPUSH先のタグ名を作成
DOCKER_HUB_BASE_NAME=${{ secrets.DOCKER_HUB_USERNAME }}/${{ env.REPO_NAME }}
TAG_HUB=${DOCKER_HUB_BASE_NAME}:${{ env.CURRENT_VERSION }}
### ECRのPUSH先のタグ名を作成(privateリポジトリ用)
AWS_ECR_BASE_NAME=${ECR_REGISTRY}/${ECR_REPOSITORY}
TAG_ECR=${AWS_ECR_BASE_NAME}:${{ env.CURRENT_VERSION }}
### dockerコマンドでイメージを作成(dockerhubとecrの両方のタグを設定しています)
docker build src/. --target prod -t ${TAG_HUB} -t ${TAG_ECR} \
--build-arg TEST_ARG=123
### 次のstepにタグ名を渡す
echo "TAG_HUB=$TAG_HUB" >> $GITHUB_ENV
echo "TAG_ECR=$TAG_ECR" >> $GITHUB_ENV
# ECRへpush
- name: push - Amazon ECR
run: |
docker push ${{ env.TAG_ECR }}
# dockerhubにログイン
- name: setup - Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
# dockerhubへpush
- name: push - dockerhub
run: |
docker push ${{ env.TAG_HUB }}
# 完成したことを通知する
- name: complete
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_MESSAGE: "image を作成しました。"
※Stack Overflow等の多くのサイトを参考にさせて頂いています。