【发布时间】:2021-01-13 08:14:05
【问题描述】:
我想使用自定义任务扩展(节点)分析发布管道中Ansible 任务的日志。一般来说,这没什么大不了的,但我问自己是否有可能在管道中获得我正在执行的任务的位置?
用例
用户可以添加Ansible 任务,如果他愿意,他可以添加我的自定义任务来分析日志(并在某处发布)。为了决定应该分析发布管道中的哪个Ansible 任务,用户应该在Ansible 任务之后直接自定义任务。
类似这样的:
Release Pipeline 1.) Stage:
- Initialize job
- Download artifacts
- CopyFilesOverSSH
- Ansible <--- this should analyzed
- Custom Task
- Ansible
- Finialize job
情景
具有 3 个阶段的发布管道。
- 1.) 线性舞台
- 2.) 舞台和 3.) 第二级平行舞台
- 所有阶段都包含一个 ansible 任务
- 所有阶段都应包含我的自定义任务扩展以分析 ansible 任务日志
问题
当我现在请求 Get Release REST 调用时,我可以遍历所有环境、所有作业、所有任务,如下所示:
let release: Release = await Api.getRelease(Env.System.TeamProject, Env.Release.ReleaseId);
// loop environments (stages)
for (let environment of release.environments) {
// loop deploy steps
for (let deployStep of environment.deploySteps || []) {
// loop phases
for (let releaseDeployPhase of deployStep.releaseDeployPhases || []) {
// loop jobs
for (let deploymentJob of releaseDeployPhase.deploymentJobs || []) {
let ansible: ReleaseTask[] = [];
// loop tasks
for (let task of deploymentJob.tasks || []) {
if (task.startTime && task.finishTime) {
if (task.name === "Ansible") ansible.push(task);
}
}
console.log(ansible);
}
}
}
}
在此状态下运行时,我正在执行的自定义任务尚未完成 (TaskStatus.InProgress),因此连同我的任务 ID,我应该能够检测到管道内的位置。
更好的解决方案?
但我希望有一个更好的解决方案,我的意思是任务应该知道它在管道中的哪个位置?也许您可以通过azure-pipelines-task-lib/task lib 获取信息?
类似:
task.getRank() >>> 3
task.getEnvironment >>> 2
当您可以在任务程序中请求任务名称和 ID 时,还有什么帮助。目前我必须使用这些信息创建自己的变量。
类似这样的:
me.Id() >>> "8bb50e0a-8efb-47a4-b12a-2190f3a4d16a"
me.Name() >>> "MyCustomTask"
【问题讨论】:
标签: azure-devops azure-devops-extensions