我正在尝试在GitLab中为项目运行2条管道,但找不到任何方法。
答案 0 :(得分:0)
在gitlab CI中,您不能为一个项目明确创建多个管道。在某些情况下,多个管道会同时运行,例如,当您有仅针对合并请求运行的作业而没有针对合并请求运行的其他作业时。
也就是说,有多种方法可以获得相互独立运行多个系列作业的效果。
如果要为同一项目启动2条管道,则可以使用pipeline triggers。此方法仅限于2个管道,而gitlab CI不是不,意味着要使用这种方式。通常,触发器用于在另一个项目上启动管道。
所有在您的.gitlab-ci.yml
中:
stages:
- start
- build
###################################################
# First pipeline #
###################################################
start_other_pipeline:
stage: start
script:
# Trigger a pipeline for current project on current branch
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=$CI_COMMIT_REF_NAME $CI_API_V4_URL/projects/$CI_PROJECT_ID/trigger/pipeline
except:
- pipelines
build_first_pipeline:
stage: build
script:
- echo "Building first pipeline"
except:
- pipelines
###################################################
# Second pipeline #
###################################################
# Will run independently of the first pipeline.
build_second_pipeline:
stage: build
script:
- echo "Building second pipeline"
only:
- pipelines
要清除.gitlab-ci.yml
的混乱情况,可以使用include
关键字:
# .gitlab-ci.yml
include: '/first-pipeline.yml'
include: '/second-pipeline.yml'
stages:
- start
- build
# This starts the second pipeline. The first pipeline is already running.
start_other_pipeline:
stage: start
script:
# Trigger a pipeline for current project on current branch
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=$CI_COMMIT_REF_NAME $CI_API_V4_URL/projects/$CI_PROJECT_ID/trigger/pipeline
except:
- pipelines
# first-pipeline.yml
build_first_pipeline:
stage: build
script:
- echo "Building first pipeline"
except:
- pipelines
# second-pipeline.yml
build_second_pipeline:
stage: build
script:
- echo "Building second pipeline"
only:
- pipelines
之所以起作用,是因为作业中使用了only
和except
。标有
except:
- pipelines
当由于另一个管道的触发而启动管道时,不会运行,因此它们不会在第二个管道中运行。另一方面,
only:
- pipelines
正好相反,因此这些作业仅在另一个管道触发该管道时才运行,因此它们仅在第二个管道中运行。
在gitlab CE 12.2中,可以定义Directed Acyclic Graphs来指定作业运行的顺序。这样,作业可以在其依赖的作业(使用needs
)完成后立即开始。
答案 1 :(得分:0)
从 GitLab 12.7 开始,也可以为此使用 parent-child pipelines:
# .gitlab-ci.yml
trigger_child:
trigger:
include: child.yml
do_some_stuff:
script: echo "doing some stuff"
# child.yml
do_some_more_stuff:
script: echo "doing even more stuff"
一旦创建了子管道,trigger_child
作业就会成功完成。