在GitLab中为节点项目创建2条管道

时间:2019-11-18 14:11:31

标签: gitlab gitlab-ci pipeline

我正在尝试在GitLab中为项目运行2条管道,但找不到任何方法。

2 个答案:

答案 0 :(得分:0)

在gitlab CI中,您不能为一个项目明确创建多个管道。在某些情况下,多个管道会同时运行,例如,当您有仅针对合并请求运行的作业而没有针对合并请求运行的其他作业时。

也就是说,有多种方法可以获得相互独立运行多个系列作业的效果。

gitlab-ce 12.2之前的破解方式

如果要为同一项目启动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

之所以起作用,是因为作业中使用了onlyexcept。标有

的作业
  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 作业就会成功完成。