Can';t更改Azure DevOps发布管道任务中的服务连接
我在Azure DevOps中有一个发布管道,只有一个阶段。该阶段包含登录AKS集群的任务“Kubectl”。它需要一个服务连接作为参数。我的问题是,我从上一个任务获取服务连接,该任务从“应用程序配置”读取值。我从应用程序配置中获得的值被设置为一个环境变量,然后通过这种方式传递Can';t更改Azure DevOps发布管道任务中的服务连接,azure,azure-devops,azure-pipelines-release-pipeline,serviceconnection,Azure,Azure Devops,Azure Pipelines Release Pipeline,Serviceconnection,我在Azure DevOps中有一个发布管道,只有一个阶段。该阶段包含登录AKS集群的任务“Kubectl”。它需要一个服务连接作为参数。我的问题是,我从上一个任务获取服务连接,该任务从“应用程序配置”读取值。我从应用程序配置中获得的值被设置为一个环境变量,然后通过这种方式传递echo“##vso[task.setvariable=SC]$AKS\u SERVICECONNECTION”。所以变量是SC,我在“Kubectl”中设置了服务连接-使用$(SC)登录$AKS_SERVICECONNE
echo“##vso[task.setvariable=SC]$AKS\u SERVICECONNECTION”
。所以变量是SC
,我在“Kubectl”中设置了服务连接-使用$(SC)
登录$AKS_SERVICECONNECTION
的值正确,我打印出来检查
这不管用。即使环境变量
SC
现在具有正确的值,也不会设置该值。因此,我使用namespace参数对其进行了测试,这是可行的,但不适用于服务连接。我的问题和假设是,必须在执行时设置服务连接,而不能在后续任务将使用的上一个任务中设置服务连接?似乎Kubectl任务的服务连接是在执行任务之前的编译时检索的。
我在release pipeline Variables部分创建了一个测试变量,并使用echo“##vso[task.setvariable..
更改了脚本任务中的测试变量值。我在任务日志中看到,始终选择了测试变量的原始值
看看这个类似的问题
但是,您可以使用作为解决方法。请参阅以下步骤:
1,在发布管道中添加第二个阶段。选择触发器作为仅手动
。将Kubectl任务和相关任务移动到第二个阶段(即下面屏幕截图中的Kubetcl
阶段)
2、在变量
部分定义变量ServiceCon
。选择变量范围
,进入第二阶段(即Kubetcl
)。检查在发布时可设置
3、添加脚本任务以在第一阶段(即SetServiceCon
stage)调用更新。请参见下面的内联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)
,您需要转到第一阶段的编辑页面,并选中选项允许脚本访问OAuth令牌
,请参见下面的屏幕截图
5,您还需要允许管理部署
和编辑发布阶段
对生成服务帐户的权限。请参见下面的屏幕截图
在发布管道编辑页面中。单击右上角的3个点。然后选择安全性
允许管理部署
和编辑发布阶段
对(ProjectName)生成服务(OrgName)
帐户的权限
完成上述步骤后,当您的发行版被触发时,第一阶段将首先执行,脚本任务将调用更新发行版环境rest api。然后,第二阶段将使用更新的服务连接名称触发SC
它是服务名称或id?$(SC)
是我在服务连接字段中设置的变量的名称。这意味着我在应用程序配置任务之后的Bash任务中,在使用服务连接名称的kubectl
-登录任务之前,为其分配了一个变量SC
,该任务使用$(SC).这我理解,但这个变量的值是什么?服务连接名称还是服务连接id?啊,对不起,值是服务连接的名称如果可以,尝试将idI在经典编辑器上测试您的解决方案,它正在工作,谢谢!您知道是否可以在YAML管道上执行此操作吗?我找不到用于更新管道的rest api:/