Azure Devops 管道:作业之间的等待

Azure Devops pipeline: waiting between jobs

我有一个包含三个作业的管道:

  1. Job 1 启动后台 bash 作业(使用 nohup 和 &)收集 K8s 指标 2 小时,然后退出(以免占用 agent 两个小时)。它还跟踪它 运行 所在的文件夹,并配置为始终在特定代理上 运行。
  2. 作业 2 等待 2 小时,有一个延迟任务。
  3. 作业 3,也在同一个代理上配置为 运行,进入上面保存的文件夹,并使用指标收集的结果进行一些计算。

问题是,虽然我确认它进入了正确的文件夹,但它找不到结果文件。我也用了一点测试,我在作业 1 中触摸了一个文件,在作业 3 的文件夹中看不到它。我只能看到原始内容,即作业 1 执行之前存在的内容。结果文件和测试触摸文件丢失。

我使用以下命令将文件夹保存在作业 1 中:

variables:
  Folder: $[ dependencies.job_1.outputs['job_1_folder.RUNNING_FOLDER'] ]

...在工作 3 中,我只是 cd 到 $(Folder)

有什么想法吗?解决上述问题,或者允许作业 3 以不同的方式访问作业 1 中生成的内容...

Either to fix the above, or perhaps to allow job 3 access to something that was produced in job 1 in a different way...

这取决于您使用的代理类型。

如果您使用的是hosted agent,由于每次分配一个agent,MS都会为您分配一个新的agent,所以您在job1中存储的文件不会保存到job3中。

要解决此问题,您可以检查 GeralexGR 提到的想法,使用任务发布构建工件并将其下载到 job3 中并使用下载构建工件任务。

如果您使用私有代理,您需要确保 job1 和 job3 使用相同的代理,并且不要在管道配置中启用清除选项: