我正在寻找一个可以根据 Azure Repos 中的标签下载最新提交的任务。我的意思是从 Azure Repos 下载整个文件/文件夹结构,然后用于构建应用程序。然后将其用于不同的环境,例如测试、集成和生产。现在,我对顺序/任务/可重用性有点困惑:
- 第一阶段称为“构建”,可以从 Azure Repo 下载该包,然后发布?所以有两个任务
DownloadGitHubRelease@0
并PublishPipelineArtifact@1
发布该工件?顺便说一句,我没有看到可以从 Azure Repo 下载包的任务,只有DownloadGitHubRelease@0
为 GitHub 设计的任务,对吗? - 第二阶段称为测试,应该使用
DownloadBuildArtifacts@1
(即上述包)下载该工件,然后使用 将其提取出来ExtractFiles@1
。 - 生产阶段的步骤/任务与上述相同。
这是正确的方法吗?或者有更好的方法吗?我的开头是:
trigger:
branches:
include:
- master/*
resources:
repositories:
- repository: pipeline
type: git
name: pipeline
ref: auto/*
- repository: Automotive
type: git
name: autoomotive
ref: master
variables:
- template: variables.yml
- name: releaseTag
value: '18.11.0'
stages:
- stage: Build
jobs:
- job: DownloadPackage
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadGitHubRelease@0
inputs:
repository: 'OEM/Automotive'
tags: |
[latest]
artifactName: 'AutomotivePackage'
downloadPath: '$(System.ArtifactsDirectory)'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(System.ArtifactsDirectory)/AutomotivePackage'
artifactName: 'AutomotivePackage'
publishLocation: 'pipeline'
- stage: Test
jobs:
- job: TestDeployment
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
artifactName: 'AutomotivePackage'
downloadPath: '$(System.ArtifactsDirectory)'
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(System.ArtifactsDirectory)/AutomotivePackage/*.tar.gz'
destinationFolder: '$(System.DefaultWorkingDirectory)/Automotive'
- stage: Production
jobs:
- job: ProdDeployment
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
artifactName: 'AutomotivePackage'
downloadPath: '$(System.ArtifactsDirectory)'
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(System.ArtifactsDirectory)/AutomotivePackage/*.tar.gz'
destinationFolder: '$(System.DefaultWorkingDirectory)/Automotive'
我的想象是开发人员提交带有标签的新包,然后 Azure Devops 接受更改并运行管道。
听起来您需要做的就是向现有的构建管道添加一个部署步骤。这会将最新的构建工件复制到您想要的位置。由于您的位置在 Azure 环境中,您需要查看所有部署任务并确定哪一个任务完全符合您的要求。
例如:
简单直接。如果您的需求比简单的复制更深入,还有其他部署任务。
从您的示例管道来看,您可以将具有此任务的作业添加到每个阶段,这将执行工件的部署。
我建议目标文件夹不要作为您网站的工作目录,直到您对部署任务的工作方式感到足够满意为止。
您可能还需要一些 powershell 或其他脚本任务来停止您的服务或网站并在部署完成后重新启动它们。
根据评论和问题描述,管道需要监听Automotive repo 中的提交标签变化,然后触发管道并根据相关更改的标签下载 azure repo。
为了满足您的要求,您可以在 repo 资源中设置标签触发器
- checkout: repoalias
,并直接使用根据相关更改的标签下载 azure repo。标签触发器:
下载 Azure Repo:
以下是一个例子:
当开发人员将带有标签的新包提交到 Azure repo 时,它将自动触发管道,并且检出步骤将下载带有相关提交标签的 Azure repo。
如果需要下载用于创建管道的 repo,可以添加-checkout: self来检查相关 repo。
这是有关结帐定义的文档。
结果: