需要帮助理解 gitlab docker 脚本

Need help understanding gitlab docker script

我一直在努力思考我公司以前编写的一些旧 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 b运行ch 指定所有这些阶段。具体来说,我在开发 b运行ch:

的预构建阶段无法理解脚本
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:dockerDOCKER_DRIVER:overlay2 表示)。然后,在预构建阶段它执行 4 个步骤:

  1. 使用预定义变量 $CI_REGISTRY_USER、$CI_REGISTRY_PASSWORD 和 $CI_REGISTRY.
  2. 登录到容器注册表
  3. 从此注册表中提取 CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP。 第一个问题:||是什么?真的吗?
  4. 构建一个 docker 文件还拉取 $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP? 第二个问题:这一行发生了什么?
  5. 将镜像(拉取的还是构建的?)推回容器注册表

如果能帮助理解这一点,我们将不胜感激。

  • docker pull $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP || true

我假设不是 100% 确定,如果 docker 拉取图像不存在,则命令不会失败。

问题:1

docker build -f Dockerfile --pull -t $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP --cache-from $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP .

Docker build --pull 始终为基本图像获取指定的图像摘要。而不是使用本地版本。

将它视为您在 Build Jenkin 机器上可用的基础映像,但它不会再次使用和拉取。

注意:--pull --no-cache 是标志,您不会用它传递任何值。

就像我们对 docker -tdocker -p

所做的那样

问题:2

docker build -f Dockerfile --pull -t $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP --cache-from $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP .

$CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP 不是拉图像,在 -t 之后是 标记 带有名称的 图像

问题 : 3

push image (The pulled one or the built one?) back to container registry

建立一个,因为你有带 $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP

的标签图像