创建管道的管道
要创建一个管道的管道,你需要:
- 至少两条管道
- 连接这些管道的资源
就像使用资源连接依赖步骤一样,依赖管道也是使用资源连接的。2022世界杯阿根廷预选赛赛程
在下面的图像中,第一个管道(app_dev_pipeline)以输出资源结束app_buildinfo
。第二个管道(app_prod_pipeline)从相同的资源开始,使用它作为输入资源。
默认情况下,在运行期间,仅当连接管道的资源有新版本时才触发依赖管道。
例子
这里有两个例子显示管道的管道。
示例1
此示例显示了包含八个管道的管道的管道,这些管道使用PropertyBag资源。
在这个例子中:
有三个PropertyBag2022世界杯阿根廷预选赛赛程资源:
共有8条相互连接的管道:
- 管道名为
触发
生成一个名为runpopprop
。 - 资源
runpopprop
是这些管道的输入资源:TRIGGER_OUT_1_1
TRIGGER_OUT_1_2
TRIGGER_OUT_1_3
TRIGGER_OUT_1_4
- 的
触发
管道使用write_output实用程序函数来触发这四个管道。 - 资源
runpopprop2
连接管道TRIGGER_OUT_1_2
和TRIGGER_OUT_1_4
到管道TRIGGER_OUT_3_2
,但不会触发它。 - 类似地,输出资源
runpopprop3
从管道TRIGGER_OUT_1_4
不触发管道TRIGGER_OUT_1_4
。
示例2
这个例子展示了一个包含五个管道的管道,使用几种类型的资源相互连接。2022世界杯阿根廷预选赛赛程
在这个例子中:
这些资源用于2022世界杯阿根廷预选赛赛程连接管道:GitRepo,PropertyBag,图像,BuildInfo,ReleaseBundle,DistributionRule。
有五条相互连接的管道:
控制管道运行
在配置管道的管道时,您可能希望指定当一个管道相对于其他由资源连接的管道运行时。2022世界杯阿根廷预选赛赛程
的dependencyMode
标记,该标记可以在pipelines.configuration
部分中,年代指定管道何时可以相对于由资源连接的其他管道运行。2022世界杯阿根廷预选赛赛程它有三种设置:waitOnParentComplete
,waitOnParentSuccess
,waitOnChildComplete
。如果这些设置中的任何一个是真正的,如果一个运行已经在等待相同的资源和步骤,则不会为其他管道更新的资源创2022世界杯阿根廷预选赛赛程建新的运行。因此,如果一个管道(名为Pipeline_A)连续运行两次,而下一个管道(名为Pipeline_B)连续运行两次waitOnParentComplete
设置为真正的
,则Pipeline_B将只运行一次。当管道运行时,它们将使用最新的资源版本。
当您希望在步骤开始执行之前确保每个管道步骤的输入资源处于稳定状态(没有运行等待或正在进行)时,可以使用这些标记,以防止在步骤2022世界杯阿根廷预选赛赛程执行过程中资源指向的工件发生更改的情况。这在管道创建将覆盖自身的工件的情况下特别有用。例如,用'latest'标签推送的Docker映像或每次上传的同名文件。在这些情况下,在触发该步骤之后,一些工件可能会发生更改,从而导致下载的内容不一致。
的dependencyMode
标记具有以下可选设置:
设置 | 描述 | 默认的 |
---|---|---|
waitOnParentComplete |
如果真正的 ,当输出作为该管道输入的资源的管道正在等待或处理运行时,该管道将不会开始运行。该管道只有在父管道的运行完成后才会运行。 |
假 |
waitOnParentSuccess |
如果真正的 ,当输出作为此管道输入的资源的管道正在进行处理运行或最后一次完整运行不成功时,管道将不会开始运行。只有在父管道运行成功后,管道才会运行。然而,如果父管道没有被触发,子管道仍然可以作为一个独立的管道被触发。 |
假 |
waitOnChildComplete |
如果真正的 ,当一个管道的输入资源是该管道的输出时,该管道将不会开始运行,除非该子管道正在等待该管道完成。该管道只有在子管道运行完成后才会运行。 |
假 |
管道:-名称:myppipeline配置:时间顺序:true/false #默认false dependencyMode: waitOnParentComplete: true/false #默认false waitOnParentSuccess: true/false #默认false waitOnChildComplete: true/false #默认false步骤:…
虽然不推荐,如果父管道有waitOnParentComplete
或waitOnParentSuccess
子管道有waitOnChildComplete
,父管道首先运行。
例子
例1 -waitOnParentComplete
和waitOnParentSuccess
在本例中,是第一个管道A_parent创建Docker镜像。T子管道A_waitOnParent等待,直到父管道A_parent的运行成功完成,因为两者waitOnParentComplete
和waitOnParentSuccess
设为真正的
为A_waitOnParent。
2022世界杯阿根廷预选赛赛程资源:-名称:dependencyModeImage类型:图像配置:注册表:myDocker imageName: jfrog/test imageTag: "0" -名称:dependencyModeRepo类型:GitRepo配置:gitProvider: myGithub路径:jfrog/dependencyMode分支:包括:^{{gitBranch}}$管道:-名称:A_parent步骤:-名称:createImage类型:Bash配置:inputResources: -名称:dependencyModeRepo outputResources: -名称:dependencyModeImage集成:-名称:myDocker执行:onExecute:- cd ${res_dependencyModeRepo_resourcePath} - docker build -t ${res_dependencyModeImage_imageName}:${run_number}。- docker push ${res_dependencyModeImage_imageName}:${run_number} - write_output dependencyModeImage imageTag=${run_number} - name: A_waitOnParent配置:dependencyMode: waitOnParentComplete: true waitOnParentSuccess: true步骤:- name: pullImage类型:Bash配置:inputResources: - name: dependencyModeIm2022世界杯阿根廷预选赛赛程age执行:onExecute: - echo ${res_dependencyModeImage_imageName}:${res_dependencyModeImage_imageTag}
例2 -waitOnChildComplete
在这个例子中,t父管道B_waitOnChilD等待子管道B_Child他的跑步完成了,因为waitOnChildComplete
设为真正的
为B_waitOnChild。
2022世界杯阿根廷预选赛赛程资源:- name: dependencyModePropertyBag类型:PropertyBag配置:runNumber: 0管道:- name: B_waitOnChild配置:dependencyMode: waitOnChildComplete: true步骤:- name: updateProperties类型:Bash配置:outputResources: - name: dependencyModePropertyBag执行:onExecute: - write_output dependencyModePropertyBag runNumber=${run_number} - name: B_Child步骤:- name: echoProperty类型:Bash配置:inputResources: - name:dependencyModePropertyBag执行:onExecute: - echo ${res_dependencyModePropertyBag_runNumber} - sleep 5 -名称:echoComplete类型:Bash配置:inputSteps: -名称:echoProperty执行:onExecute: - echo "complete"