微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在Azure DevOps发布管道任务中更改服务连接

如何解决无法在Azure DevOps发布管道任务中更改服务连接

我在Azure DevOps中有一个发布管道,其中有一个阶段。该阶段包含一个任务“ Kubectl”,用于登录AKS集群。它期望将服务连接作为参数。我的问题是我从上一个任务中获得了服务连接,该任务从“应用程序配置”中读取了值。我从“应用程序配置”中获得的值设置为环境变量,然后我以这种方式echo "##vso[task.setvariable variable=SC]$AKS_SERVICECONNECTION"进行传递。因此,变量为SC,我使用$(SC)在“ Kubectl”登录中设置了服务连接。 $AKS_SERVICECONNECTION的值正确,我将其打印出来以进行检查。

这不起作用。即使环境变量SC现在具有正确的值,也不会设置该值。因此,我使用命名空间参数对其进行了测试,并且可以正常工作,但不适用于服务连接。我的问题和假设是服务连接必须在执行时设置,并且不能在下一个任务将使用的上一个任务中设置?

解决方法

似乎Kubectl任务的服务连接是在执行任务之前的编译时检索的。 我在发布管道“变量”部分创建了一个测试变量,并使用echo "##vso[task.setvariable..在脚本任务中更改了测试变量的值。我在任务日志中看到总是选择测试变量的原始值。

看到类似的问题here

但是,您可以使用rest api作为解决方法。请参阅以下步骤:

1,在发布管道中添加第二阶段。选择触发器为Manual Only。在第二阶段(即下面的屏幕快照中的Kubetcl阶段)移动Kubectl任务和相关任务 enter image description here

2,在ServiceCon部分中定义变量Variables。选择第二阶段的变量Scope(即Kubetcl)。选中Settable at release time

enter image description here

3,添加脚本任务以在第一阶段(即SetServiceCon阶段)调用更新release environment rest api。请参见下面的内联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,请参见下面的屏幕截图。

enter image description here

5,您还需要对构建服务帐户拥有allowManage deployments的权限。请参见下面的屏幕截图。

在您的发布管道编辑页面中。单击右上角的3个点。然后选择edit release stage

enter image description here

SecurityAllow帐户的Manage deploymentsedit release stage权限。

enter image description here

完成上述步骤后,当触发您的发布任务时,将首先执行第一阶段,脚本任务将调用更新发布环境rest api。然后,第二阶段将使用更新的服务连接名称触发

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?