似乎在执行任务之前的编译时检索了 Kubectl 任务的服务连接。我在发布管道变量部分创建了一个测试变量,并在脚本任务中使用echo "##vso[task.setvariable..
. 我在任务日志中看到总是选择测试变量的原始值。
在这里看到这个类似的问题。
但是,您可以使用rest api作为解决方法。请参见以下步骤:
1,在您的发布管道中添加第二个阶段。选择触发器为Manual Only
。在第二阶段移动 Kubectl 任务和相关任务(即下图的Kubetcl
阶段)
ServiceCon
2、在Variables
section中定义一个变量。选择变量Scope
到第二阶段(即。Kubetcl
)。查看Settable at release time
3、在第一阶段(即stage)添加脚本任务调用更新发布环境rest api 。SetServiceCon
请参见下面的内联 powershell 脚本:SC
在上一个任务中为该变量分配了服务连接名称。
$url = "https://vsrm.dev.azure.com/Org/Project/_apis/Release/releases/$(Release.ReleaseId)/environments/$($(Release.EnvironmentId)+1)?api-version=6.1-preview.7"
#override the variable ServiceCon by referencing to variable $(SC) from your previous task
$body = @{
status= "inProgress";
variables= @{ ServiceCon= @{value= $(SC)}}
}
Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $(System.AccessToken)"} -Method patch -Body (ConvertTo-Json $body) -ContentType "application/json"
上面的脚本将使用更新的服务连接名称触发第二阶段(即 kubetcl 阶段)
4,为了$(System.AccessToken)
可以在上面的步骤中访问令牌,您需要进入第一阶段的编辑页面并选中选项Allow scripts to access the OAuth token
See below screenshot。
5,您还需要构建服务帐户allow
的Manage deployments
和edit release stage
权限。请参见下面的屏幕截图。
在您的发布管道编辑页面中。单击右上角的 3 个点。并选择Security
。
Allow
该帐户的Manage deployments
和edit release stage
权限。(ProjectName)build service (OrgName)
完成以上步骤后,当你的release pieline被触发时,会先执行第一阶段,脚本任务会调用更新发布环境rest api。然后第二阶段将被更新的服务连接名称触发