【问题标题】:Azure Pipeline repo name condition skipped已跳过 Azure Pipeline 存储库名称条件
【发布时间】:2021-09-10 05:03:20
【问题描述】:

我正在创建一个使用 2 个存储库的管道。在Build_Dev 阶段,我只想在来自回购Test 的情况下运行它。但是,每次管道运行时,总是会跳过Build_Dev 阶段(尽管提交来自Test repo)。下面是yaml。我在Build_Dev 阶段中​​的condition 做错了什么? Info 阶段将$(Build.Repository.Name) 识别为Test(这是正确的)。

resources:
  repositories:
  - repository: PipelineRepo
    type: git
    name: 'Test/pipeline-config'
  - repository: App
    type: git
    name: 'Test/Test'
    trigger:
    - Dev
    - Test*

stages:
- stage: Info
  displayName: Info
  jobs:
  - job: 'Info'
    displayName: 'Print Info: Repo: $(Build.Repository.Name) / Branch: $(Build.SourceBranch)'
    pool:
      vmImage: 'ubuntu-20.04'
    steps:
    - script: 'echo "Repo: $(Build.Repository.Name) / Branch: $(Build.SourceBranch)"'
      displayName: 'Write build info'

- stage: 'Build_Dev'
  dependsOn: Info
  displayName: 'Build the web application in Dev'
  condition: eq(variables['Build.Repository.Name'], 'Test')
  jobs:
  - job: 'Build'
    displayName: 'Build job'
    pool:
      vmImage: 'ubuntu-20.04'

    variables:
      dotnetSdkVersion: '5.x'

    steps:
    - checkout: App
    - task: UseDotNet@2
      displayName: 'Use .NET SDK $(dotnetSdkVersion)'
      inputs:
        version: '$(dotnetSdkVersion)'

    - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber), repo: $(Build.Repository.Name), branch: $(Build.SourceBranch)"'
      displayName: 'Write build info'

    - task: DotNetCoreCLI@2
      displayName: 'Restore project dependencies'
      inputs:
        command: 'restore'
        projects: '**/*.csproj'

    - task: DotNetCoreCLI@2
      displayName: 'Build the project - Dev'
      inputs:
        command: 'build'
        arguments: '--no-restore'
        projects: '**/*.csproj'

    - task: DotNetCoreCLI@2
      displayName: 'Publish the project - Dev'
      inputs:
        command: 'publish'
        projects: '**/*.csproj'
        publishWebProjects: false
        arguments: '--no-build --output $(Build.ArtifactStagingDirectory)/Dev'
        zipAfterPublish: true

    - publish: '$(Build.ArtifactStagingDirectory)'
      artifact: drop

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-yaml


    【解决方案1】:

    我可以重现您的问题。

    您可以使用以下方法让条件获得正确的值:

    stages:
    - stage: A
      jobs:
      - job: A1
        steps:
         - bash: echo "##vso[task.setvariable variable=reponame;isOutput=true]$(build.repository.name)"
         # or on Windows:
         # - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
           name: printvar
    
    - stage: B
      condition: eq(dependencies.A.outputs['A1.printvar.reponame'], 'YourRepoName')
      dependsOn: A
      jobs:
      - job: B1
        steps:
        - script: echo hello from Stage B
    

    上面的 yaml 文件在我这边工作正常。

    【讨论】:

    • 这可能是我正在寻找的解决方案!谢谢!我没想过将它分配给变量。
    【解决方案2】:

    来自docs,我觉得是这个原因:

    【讨论】:

    • 我看到了,但我不知道如何解决这个问题。另外,我看到了在条件中指定相同变量的示例代码。
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多