标签: multistage-pipeline

根据提交消息跳过阶段

我正在尝试将 Azure DevOps 设置为 在消息不以给定文本开头时跳过多阶段管道上的一个阶段。

示例文档来看,我认为这只是

  - stage: t1
    condition: not(startsWith(variables['Build.SourceVersionMessage'], '[maven-release-plugin]'))
    jobs:
      - job: ReleasePrepare
        displayName: Prepare release
        pool:
          vmImage: 'ubuntu-16.04'
        steps:
          - script: |
              env | sort
Run Code Online (Sandbox Code Playgroud)

然而,无论如何,这都会被执行。t1这是我希望任务不会根据提交消息运行的示例https://dev.azure.com/trajano/experiments/_build/results?buildId=110&view=results

的输出env表明消息已正确传入

在此输入图像描述

以防万一这是一个错误,我也在这里报告了https://developercommunity.visualstudio.com/content/problem/697290/startswith-buildsourceversionmessage-variable-not.html

azure-devops azure-pipelines multistage-pipeline

10
推荐指数
1
解决办法
3217
查看次数

如何从 Azure DevOps 中的 YAML 管道获取阶段结果

到目前为止,我正在使用Azure DevOps REST Api从 Azure DevOps 中的版本获取数据以用于报告目的。显然,这将随着使用 CI/CD --> YAML 和多阶段管道(当前预览)的新方式而改变。在这种情况下,构建和发布策略已被弃用,所有内容都被定义为管道并细分为各个阶段(构建阶段、部署阶段 1、部署阶段 2,...)。我尝试通过构建列表方法
接收数据,但这些数据是有限的,并且我缺少一些重要信息,例如“阶段是否成功”。

有人已经有 YAML Pipelines 和 Azure DevOps REST Api 组合的经验吗?有没有办法获取完整数据(与经典发布策略一样)?还是目前正在开发中,我必须要有耐心?

提前致谢!

yaml azure-devops azure-devops-rest-api multistage-pipeline

6
推荐指数
2
解决办法
6975
查看次数

Azure DevOps 依赖于另一个阶段中的作业的作业的条件执行

我有一个pipeline.yaml看起来像这样的

pool:
  vmImage: image

stages:
  -stage: A
   jobs: 
     -job: a
      steps: 
     - script: |
          echo "This is stage build"
          echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes"
        name: BuildStageRun
  -stage: B
   jobs:
      -job: b
       steps: #do something in steps

      -job: c
       dependsOn: a
       condition: eq(dependencies.build.outputs['BuildStageRun.doThing'], 'Yes')
       steps:
        - script: echo "I am scripting" 
Run Code Online (Sandbox Code Playgroud)

因此,有 2 个阶段,A有一项工作aB有 2 个工作bc。我希望仅在作业a执行后才执行作业c 。我尝试通过将作业a中的变量doThing设置为 Yes,然后在作业c中检查此变量来实现此目的。

但我收到一个错误:

阶段计划作业c取决于未知作业 …

conditional-statements azure-devops azure-pipelines multistage-pipeline

6
推荐指数
3
解决办法
2万
查看次数

Azure Devops yaml:发布到多个 Web 节点

我试图弄清楚如何使用 yaml 管道将应用程序部署到多网络节点环境。

我正在尝试创建一个具有 2 个阶段的管道。阶段 1 将构建项目,阶段 2 将其部署到暂存环境。这个登台环境(目前)有 2 个网络节点。我不想对要部署到我的管道中的实际机器进行硬编码。所以我想我会添加一个变量组,其中包含一个包含要部署到的 Web 节点的变量,并使用“每个”语句为每个节点生成一个作业。

但是,由于以下几个原因,这不起作用:

  • 作业是在读取变量组之前生成的,因此显示错误找不到变量
  • 显然,除了内置变量之外,根本不支持数组变量

所以我的问题是,其他人如何解决这个问题?我想在中心位置定义要部署的服务器,而不是在我的管道定义中。

我最初的尝试印在下面。这不起作用,但它确实描述了我想要完成的工作。

主要 yaml:

variables:
- group: LicenseServerVariables #this contains StagingWebNodes variable

stages:
- stage: Build
  displayName: Build
  <some build steps>

- stage: DeployTest
  displayName: Deploy on test
  condition: and(succeeded(), eq(variables['DeployToTest'], 'true'))
  jobs:
  - template: Templates\Deploy.yaml
    parameters:
      nodes: $(StagingWebNodes)
Run Code Online (Sandbox Code Playgroud)

部署.yaml:

parameters:
  nodes: []

jobs:
- ${{ each node in parameters.nodes }}:
  - job: ${{ node }}
    displayname: deploy to ${{ node }}
    pool: …
Run Code Online (Sandbox Code Playgroud)

yaml azure-pipelines multistage-pipeline

5
推荐指数
0
解决办法
216
查看次数

在天蓝色多阶段管道 (YAML) 中将变量从一个作业传递到另一个作业

我有一个非常基本的 YAML azure 管道

jobs:
- job: Foo
  steps:
  - bash: |
      echo "Create variable xyz"
      echo "##vso[task.setvariable variable=xyz;]yes"
    displayName: 'Determine slot name'
  - bash: |
     echo "Var is: $(xyz)"
    displayName: 'Show variable'
- job: Bar
  dependsOn: Foo
  steps:
  - bash: |
      echo "Hello world $(Foo.xyz)"
    displayName: 'Show variable'
Run Code Online (Sandbox Code Playgroud)

在第一个名为 的作业中Foo,变量xyz设置为yes。这是可行的,因为我可以用以下行在几秒钟内显示它

echo "Var is: $(xyz)"
Run Code Online (Sandbox Code Playgroud)

但是,我想在下一个作业(名为Bar)中使用该变量。但无论我做什么,它都不存在。我尝试过类似的事情

 echo "Hello world $(xyz)"
Run Code Online (Sandbox Code Playgroud)

或者

 echo "Hello world $(Foo.xyz)"
Run Code Online (Sandbox Code Playgroud)

但当我运行管道时,两者都会出现以下错误

 line 1: Foo.xyz: command not found …
Run Code Online (Sandbox Code Playgroud)

yaml azure-devops azure-pipelines multistage-pipeline

5
推荐指数
1
解决办法
3132
查看次数

DevOps Pipeline - 在构建步骤中找不到包

我正在尝试将现有的 ASP.NET MVC Web 应用程序从 TeamCity 转移到 Azure DevOps,但是我似乎无法让我的管道找到它从 NuGet 包还原任务还原的包。

该解决方案有多个项目,并且它们使用了大量 NuGet 包。我创建了一个多步骤管道,目前有一个 NuGet 还原任务和一个 VS 构建任务。

解决方案结构是这样的:

\source
..\SolutionFolder
...Solution.sln
..\..\Project1
....Project1.csproj
..\..\Project2
....Project2.csproj
..\..\Packages
azure-pipelines.yaml
NuGet.config
Run Code Online (Sandbox Code Playgroud)

管道 YAML 如下所示:

trigger:
- PipelineBranch

pool:
  vmImage: 'windows-latest'

stages:

## NuGet Restore ##
- stage: nuget_restore
  displayName: 'Restore nuget packages'
  jobs:
  - job: nuget_package_restore
    steps:
    - task: NuGetCommand@2
      displayName: 'NuGet restore'
      inputs:
        command: 'restore'
        restoreSolution: 'source/SolutionFolder/Solution.sln'
        feedsToUse: 'config'
        nugetConfigPath: 'NuGet.Config'
        restoreDirectory: '$(Build.SourcesDirectory)\source\SolutionFolder\packages'

## Build ##
- stage: build_for_int
  displayName: 'Build …
Run Code Online (Sandbox Code Playgroud)

msbuild-task nuget-package-restore azure-devops azure-pipelines multistage-pipeline

4
推荐指数
1
解决办法
3253
查看次数

如何在作业之间共享文件

两个作业是否可以在多阶段管道构建中共享文件?Publishstage有dotnet publishjob(单任务)和publish artifactsjob(单任务)。但是, 的输出dotnet publish似乎不可用于publish artifacts.

azure-pipelines multistage-pipeline

4
推荐指数
1
解决办法
1万
查看次数

Azure 多级管道:有条件地跳过一个阶段但不跳过下一个阶段

我有一个 Azure 多阶段 CI/CD 管道。它具有测试和 UAT 部署阶段。

我希望 UAT 版本在测试成功或被跳过时运行,但如果失败则不运行。

我不能。无论我尝试什么,如果跳过测试,也会跳过 UAT。除非我使用always(),否则即使测试失败,UAT 也会运行。

  ...
  - stage: Test
    condition: and(succeeded(), ne(variables['build.sourceBranchName'], 'DoUAT')) # Skip for UAT deployment tests
    ...

  - stage: UAT
    condition: and(succeeded(), in(variables['build.sourceBranchName'], 'master', 'DoUAT')) # Only deploy off master branch and branch to test UAT deploys.
    ...
Run Code Online (Sandbox Code Playgroud)

如何跳过一个阶段而不是下一个阶段?

我得到的 vs 我想要的

continuous-integration continuous-deployment azure-devops multistage-pipeline

4
推荐指数
3
解决办法
3414
查看次数

Azure DevOps Yaml 管道:阶段条件变量语法

我正在开发 azure devops 多阶段 yaml 管道。我在第一阶段设置了一个变量,然后对于下一阶段,我有一个基于该变量的条件。我还在下一阶段检索变量值。显然,在条件级别和阶段级别访问阶段间变量的语法之间存在细微差别。我无法弄清楚我需要在条件中使用的语法。我已经尝试了所有可能的变化,但似乎没有一个有效。在下面的示例中,我期望 lint 阶段能够运行,但它会被跳过。这里的条件的确切语法应该是什么?

stages:
- stage: build
  displayName: build
  pool:
    name: Azure Pipelines
    vmImage: ubuntu-latest
  dependsOn: []
  jobs:
  - deployment: build_job
    environment:
      name: "test"
    strategy:
      runOnce:
        deploy:
          steps:
          - task: PowerShell@2
            displayName: "get commitMessage variable"
            name: getCommitMessage
            inputs:
              targetType: inline
              pwsh: true
              script: |
                $commitMessage = "abcd_import/"
                echo "setting commitMessage: $commitMessage"
                echo "##vso[task.setvariable variable=commitMessage;isOutput=true]$commitMessage"

- stage: lint
  displayName: lint
  dependsOn:
  - 'build'
  condition: contains(stageDependencies.build.build_job.outputs['build_job.getCommitMessage.commitMessage'], 'import/')
  pool:
    name: Azure Pipelines
    vmImage: ubuntu-latest
  variables:
  - name: BUILD_STAGE_GET_COMMIT_MESSAGE …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines-yaml multistage-pipeline

3
推荐指数
1
解决办法
6335
查看次数