【问题标题】:Build multiple Docker images with gitlab-ci使用 gitlab-ci 构建多个 Docker 镜像
【发布时间】:2021-12-29 14:31:06
【问题描述】:

我正在尝试配置一个gitlab-ci.yml 文件来自动构建两个 Docker 映像。我已经看到它是使用 docker-compose 完成的,但就我而言,我不想使用 docker-compose。

我见过的docker-compose.yml 配置是这样的:

version: '3'

services:
  vcxagency-base:
    build:
      context: https://github.com/AbsaOSS/vcxagencynode.git#master
      dockerfile: ./vcxagency-base/vcxagency-base.Dockerfile
    image: vcxagency-base:1.15.0
  
  vcxagency-node:
    build:
      context: https://github.com/AbsaOSS/vcxagencynode.git#master
      dockerfile: ./vcxagency-node/Dockerfile
    image: vcxagency-node:0.3.1
    ports:
      - 8080:8080
    depends_on:
      - postgres
    environment:
      - LOG_LEVEL=debug
      - LOG_ENABLE_INDYSDK=false
      - LOG_JSON_TO_CONSOLE=false
      - SERVER_PORT=8080
      - SERVER_MAX_REQUEST_SIZE_KB=300
      - SERVER_ENABLE_TLS=false

我根本没有真正使用过 Docker。我试图浏览文档,但找不到具体的内容。

目标是让这些在 Kubernetes 集群上运行,但现在我只想在 GitLab 中构建图像。

【问题讨论】:

  • 您好!我在下面提供的答案是否可以帮助您解决最初的问题?如果是这样,您可能想接受它,以帮助其他在管道中遇到类似问题的人。如果帖子没有回答您的问题,也许可以提供更多信息

标签: docker kubernetes docker-compose gitlab gitlab-ci


【解决方案1】:

您可以使用 Kaniko 作为 docker 构建工具和称为矩阵构建的 GitLabs 功能。

如何使用 kaniko 构建 docker 镜像

以下片段摘自官方 GitLab docs

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
  rules:
    - if: $CI_COMMIT_TAG

什么是矩阵构建?

GitLab 引入了一项称为矩阵作业的并行作业执行功能,基本上该作业使用不同的变量集(可变矩阵)执行多次。

以上面的 sn-p 为基础,您将得到如下结果(假设您的 dockerfile 存储在 <PROJECT_DIR>/dockerfiles/ 下,并分别命名为 A.dockerfileB.dockerfile):

.kaniko-build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/${DOCKERFILE}"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
  rules:
    - if: $CI_COMMIT_TAG

docker-build:
  extends: .build
  parallel:
    matrix:
      - DOCKERFILE: ${CI_PROJECT_DIR}/dockerfiles/A.dockerfile
      - DOCKERFILE: ${CI_PROJECT_DIR}/dockerfiles/B.dockerfile

【讨论】:

猜你喜欢
  • 2020-08-09
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多