mag*_*nus 5 environment-variables docker gitlab-ci docker-compose
注意:我省略了以下配置文件中的一些细节、阶段和设置,以使帖子更短,问题更“可读”。如果您认为缺少重要细节,请发表评论,我将(重新)添加它们。
现在,考虑一个 docker-compose 项目,由以下配置描述,
# docker-compose.yml
version: '3'
services:
service_1:
build: ./service_1
image: localhost:8081/images/name_of_service_1
container_name: name_of_service_1
service_2:
build: ./service_2
image: localhost:8081/images/name_of_service_2
container_name: name_of_service_2
Run Code Online (Sandbox Code Playgroud)
然后,在项目的 git 存储库中,我们有另一个文件,用于 GitLab 持续集成配置,
# .gitlab-ci.yml
image: docker:latest
stages:
- build
- release
Build:
stage: build
script:
- docker-compose build
- docker-compose push
# Release by re-tagging some specific (not all) images with version num
Release:
stage: release
script:
- docker pull localhost:8081/images/name_of_service_1
- docker tag localhost:8081/images/name_of_service_1 localhost:8081/images/name_of_service_1:rel-18.04
Run Code Online (Sandbox Code Playgroud)
现在,这一切都很好,但我发现我必须在两个文件中复制图像名称,这令人沮丧。这里的挑战(在我看来)是发布阶段不会发布构成部分的所有图像,因为有些是纯粹的模拟/虚拟图像,纯粹用于测试。因此,我需要单独标记/推送图像和容器。
我希望只能定义一次图像名称:我尝试引入该.env文件,该文件是由自动导入的docker-compose.yml,
# .env
GITLAB=localhost:8081/images
SERVICE_1=name_of_service_1
SERVICE_2=name_of_service_2
Run Code Online (Sandbox Code Playgroud)
这让我更新docker-compose.yml以使用这些变量并写入image: "${GITLAB}/${SERVICE_1}"而不是上面的原始文件。但是,我无法将这些变量导入到 中 gitlab-ci.yml,因此需要复制它们。
有没有一种简单的方法来创建 docker-compose.yml 和 .gitlab-ci.yml 共享一些(环境)变量?
我不确定你的问题是什么。那么您的项目根目录中有一个 .env 文件,其中包含您需要在发布作业中设置的所有变量?为什么不像这样加载它们:
script:
- source ./env
- docker pull "${GITLAB}/${SERVICE_1}"
- docker tag "${GITLAB}/${SERVICE_1}" "${GITLAB}/${SERVICE_1}:rel-18.04"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7003 次 |
| 最近记录: |