是否有配置多个具体名称的环境的方式(特别是test
,stage
和prod
)?
在他们的文档(https://docs.gitlab.com/ce/ci/environments.html)中,他们讨论了动态创建的环境,但它们都是基于提交的.
我的构建步骤对于所有这些步骤都是相同的,除了换掉slu ::
deploy_to_test:
environment:
name: test
url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
scripts:
- deploy ${CI_ENVIRONMENT_SLUG}
deploy_to_stage:
environment:
name: stage
url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
scripts:
- deploy ${CI_ENVIRONMENT_SLUG}
deploy_to_prod:
environment:
name: prod
url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
scripts:
- deploy ${CI_ENVIRONMENT_SLUG}
有没有办法将其压缩成一组指令?就像是:
deploy:
environment:
url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
scripts:
- deploy ${CI_ENVIRONMENT_SLUG}
Fliss Hou..
13
除了提供的答案,我想添加另一种类似的方法来实现同样的东西,但它更灵活,而不是使用模板,然后在一个阶段合并它.
你可以做的是创建一个隐藏的密钥,但是这种格式,例如,
.login: &login |
cmd1
cmd2
cmd3
...
然后你可以使用'*',星号,将它应用到不同的阶段,如:
deploy:
stage: deploy
script:
- ...
- *login
- ...
bake:
stage: bake
script:
- ...
- *login
- ...
结果相当于:
deploy:
stage: deploy
script:
- ...
- cmd1
- cmd2
- cmd3
- ...
bake:
stage: bake
script:
- ...
- cmd1
- cmd2
- cmd3
- ...
基于以下资源:https:
//gitlab.com/gitlab-org/gitlab-ce/issues/19677#note_13008199
至于模板实现,它是"合并"的.根据我自己的经验,如果在合并模板后附加更多脚本,模板脚本将被覆盖.而且您不能一次应用多个模板.仅执行最后一个模板脚本.例如:
.tmp1: &tmp1
script:
- a
- b
.tmp2: &tmp2
script:
- c
- d
job1:
<<: *tmp1
<<: *tmp2
stage: xxx
job2:
<<: *tmp2
stage: yyy
script:
- e
- f
相同的结果是:
job1:
stage: xxx
script:
- c
- d
job2:
stage: yyy
script:
- e
- f
如果不确定语法正确性,只需将.gitlab.yml
文件内容复制并粘贴到"CI Lint"进行验证.该按钮位于管道选项卡中.
gitlab gitlab-ci yaml
1> Fliss Hou..:
除了提供的答案,我想添加另一种类似的方法来实现同样的东西,但它更灵活,而不是使用模板,然后在一个阶段合并它.
你可以做的是创建一个隐藏的密钥,但是这种格式,例如,
.login: &login |
cmd1
cmd2
cmd3
...
然后你可以使用'*',星号,将它应用到不同的阶段,如:
deploy:
stage: deploy
script:
- ...
- *login
- ...
bake:
stage: bake
script:
- ...
- *login
- ...
结果相当于:
deploy:
stage: deploy
script:
- ...
- cmd1
- cmd2
- cmd3
- ...
bake:
stage: bake
script:
- ...
- cmd1
- cmd2
- cmd3
- ...
基于以下资源:https:
//gitlab.com/gitlab-org/gitlab-ce/issues/19677#note_13008199
至于模板实现,它是"合并"的.根据我自己的经验,如果在合并模板后附加更多脚本,模板脚本将被覆盖.而且您不能一次应用多个模板.仅执行最后一个模板脚本.例如:
.tmp1: &tmp1
script:
- a
- b
.tmp2: &tmp2
script:
- c
- d
job1:
<<: *tmp1
<<: *tmp2
stage: xxx
job2:
<<: *tmp2
stage: yyy
script:
- e
- f
相同的结果是:
job1:
stage: xxx
script:
- c
- d
job2:
stage: yyy
script:
- e
- f
如果不确定语法正确性,只需将.gitlab.yml
文件内容复制并粘贴到"CI Lint"进行验证.该按钮位于管道选项卡中.
gitlab gitlab-ci yaml
@LeiYang在YAML中似乎`|`表示多行。但是,我实际上没有看到任何正式文档提到这种用法。有关更多信息,请参见[问题19677](https://gitlab.com/gitlab-org/gitlab-ce/issues/19677)。
2> fedorqui..:
是的,你可以使用锚点.如果我正确地遵循文档,您将使用隐藏密钥重写它.XX
,然后应用它<<: *X
.
例如,这可以定义密钥:
.job_template: &deploy_definition
environment:
url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
scripts:
- deploy ${CI_ENVIRONMENT_SLUG}
然后可以使用所有块进行写入<<: *job_template
.我假设environment
将名称与预定义的URL合并.
deploy_to_test:
<<: *deploy_definition
environment:
name: test
deploy_to_stage:
<<: *deploy_definition
environment:
name: stage
deploy_to_prod:
<<: *deploy_definition
environment:
name: prod
上面链接中的完整文档部分:
YAML有一个名为"锚点"的便捷功能,可让您轻松复制文档中的内容.Anchor可用于复制/继承属性,是与隐藏键一起使用以提供作业模板的完美示例.
以下示例使用锚点和映射合并.它将创建两个作业test1和test2,它们将继承.job_template的参数,每个作业都定义了自己的自定义脚本:
.job_template: &job_definition # Hidden key that defines an anchor named 'job_definition'
image: ruby:2.1
services:
- postgres
- redis
test1:
<<: *job_definition # Merge the contents of the 'job_definition' alias
script:
- test1 project
test2:
<<: *job_definition # Merge the contents of the 'job_definition' alias
script:
- test2 project
&设置锚点的名称(job_definition),<<表示"将给定的哈希值合并到当前的哈希值",*包括命名的锚点(job_definition).扩展版本如下所示:
.job_template:
image: ruby:2.1
services:
- postgres
- redis
test1:
image: ruby:2.1
services:
- postgres
- redis
script:
- test1 project
test2:
image: ruby:2.1
services:
- postgres
- redis
script:
- test2 project
完善.谢谢.