Docker 如何在Gitlab runner上执行基本容器
我正在开发一个使用集装箱化环境的CI/CD管道Docker 如何在Gitlab runner上执行基本容器,docker,gitlab,containers,gitlab-ci-runner,Docker,Gitlab,Containers,Gitlab Ci Runner,我正在开发一个使用集装箱化环境的CI/CD管道 在我的笔记本电脑上,所有东西都在centos容器中运行,其中包含我的所有工具,而代码和配置则驻留在共享卷上 当我提交时,大部分共享卷被推送到主卷。 但是,例如,我从虚拟环境中排除了任何python二进制文件 在Gitlab中,该容器用作我的“基本”容器,用于执行我的一些runner阶段,以便 对代码和ansible配置执行静态lint测试 用ansible bender打造最终产品的新形象 为了区分环境,我在entrypoint.sh中
- 在我的笔记本电脑上,所有东西都在centos容器中运行,其中包含我的所有工具,而代码和配置则驻留在共享卷上李>
- 当我提交时,大部分共享卷被推送到主卷。
- 但是,例如,我从虚拟环境中排除了任何python二进制文件李>
- 在Gitlab中,该容器用作我的“基本”容器,用于执行我的一些runner阶段,以便
- 对代码和ansible配置执行静态lint测试
- 用ansible bender打造最终产品的新形象
entrypoint.sh
中使用了一个基本shell,当容器出现时执行该shell,在该shell中,我使用了一个由Gitlab管理的环境变量:CI\u JOB\u STAGE
。但是当我在本地运行容器时,shell脚本的执行方式似乎与在运行程序上不同。这很疯狂,因为容器的全部意义不是吗
- 目前还不清楚Gitlab在运行程序主机和容器之间装载共享的位置
- 测试值
的条件似乎不起作用,即使使用和CI_JOB_STAGE
echo打印时显示值
- 出于某种原因,入口点在执行阶段之前和之后执行
- entrypoint.sh脚本
- 容器在本地运行时的输出
- 在本例中,通过检查activate二进制文件是否存在,可以看到虚拟环境已经存在,这样环境就被简单地激活了
- 然后检查flask二进制文件,查看是否需要安装需求
- 我知道这很原始,但这只是POC
- 转轮第一级的输出
- 基于shell脚本,它不应该安装需求,因为这是stage命令的一部分
- 我不相信它真的这样做了,因为它过得太快了,但信息表明它经历了这种情况
if[$CI_JOB_STAGE-eq“locally”]]&&!测试-f.“/env/bin/flask”
- 如果阶段是本地的(错误:我们清楚地看到阶段是
)lint\u code
- 和
- 烧瓶不存在(好吧,它不会存在,但这并不重要,因为前半部分已经是假的)
- 如果阶段是本地的(错误:我们清楚地看到阶段是
entrypoint.sh
中编写脚本。尝试将其重写为.gitlab ci.yml
:
stages:
- install
- build
- test
job 0:
stage: .pre
script: install some prerequisites
job 1:
stage: install
script:
- python3 -m venv env
- source ./env/bin/activate
- pip install -r ./dev/requirements.txt
job 2:
stage: build
script: make build
job 3:
stage: test
script: make test
它将使构建具有可复制性,并且更易于阅读。您可以使用,只要确保您使用的是Gitlab>=12.4。pre和post作业是否会在
default:
部分中指定的容器上执行?也许这就是我搞砸的地方。我是否应该保留默认图像,并为不同阶段指定特定图像?这就解释了为什么每次执行之前和之后都会执行我的entrypoint.sh
。@MarkChassy每个阶段可以使用不同的图像,但会变得更复杂。除非您有特殊要求,否则最好使用维护良好的映像,例如python:3.7
和每个运行依赖于安装的Pypi模块。您可能会比Python版本更频繁地更改依赖模块。或者每个阶段你可能有不同的requirements.txt
。我的账户在一封基于工作的电子邮件上,当我离开工作时,我失去了所有的代表。。。那会教我的。