【问题标题】:How to schedule the execution of a Python script in Azure DevOps (after successful Build)?如何在 Azure DevOps 中安排 Python 脚本的执行(成功构建后)?
【发布时间】:2019-12-08 20:53:26
【问题描述】:

我有一个 Azure Pipeline Build。 *.yaml 文件正确执行 Python 脚本 (PythonScript@0)。此脚本本身创建(如果不存在)、执行和发布 Azure ML 管道。在手动执行 Build 或由提交触发时,它运行良好。

但我想安排每天自动执行 ML 管道(Python 脚本)。

我尝试了以下方法:

pipeline_id = published_pipeline.id
recurrence = ScheduleRecurrence(frequency="Day", interval=1)
recurring_schedule = Schedule.create(ws, 
                                     name=<schedule_name>, 
                                     description="Title", 
                                     pipeline_id=pipeline_id,  
                                     experiment_name=<experiment_name>, 
                                     recurrence=recurrence)

在这种情况下,管道会在 3-4 秒内运行并成功终止。但是,不会执行 Python 脚本。

另外,我尝试使用 Build 来安排管道的执行,但我认为这是一种错误的方法。它重建了一个管道,但我需要执行之前发布的管道。

schedules:
- cron: "0 0 * * *"
  displayName: Daily build
  always: true

如何每天执行我发布的管道?我应该使用 Release(哪些代理,哪些任务?)?

【问题讨论】:

  • Also, I tried to schedule the execution of a pipeline using Build, but I assume that it is a wrong approach. It rebuilds a pipeline, but I need to execute a previously published pipeline. 您好,您的构建管道中的步骤和任务是什么?如果您尝试安排每天执行 python 脚本,您可以选择安排执行构建管道或创建新管道来执行 python 脚本。
  • 你说python脚本没有执行?你的意思是 PythonScript 任务没有被执行?您能否检查一下 ML 管道是否已正确创建并发布到 azure。您可以尝试手动将计划的 ML 管道发布到 azure 以检查计划是否有效。

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-pipelines-build-task


【解决方案1】:

另外,我尝试使用 Build 来安排管道的执行,但是 我认为这是一种错误的方法。它重建了一个管道,但我 需要执行之前发布的管道。

假设你的python相关任务在许多其他任务之后运行,那么不建议简单地安排整个构建管道,它会重新运行管道(其他任务+python脚本)。

只能调度管道而不是任务,所以我建议你可以创建一个新的构建管道来运行 python 脚本。此外,私人代理更适合这种情况。

现在我们得到两个管道:用于运行 python 脚本的原始 A 和 B。

  1. 将 B 的 build completion 设置为 A,这样如果 A 第一次构建成功,B 将在之后运行。

  2. 添加命令行任务或 PS 任务作为管道 A 的最后一个任务。这个任务(修改yml然后推送更改)将负责将B对应的xx.yml文件更新为schedule B

  3. 这样,如果A(其他任务)构建成功,B(运行python脚本的管道)将执行。 B 将在成功构建后每天运行。

希望对您有所帮助,如果我有任何误解,请随时纠正我。

【讨论】:

  • 我必须在PythonScriptStep 中设置allow_reuse=False。在这种情况下,Schedule 可以正常工作。但无论如何,只是为了评论我希望构建由提交触发。然后 ML 管道(而不是 Azure DevOps 管道)应该每天独立地在提交时执行。
  • 另外,我不明白 Release 在所有这些设置中的作用。
  • 您好,抱歉耽搁了。有关发布管道的含义,请参阅this。我对你上面提到的role of Release 有点困惑。嗯,我没有找到你在原始问题中使用该发布管道的设置:-(
  • 我目前只使用 Build。我担心的是,如果它是有意义的,还是必须始终以 Release 结尾?就我而言,我不知道应该在 Release 中具体放什么,因为 Build 已经发布了一个管道和一个时间表。
  • 抱歉耽搁了,我不确定您的真实需求,但据我所知,发布管道是为部署工作而设计的。而构建管道旨在构建、测试……在这两个管道中,我们实际上使用任务来完成真正的工作,所以如果我们将与部署相关的任务从发布管道移动到构建管道,它实际上是可以工作的。但这不是一个好主意,为了更好的逻辑,建议使用 Build Pipeline 来做 CI 相关的事情和 CD 与发布管道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
相关资源
最近更新 更多