Azure Devops YAML-动态条件评估

发布于 2025-02-10 11:34:12 字数 1900 浏览 3 评论 0原文

我试图根据SQL查询的结果使用条件来脱离循环。因此,我将查询输出分配给变量“ sqloutput”,如果该值为空字符串再次四处走动。我已经确认查询正在输出一个值,但是在后续循环中,变量仍在评估为null。

还试图明确声明该变量无济于事。

parameters:
- name: loop
  type: object
  default :  ["1","2","3","4","5","6","7","8","9","10"]

stages:
- stage: WaitforProcessing
  displayName: Wait For Processing
  jobs: 
  - deployment: Deployment 
    pool:
      vmImage: ubuntu-latest
    environment:
      name: 'Client_Data_Tests'
      resourceType: VirtualMachine
    strategy:
      runOnce:
        deploy:
          steps:
          - ${{each Looptimes in parameters.loop}}:
            - task: PowerShell@2
              name: checkImportProgress${{ Looptimes }}
              condition:  and(succeeded(), eq(variables['sqloutput'], ''))
              displayName: Check if job finished 
              inputs:
                targetType: inline
                script: |
                  $query = "IF EXISTS (select 1 from Job where JobFinishTime is null)
                              BEGIN
                                select '' as result
                              END
                              ELSE
                                select '1' as result
                              "
                  $sqloutput = Invoke-Sqlcmd -query $query -ServerInstance "$(DB_SERVER)" -Database "$(DB_DATABASE)" -Username "$(DB_USERNAME)" -Password "$(DB_PASSWORD)" -QueryTimeout 36000 -Verbose
                  $value = $sqloutput["result"]
                  Write-Host $value
                  Write-Host "##vso[task.setvariable variable=sqloutput]$value"
            - task: PowerShell@2
              condition:  and(succeeded(), eq(variables['sqloutput'], ''))
              displayName: 'Sleep for 30 seconds'
              inputs:
                targetType: inline
                script: |
                  Start-Sleep 30

I am attempting to use a condition to break out of a loop based on the result of a sql query. So I am assigning the query output to a variable "sqloutput" and if that value is empty string go around again. I have confirmed that the query is outputting a value however on subsequent loops the variable is still evaluating to NULL.

Also tried to explicitly declare the variable to no avail.

parameters:
- name: loop
  type: object
  default :  ["1","2","3","4","5","6","7","8","9","10"]

stages:
- stage: WaitforProcessing
  displayName: Wait For Processing
  jobs: 
  - deployment: Deployment 
    pool:
      vmImage: ubuntu-latest
    environment:
      name: 'Client_Data_Tests'
      resourceType: VirtualMachine
    strategy:
      runOnce:
        deploy:
          steps:
          - ${{each Looptimes in parameters.loop}}:
            - task: PowerShell@2
              name: checkImportProgress${{ Looptimes }}
              condition:  and(succeeded(), eq(variables['sqloutput'], ''))
              displayName: Check if job finished 
              inputs:
                targetType: inline
                script: |
                  $query = "IF EXISTS (select 1 from Job where JobFinishTime is null)
                              BEGIN
                                select '' as result
                              END
                              ELSE
                                select '1' as result
                              "
                  $sqloutput = Invoke-Sqlcmd -query $query -ServerInstance "$(DB_SERVER)" -Database "$(DB_DATABASE)" -Username "$(DB_USERNAME)" -Password "$(DB_PASSWORD)" -QueryTimeout 36000 -Verbose
                  $value = $sqloutput["result"]
                  Write-Host $value
                  Write-Host "##vso[task.setvariable variable=sqloutput]$value"
            - task: PowerShell@2
              condition:  and(succeeded(), eq(variables['sqloutput'], ''))
              displayName: 'Sleep for 30 seconds'
              inputs:
                targetType: inline
                script: |
                  Start-Sleep 30

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心旳酸楚 2025-02-17 11:34:12

下面的yaml应该起作用。

stages:
- stage: A
  jobs:
  - job: A
    displayName: SQL generate variable
    steps:
    - powershell: |
          $value = 'somevalue'
          echo "##vso[task.setvariable variable=sqloutput;isOutput=true]$value"
      name: setvarStep
    - script: echo $(setvarStep.sqloutput)
      name: echovar

  - job: B
    dependsOn: A
    displayName: Use variable that SQL script output as condition
    variables:
      myVarFromJobA: $[ dependencies.A.outputs['setvarStep.sqloutput'] ]  # map in the variable
      myvar: true    
    condition: eq(variables['myVarFromJobA'],'somevalue')
    steps:
    - script: echo $(myVarFromJobA)
      name: echovar

结果:

“

The below YAML should work.

stages:
- stage: A
  jobs:
  - job: A
    displayName: SQL generate variable
    steps:
    - powershell: |
          $value = 'somevalue'
          echo "##vso[task.setvariable variable=sqloutput;isOutput=true]$value"
      name: setvarStep
    - script: echo $(setvarStep.sqloutput)
      name: echovar

  - job: B
    dependsOn: A
    displayName: Use variable that SQL script output as condition
    variables:
      myVarFromJobA: $[ dependencies.A.outputs['setvarStep.sqloutput'] ]  # map in the variable
      myvar: true    
    condition: eq(variables['myVarFromJobA'],'somevalue')
    steps:
    - script: echo $(myVarFromJobA)
      name: echovar

Result:

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文