问题描述
在使用Microsoft DevOps时,有一个设置如下的需求:
1. 构建1完成后触发发布1。
2. 构建2由构建1触发,并发布发布2。
用户想知道,如果只有一个并行作业,是否可以确保发布1在触发构建2之前运行。用户已经进行了测试,发现确实是这样的,但是找不到任何关于这个流程的文档。用户需要在构建2开始之前发布发布1。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
为了确保发布1在触发构建2之前运行,不要直接从构建1自动触发构建2。而是在发布1的最后一步中添加一个步骤,将构建2加入队列中。有几种方法可以实现这一点,例如:
1. 在发布1的最后一步中添加一个任务,使用Microsoft DevOps的API将构建2加入队列中。
2. 使用Microsoft DevOps的扩展,如Queue Build Task来将构建2加入队列中。
以下是使用API将构建2加入队列的步骤:
1. 打开发布1的定义。
2. 在发布1的最后一步中添加一个任务,使用PowerShell任务或Command Line任务。
3. 在任务中使用Microsoft DevOps的API将构建2加入队列。可以使用以下命令:
$token = "YOUR_PERSONAL_ACCESS_TOKEN"
$url = "https://dev.azure.com/YOUR_ORGANIZATION/YOUR_PROJECT/_apis/build/builds?api-version=6.0"
$body = @{
definition = @{
id = BUILD_DEFINITION_ID_OF_BUILD_2
}
}
$jsonBody = $body | ConvertTo-Json
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $token"} -Method Post -Body $jsonBody -ContentType "application/json"
请将YOUR_PERSONAL_ACCESS_TOKEN
替换为你的个人访问令牌,YOUR_ORGANIZATION
替换为你的组织名称,YOUR_PROJECT
替换为你的项目名称,BUILD_DEFINITION_ID_OF_BUILD_2
替换为构建2的定义ID。
方案2
使用脚本或工具来管理构建和发布的触发顺序可能会增加复杂性,并且需要确保构建和发布之间的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制构建和发布的触发顺序。你可以使用Microsoft DevOps的API来手动控制构建和发布的触发顺序,或者使用一些第三方工具来管理它们之间的依赖关系。
以下是一个简单的PowerShell脚本示例,可以在发布1完成后触发构建2:
$token = "YOUR_PERSONAL_ACCESS_TOKEN"
$url = "https://dev.azure.com/YOUR_ORGANIZATION/YOUR_PROJECT/_apis/build/builds?api-version=6.0"
$body = @{
definition = @{
id = BUILD_DEFINITION_ID_OF_BUILD_2
}
}
$jsonBody = $body | ConvertTo-Json
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $token"} -Method Post -Body $jsonBody -ContentType "application/json"
请将YOUR_PERSONAL_ACCESS_TOKEN
替换为你的个人访问令牌,YOUR_ORGANIZATION
替换为你的组织名称,YOUR_PROJECT
替换为你的项目名称,BUILD_DEFINITION_ID_OF_BUILD_2
替换为构建2的定义ID。
在这个示例中,我们使用Microsoft DevOps的API来触发构建2。首先,我们需要获取一个个人访问令牌,然后使用该令牌和API的URL来发送一个POST请求,将构建2加入队列。
请注意,使用脚本或工具来管理构建和发布的触发顺序可能会增加复杂性,并且需要确保构建和发布之间的依赖关系正确设置。建议在使用这种方法之前,仔细考虑你的需求和环境,并进行适当的测试。