0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

github actionsでdockerイメージを作成し、Dockerhub&AmazonECRへpushする

Last updated at Posted at 2021-04-04

※事前に各種「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等の多くのサイトを参考にさせて頂いています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?