【发布时间】:2021-09-09 16:05:29
【问题描述】:
我正在开发应用程序部署管道。
我有多个环境,应该由应用程序实例按需填充。
Desired behaviour: init_1 job triggers executor with specific parameter
- 运行参数化作业以进行部署
- 上述作业从用户那里获取参数
- 用户只能从预定义列表中选择参数值
- 用户应提供参数来启动管道
我尝试了什么:
-
(1) 我有手动触发的部署作业,我将参数设置为环境变量 [例如:ENV_NAME]。 此解决方案有效,但容易出错,并且很难正确重新运行。
-
(2) 我有一个初始化作业,它使用预设值 [例如:dev] 设置环境变量 [例如:ENV_NAME]。部署作业在初始化之后触发。 此解决方案有效,但没有实际价值。
-
(3) 我有多个初始化作业,可以设置单个环境变量,例如:ENV_NAME] 和特定值 [例如:dev、stage1、stage2]。部署作业应在初始化作业设置环境变量后触发。 此解决方案不起作用,因为 init 和 deploy 作业处于两个单独的阶段,并且在前一个阶段的所有作业完成之前,后者不会启动。
-
(3.a) 与上面相同,但这里初始化作业设置为 allow_failure。 此解决方案不起作用,因为 init 作业被完全跳过,因此部署作业没有获得所需的参数。
stages:
- init
- execute
init_1:
stage: init
rules:
- when: manual
script:
- echo "INFRA_ID=pr1" >> build.env
artifacts:
reports:
dotenv: build.env
allow_failure: true
init_2:
stage: init
rules:
- when: manual
script:
- echo "INFRA_ID=pr2" >> build.env
artifacts:
reports:
dotenv: build.env
allow_failure: true
executor:
stage: execute
script:
- echo "Selected infrastructure $INFRA_ID"
-
(3.b) 与上面相同,但在 init 和 deploy 作业之间声明了依赖关系。 此解决方案不起作用,因为部署作业取决于所有初始化作业。
-
(4) 我创建了 N 个初始化流并部署。 此解决方案有效,但会导致许多重复代码。
您对我的用例有什么解决方案吗?
提前致谢
【问题讨论】:
标签: gitlab-ci