初版20200325
php+nginxアプリケーションの場合なので2つのコンテナをpushしている。
name: Build and Push Image to ECR
# 条件
on:
push:
tags:
- v* # tagが"v"からはじまってる場合に絞ってる。
# 処理
jobs:
build:
name: Build and Push
runs-on: ubuntu-latest
steps:
# tag名を変数化
- name: Get the version (tag)
id: get_version
run: echo ::set-output name=VERSION::$(echo $GITHUB_REF | cut -d / -f 3)
# 指定タグでチェックアウト
- uses: actions/checkout@v1
with:
ref: refs/tags/${{ steps.get_version.outputs.VERSION }}
token: ${{ secrets.GitHub_PAT }}
# AWS credentials設定
- name: Configure AWS credentials
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
# ビルド, push処理
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPO_APP: ${{ secrets.AWS_ECR_REPO_APP }}
ECR_REPO_NGINX: ${{ secrets.AWS_ECR_REPO_NGINX }}
XGITHUB_USER: ${{ secrets.XGITHUB_USER }}
XGITHUB_PASS: ${{ secrets.XGITHUB_PASS }}
XGITHUB_TAG: ${{ steps.get_version.outputs.VERSION }}
run: |
# 必要に応じディレクトリ移動してビルド
cd docker
docker-compose build
# Tagging app & push
docker tag $ECR_REPO_APP:latest $ECR_REPO_APP:$XGITHUB_TAG
docker tag $ECR_REPO_APP:$XGITHUB_TAG $ECR_REGISTRY/$ECR_REPO_APP:$XGITHUB_TAG
docker tag $ECR_REPO_APP:latest $ECR_REGISTRY/$ECR_REPO_APP:latest
echo "Tagged ... ${ECR_REGISTRY}/${ECR_REPO_APP}:${XGITHUB_TAG}"
docker push $ECR_REGISTRY/$ECR_REPO_APP:$XGITHUB_TAG
docker push $ECR_REGISTRY/$ECR_REPO_APP:latest
echo "Pushed ... ${ECR_REGISTRY}/${ECR_REPO_APP}:${XGITHUB_TAG}"
# Tagging nginx & push(上記と同じ処理をrepositry変えて繰り返してるだけ)
docker tag $ECR_REPO_NGINX:latest $ECR_REPO_NGINX:$XGITHUB_TAG
docker tag $ECR_REPO_NGINX:$XGITHUB_TAG $ECR_REGISTRY/$ECR_REPO_NGINX:$XGITHUB_TAG
docker tag $ECR_REPO_NGINX:latest $ECR_REGISTRY/$ECR_REPO_NGINX:latest
echo "Tagged ... ${ECR_REGISTRY}/${ECR_REPO_NGINX}:${XGITHUB_TAG}"
docker push $ECR_REGISTRY/$ECR_REPO_NGINX:$XGITHUB_TAG
docker push $ECR_REGISTRY/$ECR_REPO_NGINX:latest
echo "Pushed ... ${ECR_REGISTRY}/${ECR_REPO_NGINX}:${XGITHUB_TAG}"
# Slack通知とか必要に応じて
# - name: Notify push finish to Slack
# run: curl -X POST -H 'Content-type:application/json' --data '{"text":"'"${GITHUB_REPOSITORY}"'\n【FINISH】Pushed Image to ECR!!"}' ${{ secrets.SLACK_WEBHOOK }}
-
secrets
はgithub repositryのSettings > Secretsから便宜設定- AWS_ACCESS_KEY_ID
- AWS_ECR_REPO_APP
- AWS_ECR_REPO_NGINX
- AWS_SECRET_ACCESS_KEY
- XGITHUB_PASS
- XGITHUB_USER
- 面倒なのでとりあえずgithub user/passを指定しちゃってるが実際は鍵認証などでやるべき(
secrets.GitHub_PAT
でできそうな感じする) - 他ビルドに必要なenvがあればsecretsに設定する