当前位置: 首页 > 知识库问答 >
问题:

Azure管道-在任务之间传递变量[重复]

刘瀚
2023-03-14

所有的,

stages:
  - stage: "Test1"
    displayName: "Test1 - Copy KV"
    jobs:
    - deployment : "Deploy"
      timeoutInMinutes: 120
      variables:
        sourceSecrets: ""
      strategy:
          runOnce:
            deploy:
              steps:
              - task: AzureCLI@2
                inputs:
                  azureSubscription: $(ServiceConnection1)
                  scriptType: 'pscore'
                  scriptLocation: 'inlineScript'
                  inlineScript: |
                          if ("$(mysubscription1)"){
                              az account set --subscription "mysubscription1"
                          }

                          $secNames = az keyvault secret list --vault-name "kvName1"  -o json --query "[].name"  | ConvertFrom-Json

                          Write-Host 'Reading secrets...'
                          $secrets = $secNames | % {
                              $secret = az keyvault secret show --name $_ --vault-name "kvName1" -o json | ConvertFrom-Json
                              [PSCustomObject]@{
                                  name  = $_;
                                  value = $secret.value;
                              } 
                          }
                          $json = $($secrets | ConvertTo-Json)
                          echo "##vso[task.setVariable variable=sourceSecrets]$json"
                          
              - task: AzureCLI@2
                inputs:
                  azureSubscription: $(ServiceConnection2)
                  scriptType: 'pscore'
                  scriptLocation: 'inlineScript'
                  inlineScript: |
                          if ("$(mysubscription2)"){
                              az account set --subscription $(mysubscription2)
                          }
                          $secrets = "$(sourceSecrets)" | ConvertFrom-Json
                          $secrets.foreach{
                          Write-Host 'Writing secrets:'
                              az keyvault secret set --vault-name $(kvName2) --name $_.name  --value  $_.value --output none
                              Write-Host '---->' $_.name
                          }                          
ConvertFrom-Json : Conversion from JSON failed with error: Error reading JArray from JsonReader. Path '', line 1, position 1.
At /home/vsts/work/_temp/azureclitaskscript1620360635888_inlinescript.ps1:4 char:18
+ $secrets = "[" | ConvertFrom-Json
+                  ~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

共有1个答案

商和颂
2023-03-14

通常,管道变量的值只支持字符串类型,并且应该是单行字符串。如果将多行内容传递给管道变量,通常只接收第一行作为变量的值。

在您的示例中,传递给变量的值是一个包含多行内容的JSON对象。

为了避免您所面临的问题,您应该在将JSON对象的内容传递给管道变量之前将其转换为单行字符串。

若要将多行字符串转换为单行字符串,可以尝试下面的命令行:

. . .

# escape '%', '\n' and '\r'
json="${json//'%'/'%25'}"
json="${json//$'\n'/'%0A'}"
json="${json//$'\r'/'%0D'}"

echo "##vso[task.setVariable variable=sourceSecrets]$json"
 类似资料:
  • 我想了解从发布管道中的Azure密钥库中读取机密的最佳实践是什么。这里推荐哪一种方法?为什么?

  • 问题内容: 我在jenkins有两个工作,这两个工作都需要相同的参数。 如何使用参数运行第一个作业,以便在触发第二个作业时使用相同的参数? 问题答案: 您可以使用参数化触发器插件,该插件可让您将参数从一个任务传递到另一任务。 您还需要在上游添加从上游传递的此参数。

  • 问题内容: 我花了过去的几个小时在这里和其他地方进行阅读和实验,但是我并没有真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量)。 例如,我将一堆值分配给一个函数中的列表,然后想稍后在另一个函数中使用该列表: 基于对函数参数的作用的理解,我希望这样做如下: 将“列表”初始化为空列表;打电话给main(至少,我知道我没事…) 在defineAList()中,将某些值分配给列表;然

  • 问题内容: 我想在一个页面中获取用户输入,将其存储在一个php变量中,并在另一个php页面中使用它。我已经尝试过使用“会话”,但是它似乎没有用。还有另一种安全的选择吗?此信息可能是用户名和密码。 问题答案: 尝试更改会话代码,因为这是执行此操作的最佳方法。 例如: index.php nextpage.php 但是,我可能会在会话中存储更安全的内容(例如用户ID),而不是用户的登录凭据。

  • 问题内容: 我敢肯定这很简单,但是我一直无法使其正常工作。我需要让我的主要python脚本调用另一个python脚本,并将变量从原始脚本传递到我已调用的脚本 举一个简单的例子,我的第一个脚本是 我的第二个脚本是 我希望它可以打印x但我得到 我不确定导入是否是实现此目标的正确方法,但是如果有人可以通过简单的方式对此有所了解,那就太好了! 谢谢, 编辑 阅读评论后,我想我会扩展我的问题。Aswin M

  • 我得到了这个错误: “变量'a'已赋值,但其值永远不可用”