2024.07.24  

【GithubActions】ワークフロー処理の結果保存と利用

Git    

GithubActionsで処理したデータは Github内で保存することができます(デフォルトでは90 日間保存)

今回の記事は、Nodo.jsのbuild結果をGithub上に保存して、保存したデータをワークフローで利用する方法をメモ書きしたものです。

保存にはactions/upload-artifact@v4、保存したデータをダウンロードするにはactions/download-artifact@v4を利用します。

マニュアル: githubワークフロー データを成果物として保存する

# action.yml

name: Build Node And Push Image To ECR

inputs:
  aws_region:
    required: true
    description: aws_region
  role-to-assume:
    required: true
    description: role-to-assume
  checkout_ref:
    required: true
    description: checkout_ref
  ecr-uri:
    description: AWS ECR URI
    required: true
  rev:
    description: Latest Commit SHA
    required: true

runs:
  using: "composite"
  steps:
    - name: Checkout branch
      uses: actions/checkout@v4
      with:
        ref: ${{ inputs.checkout_ref }}

    # yarn install、yarn buildを実行
    - name: Build Node
      run: |
        cd src/front && yarn install --non-interactive && yarn build
      shell: bash

    # githubにbuild結果を保存
    - name: Archive Build Node
      uses: actions/upload-artifact@v4
      with:
        name: build-node-data # 保村したデータをダウンロードする際にこの名前を使う
        path: src/front/**  # src/front 配下の成果物をアップロード

    # ECRにログイン
    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v2

    # buildにアップロードしたbuild結果をダウンロードして、docker buildとdocker pushを実行
    - name: Docker Build And Push Image To ECR
      uses: actions/download-artifact@v4 # githubに保存したbuild結果をダウンロード
      id: download-build-node
      with:
        name: build-node-data  # データのアップロード時に使用した名前を指定
        path: src/front # アップロードデータの配置先を指定
    - shell: bash
      # steps.download-build-node.outputs.download-path でダウンロードしたディレクトリのpathを取得できる
      run: |
        docker build --file ./Dockerfile --no-cache --tag ${{ inputs.ecr-uri }} \
          ${{steps.download-build-node.outputs.download-path}}
        docker tag ${{ inputs.ecr-uri }}:latest ${{ inputs.ecr-uri }}:${{ inputs.rev }}
        docker push ${{ inputs.ecr-uri }}:latest
        docker push ${{ inputs.ecr-uri }}:${{ inputs.rev }}

# Dockerfile

FROM node:20.11.0-alpine as build-tmp

WORKDIR /var/www/app

COPY ./ ./

FROM node:20.11.0-alpine

RUN apk --no-cache add tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata

WORKDIR /var/www/app
COPY --from=build-tmp /var/www/app/package.json /var/www/app/package.json
COPY --from=build-tmp /var/www/app/nuxt.config.ts /var/www/app/nuxt.config.ts
COPY --from=build-tmp /var/www/app/tsconfig.json /var/www/app/tsconfig.json
COPY --from=build-tmp /var/www/app/config /var/www/app/config
COPY --from=build-tmp /var/www/app/node_modules /var/www/app/node_modules
COPY --from=build-tmp /var/www/app/.nuxt /var/www/app/.nuxt
COPY --from=build-tmp /var/www/app/public /var/www/app/public
COPY --from=build-tmp /var/www/app/.output /var/www/app/.output

EXPOSE 3000

CMD ["yarn", "start"]
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信