创建管道的管道
要创建管道的管道,您需要:
- 至少两条管道
- 连接这些管道的资源
就像依赖步骤如何使用资源连接一样,依赖管道也使用资源连接。2022世界杯阿根廷预选赛赛程
在下面的图像中,第一个管道(app_dev_pipeline)以输出资源结束app_buildinfo
.第二个管道(app_prod_pipeline)以相同的资源开始,将其用作输入资源。
默认情况下,在运行期间,只有当连接管道的资源有新版本时才会触发依赖管道。
例子
这里有两个例子展示了管道中的管道。
示例1
此示例显示了包含8个管道的管道组合管道,使用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
部分的管道YAML,年代指定一个管道何时可以相对于由资源连接的其他管道运行。2022世界杯阿根廷预选赛赛程它有三种设置:waitOnParentComplete
,waitOnParentSuccess
,waitOnChildComplete
.如果这些设置是真正的,如果一个运行已经在使用相同的资源和步骤等待,则不会为其他管道更新的资2022世界杯阿根廷预选赛赛程源创建新的运行。因此,如果一个管道(名为Pipeline_A)连续运行两次,而下面的管道(名为Pipeline_B)连续运行两次waitOnParentComplete
设置为真正的
,则Pipeline_B将只运行一次。当管道运行时,它们将使用最新的资源版本。
当您希望确保每个管道步骤的输入资源在步骤开始执行之前处于稳定状态(没有等待或正在进行的运行)时,可以使用这些标记,以防止资源2022世界杯阿根廷预选赛赛程所指向的工件在步骤执行中间发生变化的情况。这在管道创建将覆盖自身的工件的情况下特别有用。例如,带有“最新”标签的Docker图像或每次上传的同名文件。在这些情况下,某些工件可能会在步骤触发后发生更改,从而导致下载的内容不一致。
的dependencyMode
标签有以下可选的设置:
设置 | 描述 | 默认的 |
---|---|---|
waitOnParentComplete |
如果真正的 ,当输出资源作为该管道的输入的管道正在运行等待或处理时,该管道将不会开始运行。管道只有在父管道运行完成后才会运行。 |
假 |
waitOnParentSuccess |
如果真正的 ,当输出作为该管道输入的资源的管道执行处理运行或最后一次完整运行未成功时,该管道将不会开始运行。只有在父管道运行成功之后,管道才会运行。但是,如果父管道没有被触发,子管道仍然可以作为一个独立的管道被触发。 |
假 |
waitOnChildComplete |
如果真正的 ,当拥有该管道输出的输入资源的管道运行等待或处理时,该管道将不会开始运行,除非该子管道正在等待该管道完成。该管道将仅在子管道运行完成后运行。 |
假 |
管道:- name: myPipeline configuration:时间顺序:true/false # default false dependencyMode: waitOnParentComplete: true/false # default false waitOnParentSuccess: true/false # default false waitOnChildComplete: true/false # default false steps:…
虽然不建议,如果父管道有waitOnParentComplete
或waitOnParentSuccess
子管道也有waitOnChildComplete
,父管道首先运行.
例子
例1 -waitOnParentComplete
而且waitOnParentSuccess
在本例中,是第一条管道A_parent创建Docker映像。T贺子管道A_waitOnParent直到父管道A_parent的运行成功完成,因为两者waitOnParentComplete
而且waitOnParentSuccess
设置为真正的
为A_waitOnParent.
2022世界杯阿根廷预选赛赛程resources:—name: dependencyModeImage type:镜像配置:registry: myDocker imageName: jfrog/test imageTag: "0" - name: dependencyModeRepo type: GitRepo configuration: gitProvider: myGithub path: jfrog/dependencyMode branches: include: ^{{gitBranch}}$ pipelines:—name: A_parent steps:—name: createImage type: Bash configuration: inputResources:—name: dependencyModeImage integrations:—name: myDocker execution: onExecute:—docker build -t ${res_dependencyModeImage_imageName}:${run_number}。—docker push ${res_dependencyModeImage_imageName}:${run_number}—write_output dependencyModeImage imageTag=${run_number}—name: A_waitOnParent configuration: dependencyMode: waitOnParentComplete: true waitOnParentSuccess: true steps:—name: pullImage type: Bash configuration: inputResourc2022世界杯阿根廷预选赛赛程es:—name: dependencymodeimage_imagename}:${res_dependencyModeImage_imageTag}
例2 -waitOnChildComplete
在这个例子中,t他父母管道B_waitOnChilD一直等到子管道B_Child的运行结束了,自从waitOnChildComplete
设置为真正的
为B_waitOnChild.
2022世界杯阿根廷预选赛赛程resources:—name: dependencyModePropertyBag type: PropertyBag configuration: runNumber: 0 pipelines:—name: B_waitOnChild configuration: dependencyMode: waitOnChildComplete: true steps:—name: updateProperties type: Bash configuration: outputResources:—name: dependencyModePropertyBag execution: onExecute:—write_output dependencyModePropertyBag runNumber=${run_number}—name: B_Child steps:—name: echoProperty type: Bash configuration: inputResources:—name:dependencyModePropertyBag执行:onExecute: - echo ${res_dependencyModePropertyBag_runNumber} - sleep 5 - name: echoComplete类型:Bash配置:inputSteps: - name: echoProperty执行:onExecute: - echo "complete"