1

我一直试图围绕我公司以前编写的一些旧 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:dockerandDOCKER_DRIVER:overlay2表示)。然后,在预构建阶段,它执行 4 个步骤:

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

一些帮助理解这一点将不胜感激。

4

1 回答 1

3
  • 搬运工拉 $CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP || 真的

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

问题:1

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

Dockerbuild --pull总是为基础镜像获取指定的镜像摘要。而不是使用本地版本。

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

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

就像我们用docker -tordocker -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

将镜像(拉取的还是构建的?)推回容器注册表

构建一个,因为你有标签图像$CONTAINER_RELEASE_IMAGE_CAREER_GROWTH_DEV_APP

于 2022-01-07T13:35:26.117 回答