我一直试图围绕我公司以前编写的一些旧 CI/CD 脚本来部署一些应用程序。gitlab 管道有几个阶段,如 .gitlab-ci.yml 文件的开头所示:
image: docker:stable
variables:
DOCKER_DRIVER: overlay2
CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_API: $CI_REGISTRY_IMAGE/career_api:latest
CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_APP: $CI_REGISTRY_IMAGE/career_app:latest
CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP: $CI_REGISTRY_IMAGE/career_dev_app:latest
CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_API: $CI_REGISTRY_IMAGE/career_dev_api:latest
# from https://storage.googleapis.com/kubernetes-release/release/stable.txt
K8S_STABLE_VERSION_URL: https://storage.googleapis.com/kubernetes-release/release/v1.18.4/bin/linux/amd64/kubectl
stages:
- prebuild
- test
- transform
- build
- deploy
然后,稍后,该文件为 DEV 和 MASTER 分支指定所有这些阶段。具体来说,我在开发分支的预构建阶段无法理解脚本:
prebuild_dev:
stage: prebuild
extends: .prebuildreq
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP || true
- docker build -f Dockerfile --pull -t $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP --cache-from $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP .
- docker push $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP
only:
refs:
- dev
tags:
- testcicd
我现在看到的是 gitlab runner 作为 docker 容器运行?(由文件开头的image:docker
andDOCKER_DRIVER:overlay2
表示)。然后,在预构建阶段,它执行 4 个步骤:
- 使用预定义的变量 $CI_REGISTRY_USER、$CI_REGISTRY_PASSWORD 和 $CI_REGISTRY 登录到容器注册表。
- 从此注册表中提取 CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP。第一个问题:什么是|| 真的在这里吗?
- 构建一个 dockerfile 还要拉 $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP?第二个问题:这条线发生了什么?
- 将镜像(拉取的还是构建的?)推回容器注册表
一些帮助理解这一点将不胜感激。