由于Pipelines将步骤的执行分布到节点池中的节点之间,因此任何步骤都不必依赖于前一个步骤生成的文件或工件可用,因为前一个步骤可能已经在不同的构建节点中执行。而首选的做法往往是创建有状态管道,您可能需要通过亲和性组将步骤绑定到同一个构建节点。组中所有步骤可用的目录的路径作为名为shared_workspace并可用于在步骤之间共享文件。
一些本地步骤(例如,DockerBuild而且DockerPush)可能要求他们结合在一起成为一个亲和团体。
当然,如果管道使用的节点池只有一个节点,那么您的步骤仍然可以成功,而无需将它们绑定到亲和组(因为所有步骤都在同一个节点上执行)。但是,由于管理员可以在任何时候增加任何节点池中的节点数量,因此您仍然应该使用亲和组来绑定需要它们的步骤,以确保它们在条件发生变化时继续成功执行。
同一亲和关系组中的步骤不能并行运行。
在亲和性组中定义步骤时,确保没有属于不同亲和性组的中间步骤。这样做将导致管道失败。
例如,在为三个步骤定义亲和性组时,执行以下操作之一:
- 定义一步一个,步骤B,步骤C在同一个亲和组
或 - 定义一步一个而且步骤B在同一亲和力组,与步骤C在不同的亲和群体中
或 - 定义一步一个在亲和团体中,与步骤B而且步骤C在不同的亲和群体中
affinityGroup标签的用法
步骤通过其绑定到亲和性组配置部分,使用affinityGroup标签。
为单个步骤指定亲和性组:
步骤:—name:type: configuration: affinityGroup: . type:
可以指定任何字符串作为亲和性组的名称,但必须对所有字符串使用相同的字符串affinityGroup标记在希望在组中绑定在一起的步骤中的。
或者,如果管道中的所有步骤都在同一个亲和组中,affinityGroup可以在管线配置部分指定:
管线:—name:configuration: affinityGroup: steps:— . cfg
例子
下面的简化管道创建了绑定到同一个管道的两个步骤affinityGroup被称为在一起:
管道:—name: pipeline_affinityGroup_example步骤:—name: ag_step_1 type: Bash配置:affinityGroup: together执行:onExecute:—echo "Running " $pipeline_name "|" $step_name > $shared_workspace/myoutput.txt - cat $shared_workspace/myoutput.txt - name: ag_step_2 type: Bash配置:affinityGroup: together inputSteps:—name: ag_step_1执行:onExecute: - cat $shared_workspace/myoutput.txt
该步骤ag_step_1在它执行的构建节点中创建一个文本文件,使用shared_workspace变量确保该文件对两个步骤都可用。接下来的步骤,ag_step_2尝试读取文件。
通过绑定ag_step_1而且ag_step_2进入相同的亲和性组,文件即ag_step_1在构建节点的文件系统中创建的ag_step_2因为它被保证运行在同一个节点中。不受亲善团体的约束,ag_step_2可能会失败,因为它可能在文件不存在的节点中执行。
在JFrog平台中加载此管道时,交互图显示在管道的历史指示这些步骤绑定到相同的亲和关系组:
当管道运行时,管路运行日志表明,ag_step_2能够成功地在节点的文件系统中找到由谁创建的文件ag_step_1.



