From 307851705b6b098d82721e9afabcb8b76f149afe Mon Sep 17 00:00:00 2001 From: Endial Fang Date: Thu, 17 Aug 2023 09:46:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0CI/CD=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..441ea99 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,74 @@ +# CI/CD 的阶段定义,按顺序执行各阶段;默认包含`.pre`(最先执行)/`.post`(最后执行)两个阶段,不用显示定义 +stages: + - build + - test + - deploy + +# 全局变量定义 +variables: + IMG_URL: "$HARBOR_HOST/$HARBOR_PROJECT/$CI_PROJECT_NAME" + IMG_TAG: ":latest" + +# 默认值信息配置 +default: + # 各 stage 使用的默认镜像,如果不定义,则为 gitlab-runner 创建时指定的镜像;各 stage 可以覆盖该值以使用不同的镜像 + image: docker.colovu.com/library/docker:20.10.16 + # Gitlab-runner 配置的执行器为 Docker 时,需要 配置对应的 dind 服务(这里使用Runner中配置的Dind服务) + #services: + # - name: docker.colovu.com/library/docker:20.10.16-dind + # alias: docker + # 流水线中,各阶段都会执行的脚本命令,包括`before_script`(在各阶段 script 前执行)/`after_script`(在各阶段 script 后执行) + before_script: + - | + if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then + IMG_TAG=":latest" + else + IMG_TAG=":$CI_COMMIT_REF_NAME" + fi + - docker login -u "$HARBOR_USERNAME" -p "$HARBOR_PASSWORD" $HARBOR_URL + +# 环境变量信息 +env-variables: + stage: .pre + script: + - export + +# 编译阶段任务 +build-arm64: + stage: build + tags: + - arm64 + script: + - docker buildx build --platform=linux/arm64 --pull -t "$IMG_URL$IMG_TAG-linux-arm64" . --push + - docker rmi "$IMG_URL$IMG_TAG-linux-arm64" + +build-amd64: + stage: build + tags: + - amd64 + script: + - docker buildx build --platform=linux/amd64 --pull -t "$IMG_URL$IMG_TAG-linux-amd64" . --push + - docker rmi "$IMG_URL$IMG_TAG-linux-amd64" + +build-artifact: + stage: build + needs: [build-amd64, build-arm64] + script: + - docker manifest create "$IMG_URL$IMG_TAG" "$IMG_URL$IMG_TAG-linux-arm64" "$IMG_URL$IMG_TAG-linux-amd64" + - docker manifest push "$IMG_URL$IMG_TAG" + - docker manifest rm "$IMG_URL$IMG_TAG" + +# 测试阶段任务 +test: + stage: test + script: + - docker run --rm --platform=linux/arm64 "$IMG_URL$IMG_TAG" --version + - sleep 1 && docker rmi -f "$IMG_URL$IMG_TAG" + - docker run --rm --platform=linux/amd64 "$IMG_URL$IMG_TAG" --version + - sleep 1 && docker rmi -f "$IMG_URL$IMG_TAG" + +# 部署阶段任务 +deploy: + stage: deploy + script: + - echo "deploy stage"