【发布时间】:2019-12-13 12:38:56
【问题描述】:
注意:我从以下配置文件中省略了一些细节、阶段和设置,以使帖子更短,问题更“可读”。如果您认为缺少必要的细节,请发表评论,我会(重新)添加它们。
现在,考虑一个 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
然后,在项目的 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
现在,这一切都很好,但我发现我必须在两个文件中重复图像名称,这让我很沮丧。这里的挑战(在我自己看来)是发布阶段不会发布作为组成部分的所有图像,因为有些是纯粹用于测试的纯模拟/虚拟图像。因此,我需要单独标记/推送图像和容器。
我希望能够只定义一次图像名称:我尝试引入.env 文件,该文件由docker-compose.yml 自动导入,
# .env
GITLAB=localhost:8081/images
SERVICE_1=name_of_service_1
SERVICE_2=name_of_service_2
这让我更新docker-compose.yml 以使用这些变量并写入image: "${GITLAB}/${SERVICE_1}",而不是上面的原始文件。 但是,我无法将这些变量导入gitlab-ci.yml,因此需要复制它们。
有没有简单的方法让docker-compose.yml和.gitlab-ci.yml共享一些(环境)变量?
【问题讨论】:
标签: docker docker-compose environment-variables gitlab-ci