5 gitlab docker gitlab-ci docker-compose
我最近进入了 CI/CD,对我来说一个很好的起点是 GitLab,因为它们为此提供了一个简单的界面,我开始了解管道和阶段是什么,但我遇到了一些关于 GitLab CI 的矛盾想法在 Docker 上运行。
我的应用程序在 Docker Compose 上运行。它包含(等等),可以轻松构建和运行容器。Docker Compose 中的每个服务都创建了一个 Docker 容器,除了 php-fpm 一个,它能够完成称为“水平扩展”的事情,因此我可以稍后对其进行扩展。
我将使用 Docker Compose 进行生产,我目前正在开发中使用它,我也想在 CI/CD 管道中使用它。
然而 .gitlab-ci.yml 只支持一个镜像,所以我必须构建它并将它推送到他们的 GitLab Registry 或 Docker Hub,以便稍后在 CI/CD 过程中提取它。
如何将 Docker Compose 的服务构建为单个映像,以便将其推送到注册表/Docker,以便将其拉入 CI/CD?
我的项目包含一个 docker 文件夹和一个 docker-compose.yml。在 docker 文件夹中,每个服务都有自己独立的目录(php-fpm、nginx、mysql 等),每个服务(自己准备)都包含一个包含构建细节的 Dockerfile,尤其是 php-fpm 一个(deps 和 libs 很强)用这个)
docker-compose.yml 中的每个服务在它们自己的文件夹中都有一个构建上下文。
如果我不清楚,我可以提供其他信息。
zyp*_*510 24
然而 .gitlab-ci.yml 仅提供对一张图像的支持
这不是真的。来自官方文档:
您的图像将按照以下方案命名:
Run Code Online (Sandbox Code Playgroud)<registry URL>/<namespace>/<project>/<image>GitLab 最多支持三个级别的镜像存储库名称。以下图像标签示例是有效的:
Run Code Online (Sandbox Code Playgroud)registry.example.com/group/project:some-tag registry.example.com/group/project/image:latest registry.example.com/group/project/my/image:rc1
因此,问题的解决方案很简单 - 只需构建单独的映像并将它们以不同的映像名称推送到 GitLab 容器注册表即可。
如果您想要一个示例,我的管道设置如下:
<registry URL>/<namespace>/<project>/<image>
Run Code Online (Sandbox Code Playgroud)
并且您应该能够$CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHA在以后的管道作业或撰写文件中使用相同的图像(前提是将变量传递到运行撰写文件的位置)。
您不需要dind运行 docker-compose 堆栈。您可以运行多个docker-compose up命令。
acceptance_testing:
stage: test
before_script:
- docker-compose -p $CI_JOB_ID up -d
script:
- docker-compose -p $CI_JOB_ID exec -T /run/your/test/suite.sh
after_script:
- docker-compose -p $CI_JOB_ID down -v --remove-orphans || true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3931 次 |
| 最近记录: |