标签: azure-pipelines

azure devops 构建管道将超时减少到 30 分钟

有没有办法更改构建管道的超时时间,目前管道时间在 60 分钟后结束。我想把它减少到 30 分钟。

我查看了所有组织设置和项目设置,但在 UI 上找不到任何内容

或者它可以从 YAML 设置吗?

timeout build-pipeline azure-devops azure-pipelines

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

在 Azure DevOps 中,是否有一种 GUI 方式可以禁用基于 YAML 的管道中的任务?

刚接触 Azure DevOps 并将其用于基础设施即代码 Azure 部署。
使用经典发布管道,您可以进入管道,进入阶段并非常快速地启用/禁用该阶段中的任务

在此处输入图片说明

您将如何使用 YAML 管道执行此操作?

yaml azure-devops azure-pipelines

7
推荐指数
2
解决办法
8180
查看次数

错误:在 Azure Pipeline Terraform 期间生成 terraform ENOENT

尝试terraform init在 Azure Pipeline 中作为任务运行时,出现错误说明

生成 C:\hostedtoolcache\windows\terraform\0.12.7\x64\terraform.exe ENOENT

安装看起来不错,因为在安装步骤 ( terraform version)期间验证了基本功能

相关管道任务

...
  - task: TerraformInstaller@0
    displayName: 'Install Terraform 0.12.7'
    inputs:
      terraformVersion: 0.12.7
  - task: TerraformTaskV1@0
    displayName: 'Terraform : init'
    inputs:
        command: 'init'
        workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform/terraform'
...
Run Code Online (Sandbox Code Playgroud)

安装 Terraform 0.12.7

...
  - task: TerraformInstaller@0
    displayName: 'Install Terraform 0.12.7'
    inputs:
      terraformVersion: 0.12.7
  - task: TerraformTaskV1@0
    displayName: 'Terraform : init'
    inputs:
        command: 'init'
        workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform/terraform'
...
Run Code Online (Sandbox Code Playgroud)

地形:初始化

...
Verifying Terraform installation...
C:\hostedtoolcache\windows\terraform\0.12.7\x64\terraform.exe version
Terraform v0.12.7

Your version of Terraform …
Run Code Online (Sandbox Code Playgroud)

terraform azure-pipelines terraform-provider-azure

7
推荐指数
1
解决办法
5862
查看次数

检查 Azure YAML 中的空对象类型参数

我正在设置构建模板,但无法弄清楚可选对象类型参数的语法。在我的管道中,我像这样调用模板:

stages:
- template: aspnet-core.yml@templates
  parameters:
    database:
      name: 'SomeDatabase'
      server: 'SomeServer'
Run Code Online (Sandbox Code Playgroud)

我在模板中定义了这样的参数:

parameters:
  database: null
Run Code Online (Sandbox Code Playgroud)

我想在模板中进行这样的检查,以便我可以有条件地运行任务:

- ${{ if ne('${{ parameters.database }}', null) }}:
Run Code Online (Sandbox Code Playgroud)

但是,它不喜欢if语句中的关键字null,我不知道如何表示它没有传入的事实。我在这里有什么选择?

yaml azure-devops azure-pipelines

7
推荐指数
3
解决办法
6877
查看次数

用于具有多个项目的单一存储库的 Azure Pipelines 仅构建更新的一个

我正在尝试使用 Azure 管道为一个存储库中包含的多个 Java 项目构建 CI/CD。

为此,需要创建一个管道,该管道将使用 Maven@3 任务构建每个项目。问题是,当我们添加新项目时,我希望只构建这个项目,而不是之前的每个项目。我的文件看起来像:

    resources:
- repo: self
  clean: true
  lfs: true

trigger:
  branches:
    include:
      - feature/*

variables:
  - group: vars

stages:
- stage: Build
  pool:
    vmImage: 'image' 
  jobs:
  - job: Build
    strategy:
      maxParallel: 4
    steps:
    - task: replacetokens@3
      inputs:
        targetFiles: 'settings.xml'
    - task: Maven@3
      inputs:
        jdkVersionOption: 1.8
        mavenPomFile: 'project1/pom.xml'
        options: '-s $(Build.SourcesDirectory)\settings.xml'
        goals: 'clean package'
    - task: Maven@3
      inputs:
        jdkVersionOption: 1.8
        mavenPomFile: 'project2/pom.xml'
        options: '-s $(Build.SourcesDirectory)\settings.xml'
        goals: 'clean package'
Run Code Online (Sandbox Code Playgroud)

例如project1在develop中已经alraedy了,所以我不想为它做mvn包,而只是为project2做mvn包,它没有合并并且有功能分支。

现在这个 yml 不起作用,因为 project1 …

java azure-devops azure-pipelines

7
推荐指数
1
解决办法
2510
查看次数

在 Azure 管道作业之间共享文件

在 Azure 管道的文档中,我读到:

每个代理一次只能运行一项作业。要并行运行多个作业,您必须配置多个代理。

在自托管代理上运行管道时,默认情况下,在两次连续运行之间不会清除任何子目录。因此,您可以进行增量构建和部署,前提是已实现任务以利用它。您可以使用作业的工作区设置覆盖此行为。

管道工件提供了一种在管道中的阶段之间或不同管道之间共享文件的方法。它们通常是需要由另一个作业使用或部署的构建过程的输出。

作为初学者,看完这篇,我有一些疑惑:

  1. 如果我在 azure-pipelines.yaml 中有 2 个作业(第 2 个作业在第 1 个之后运行),这两个作业会在同一个代理中运行吗?同一管道中的不同作业是否共享可通过变量引用的同一工作区Pipeline.Workspace?(很明显,在并行作业运行的情况下,它需要多个代理)。
  2. 第一项工作一步生成一些文件。是否可以在不使用工件的情况下在第二个作业中使用这些文件(通常使用工件,第一个作业发布工件,第二个作业下载它)?

可以请一些人帮我清除这些疑虑吗?

jobs artifacts agent azure-pipelines

7
推荐指数
1
解决办法
2129
查看次数

Azure Devops Pipelines 中的循环和数组

您可以使用类似于-${{ each x in y }}:. 根据我的理解,y可以是一个数组。

但是,我发现没有each. 描述其用法示例的唯一页面位于“模板”页面上。

所以我的问题是:我如何去指定一个数组?我知道一种方法是使用-${{ each book in parameters.books }}:然后传入books类似的“列表” :

- template: template.yml
  parameters: 
    books:
      - book1
      - book2
      - book3
Run Code Online (Sandbox Code Playgroud)

但是,我还想将数组定义为变量:

variables:
  books:
    - book1
    - book2
    - book3
Run Code Online (Sandbox Code Playgroud)

但是,为此,ADO 会抛出错误 A sequence was not expected

有没有办法像这样定义一个数组?我想我会将这些称为-${{ each book in variables.books }}:如果没有,还有其他方法可以指定列表吗?

azure azure-devops azure-pipelines

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

MacOS 上的 CTest 错误:未找到测试可执行文件

我正在做一个 CMake 项目。对于 CI,我决定使用 Azure Pipelines。但是,我在测试阶段在 MacOS 上遇到了一个小问题。问题是 MacOS 无法找到测试可执行文件,即使它在那里。

早些时候,我的项目没有正确构建。但是现在整个管道运行成功(感谢 Stack Overflow 社区),除了 MacOS 上的小故障。我已经更新了我的问题,现在它说明了问题是什么以及我如何修复它,以便它可能对像我这样的 CI 世界的新手有所帮助。

编辑1

早些时候我的 CMake 任务没有触发构建过程。这是因为我没有为 CMake 提供任何命令行参数。我所做的就是这样:

- task: CMake@1
  displayName: Generate CMake Cache
  inputs:
    workingDirectory: build
Run Code Online (Sandbox Code Playgroud)

我认为 CMake 任务会自动驱动构建过程,因为文档中没有明确指定该任务实际执行的操作。除了打印 CMake 用法之外,这没有任何作用。然后我发现我们必须使用适当的命令行参数运行 CMake 任务两次(一次用于项目配置,然后用于实际构建)。

编辑2

这是我更新的 AzurePipelines.yml 文件

Azure 管道 CI

stages:
- stage: Build
  displayName: Build

  jobs:
  - job: RunCMakeTask
    displayName: Run CMake Task

    strategy:
      matrix:
        LinuxDebug:
          OS: 'Linux'
          imageName: 'ubuntu-latest'
          BuildConfiguration: 'Debug'
        LinuxRelease:
          OS: 'Linux'
          imageName: 'ubuntu-latest'
          BuildConfiguration: 'RelWithDebInfo' …
Run Code Online (Sandbox Code Playgroud)

c++ continuous-integration cmake ctest azure-pipelines

7
推荐指数
1
解决办法
376
查看次数

PublishPipelineArtifact 已弃用 - 将本地目录或文件发布为当前管道的命名工件

我有以下 Azure Pipelines 作业:

- stage: Production
  dependsOn: Test
  jobs:
  - job: Publish
    pool:
      vmImage: 'Ubuntu 16.04'
    steps:
    - task: UseDotNet@2
      displayName: Setup
      inputs:
        packageType: sdk
        version: 3.1.x
    - task: DotNetCoreCLI@2
      displayName: Publish
      inputs:
        command: publish
        publishWebProjects: false
        projects: 'src/**/*.csproj'
        arguments: '--configuration production --output $(Build.ArtifactStagingDirectory)'
        zipAfterPublish: true
    - task: PublishPipelineArtifact@0
      displayName: Export
      inputs:
        artifactName: Production
        targetPath: '$(Build.ArtifactStagingDirectory)'
  - deployment: Deploy
    dependsOn: Publish
    pool:
      vmImage: Ubuntu-16.04
    environment: Production
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@1
            displayName: Import
            inputs:
              artifactName: Production
          - …
Run Code Online (Sandbox Code Playgroud)

azure-devops azure-pipelines azure-pipelines-yaml

7
推荐指数
1
解决办法
606
查看次数

在 Azure Pipelines 中复制和重命名配置文件

我有针对特定环境(dev、qa、uat)的特定配置文件和另一个根 web.config。部署的代码读取 web.config。所以我一直在尝试复制内容或重命名 Azure Pipelines 中的文件。

- task: CopyFiles@2
      displayName: 'Copy Specific Config'
      inputs:
        SourceFolder: 'Client.WebApi.Core/Configs/Web.QA.config'
        TargetFolder: '$(build.artifactstagingdirectory)\MainWebApi'

- task: CmdLine@2
      inputs:
        script: rename $(build.artifactstagingdirectory)\MainWebApi\Web.QA.config 
        $(build.artifactstagingdirectory)\MainWebApi\web.config
Run Code Online (Sandbox Code Playgroud)

另一种方法:

- task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          copy-item -path Client.WebApi.Core/Configs/Web.QA.Config -destination Client.WebApi.Core/web.config
          TargetFolder: '$(build.artifactstagingdirectory)/MainWebApi'
Run Code Online (Sandbox Code Playgroud)

我尝试了各种组合,例如重命名然后复制和复制然后重命名,将内容复制到新的 web.config 文件等究竟应该使用什么?

azure-pipelines

7
推荐指数
3
解决办法
5892
查看次数