繁体   English   中英

GitLab-CI:如何从其他存储库构建 docker 映像?

[英]GitLab-CI: How to build docker image from other repository?

我想将我所有的 dockerfiles 放在一个存储库中,而不是将它们放在单独的项目中。 因此我创建了项目“指挥”。 所有 my.gitlab-ci 阶段也在“conductor”中指定。 在实际项目中我只使用了include命令。

我当前的代码:

docker build -f dockerfile .

问题是“dockerfile”不在执行管道的项目中,而是在“指挥”项目中。

如何修改 -f 参数以从另一个 gitlab 项目中获取 dockerfile?

实际项目可以添加导体作为Git 子模块git submodule add
在导体中,您将存储 Dockerfile,每个实际项目一个。

这样,您的实际项目可以使用

docker build -f conductor/dockerfile.actual

您可以使用

git clone https://gitlab.example.com/tanuki/awesome_project.git

克隆远程仓库。 如果 repo 不可公开访问,您可以创建一个部署令牌来执行此操作,并将git clone与部署令牌一起使用。

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

请参阅: https://docs.gitlab.com/ce/user/project/deploy_tokens/#git-clone-a-repository

我想将我所有的 dockerfiles 放在一个存储库中,而不是将它们放在单独的项目中。 因此我创建了项目“指挥”。 所有 my.gitlab-ci 阶段也在“conductor”中指定。 在实际项目中我只使用了include命令。

在公共存储库中定义通用阶段/模板并通过include关键字将它们包含在用户存储库中似乎是一个很好的用例。
查看包含文档

include 使用 include 关键字在 CI/CD 配置中包含外部 YAML 文件。 您可以将一个长的 gitlab-ci.yml 分解为多个文件以增加可读性,或减少在多个地方重复相同的配置。

从用户 git 存储库中,您可以在 . gitlab-ci.yml例如:

include:
  - project: 'my-group/my-common-project'
    file: '/templates/.gitlab-ci-docker-build-template.yml'

当然,请参考您需要在其中使用的常见阶段。
请注意,通用模板并没有被删除。 用户/消费者存储库可能会覆盖某些内容。 例如变量是可覆盖的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM