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"]