はじめに
この記事は2023年度の振り返りです。
前回の記事で、パイプライン上でminIOにデプロイするものを作成しました。
ただ、もしminIOが消えてしまったときのことを考慮して、gitlabそのものにもバックアップを取っておきたいというのが今回の趣旨になります。
CD(Code Deploy)
会社ではgitlabを利用してるので、gitlab-runnerを利用した内容になります
variables(一部抜粋)
variables:
WIN_BINARY: "${APPNAME}-${VERSION}-setup.exe"
build_job(一部抜粋)
build_job:
stage: build
image: electronuserland/builder:18-wine
rules:
- if: $CI_COMMIT_TAG
before_script:
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
- unzip awscliv2.zip
- ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws --version
- cat /etc/*-release
- npm install --force
- rm -rf dist
script:
- sed "s/0.0.0/${CI_COMMIT_TAG}/g" package.json > _package.json && mv _package.json package.json
- export VERSION=$(node -e "console.log(require('./package.json').version)")
- echo "VERSION=$VERSION" >> variables.env
- export APPNAME=$(node -e "console.log(require('./package.json').name)")
- echo "APPNAME=$APPNAME" >> variables.env
- cat variables.env
- npm run build:win:publish
artifacts:
reports:
dotenv: variables.env
name: $CI_COMMIT_REF_SLUG
paths:
- $CI_PROJECT_DIR/dist/*.*
expire_in: 1 month
when: on_success
upload_job(一部抜粋)
upload_job:
stage: upload
needs:
- job: build_job
artifacts: true
rules:
- if: $CI_COMMIT_TAG
before_script:
- apk update
- apk add curl
script:
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file "./dist/${WIN_BINARY}" "${PACKAGE_REGISTRY_URL}/${WIN_BINARY}"'
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file "./dist/latest.yml" "${PACKAGE_REGISTRY_URL_YML}/latest.yml"'
- echo "${PACKAGE_REGISTRY_URL_YML}/latest.yml"
release_job(一部抜粋)
release_job:
image: registry.gitlab.com/gitlab-org/release-cli
needs:
- job: build_job
artifacts: true
- job: upload_job
artifacts: true
stage: release
rules:
- if: $CI_COMMIT_TAG
script:
- echo "Release $VERSION"
- |
release-cli create --name "Release $VERSION" --tag-name $VERSION \
--description 'Created using the release-cli. $CI_COMMIT_TITLE' --ref $CI_COMMIT_SHA \
--assets-link "{\"name\":\"${APPNAME}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${WIN_BINARY}\"}" \
--assets-link "{\"name\":\"${APPNAME} Latest\",\"url\":\"${PACKAGE_REGISTRY_URL_YML}/latest.yml\"}"
ざっくり説明
-
build_job
- ビルド→S3へアップロード(前記事)
- 生成されたexeファイルをartifactsに登録
-
upload_job
-
release_job
さいごに
フロントのCDは以上となります。
ここまで色々試行錯誤しましたが、無事に利用できるレベルまでできたので良かったです。
CI側がまだ薄いので、今後の課題として頑張っていきたいと思います。