使用 gitlab-ci 构建多个 Docker 图像
Build multiple Docker images with gitlab-ci
我正在尝试配置一个 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 中构建图像。
您可以使用 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 引入了并行作业执行的功能,称为矩阵作业,基本上作业是使用不同的变量集(变量矩阵)执行多次。
以上面的代码片段为基础,你会得到类似下面的结果(假设你的 docker 文件存储在 <PROJECT_DIR>/dockerfiles/
下,并命名为 A.dockerfile
和 B.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
我正在尝试配置一个 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 中构建图像。
您可以使用 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 引入了并行作业执行的功能,称为矩阵作业,基本上作业是使用不同的变量集(变量矩阵)执行多次。
以上面的代码片段为基础,你会得到类似下面的结果(假设你的 docker 文件存储在 <PROJECT_DIR>/dockerfiles/
下,并命名为 A.dockerfile
和 B.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