当这些模板驻留在独立的存储库中时,是否可以引用 Azure DevOps 管道模板中的文件?
Is it possible to refrence files inside Azure DevOps pipeline templates when these templates reside in a standalone repo?
我正在 Azure DevOps 中设置多个管道。为了让我的团队生活更轻松,我使用了工作模板。
这些作业模板在一个合适的存储库中,专为它们而设。
对于每个管道,我定义存储库以从中获取模板。
这些模板中的一些任务 运行 powershell 代码,我希望这段代码在脚本文件中,可以重复使用并存储在与模板相同的 repo 中。
当管道 运行s 嵌入模板时,它会尝试在项目回购中找到 powershell 脚本,实际上是 built/deployed。
我怎样才能做到这一点?
解决方法是使用内联代码,但我真的不想使用它。
任何建设性的回答将不胜感激。
谢谢
经过一番挖掘,我找不到任何方法来将脚本文件指定为模板中 powershell 任务的源。
内部管道定义:
resources:
repositories:
- repository: templates
type: git
name: deploy-templates
variables:
artifactName: 'Trade Data ETL - $(Build.SourceBranchName)'
stages:
- stage: Build
displayName: Build
variables:
- group: DEV-Credential-Group
- group: COMMON-Settings-Group
jobs:
- template: ssis/pipelines/stage-build.yml@templates # Template reference
parameters:
artifactName: '$(artifactName)'
内部模板文件:
- task: PowerShell@2
inputs:
filePath: ssis/pipelines/scripts/build-ssis-project.ps1
arguments: '-ProjectToBuild "tradedata-ldz-ssis/tradedata-ldz-ssis.dtproj'
pwsh: true
您可以从源目录复制脚本文件。目前,您还没有提到根文件夹 -
ssis/pipelines/scripts/build-ssis-project.ps1
假设,您正在构建 powershell 脚本所在的存储库 -
尝试 -
- task: PowerShell@1
inputs:
scriptName: '$(ScriptsDir)/ssis/pipelines/scripts/build-ssis-project.ps1'
传递 ScriptsDir 的值,它可以是构建源目录或构建工作目录
2021 年更新
根据 docs.microsoft.com,您现在还可以检出多个存储库而无需自定义脚本。
如果您签出多个存储库,则会在 $(Build.SourcesDirectory).
下方创建一个包含该存储库的单独文件夹
您可以像这样定义多个存储库:
resources:
repositories:
- repository: devops
type: git
name: DevOps
ref: main
- repository: infrastructure
type: git
name: Infrastructure
ref: main
并在步骤中简单地检查它们如下:
steps:
- checkout: self
- checkout: devops
- checkout: infrastructure
# List all available repositories
- script: ls
原答案
目前resources命令只支持其他仓库的yml文件。但是,您可以简单地检出任务中的存储库,然后 运行 所需的 powershell 脚本。
steps:
- task: PowerShell@2
inputs:
targetType: inline
script: |
git clone -b <your-desired-branch> https://azuredevops:$($env:token)@dev.azure.com/<your-organization>/<your-project>/_git/<your-repository> <target-folder-name>
./<target-folder-name>/foo.ps1
env:
token: $(System.AccessToken)
此脚本将签出任意分支并在目标存储库的根目录中执行脚本 foo.ps1。
在模板文件中调用- checkout: templates
。这可能仅在您插入模板时有效,但它成功地看到存储库资源并将其拉下。
我正在 Azure DevOps 中设置多个管道。为了让我的团队生活更轻松,我使用了工作模板。
这些作业模板在一个合适的存储库中,专为它们而设。
对于每个管道,我定义存储库以从中获取模板。
这些模板中的一些任务 运行 powershell 代码,我希望这段代码在脚本文件中,可以重复使用并存储在与模板相同的 repo 中。
当管道 运行s 嵌入模板时,它会尝试在项目回购中找到 powershell 脚本,实际上是 built/deployed。
我怎样才能做到这一点?
解决方法是使用内联代码,但我真的不想使用它。
任何建设性的回答将不胜感激。
谢谢
经过一番挖掘,我找不到任何方法来将脚本文件指定为模板中 powershell 任务的源。
内部管道定义:
resources:
repositories:
- repository: templates
type: git
name: deploy-templates
variables:
artifactName: 'Trade Data ETL - $(Build.SourceBranchName)'
stages:
- stage: Build
displayName: Build
variables:
- group: DEV-Credential-Group
- group: COMMON-Settings-Group
jobs:
- template: ssis/pipelines/stage-build.yml@templates # Template reference
parameters:
artifactName: '$(artifactName)'
内部模板文件:
- task: PowerShell@2
inputs:
filePath: ssis/pipelines/scripts/build-ssis-project.ps1
arguments: '-ProjectToBuild "tradedata-ldz-ssis/tradedata-ldz-ssis.dtproj'
pwsh: true
您可以从源目录复制脚本文件。目前,您还没有提到根文件夹 -
ssis/pipelines/scripts/build-ssis-project.ps1
假设,您正在构建 powershell 脚本所在的存储库 -
尝试 -
- task: PowerShell@1
inputs:
scriptName: '$(ScriptsDir)/ssis/pipelines/scripts/build-ssis-project.ps1'
传递 ScriptsDir 的值,它可以是构建源目录或构建工作目录
2021 年更新
根据 docs.microsoft.com,您现在还可以检出多个存储库而无需自定义脚本。 如果您签出多个存储库,则会在 $(Build.SourcesDirectory).
下方创建一个包含该存储库的单独文件夹您可以像这样定义多个存储库:
resources:
repositories:
- repository: devops
type: git
name: DevOps
ref: main
- repository: infrastructure
type: git
name: Infrastructure
ref: main
并在步骤中简单地检查它们如下:
steps:
- checkout: self
- checkout: devops
- checkout: infrastructure
# List all available repositories
- script: ls
原答案
目前resources命令只支持其他仓库的yml文件。但是,您可以简单地检出任务中的存储库,然后 运行 所需的 powershell 脚本。
steps:
- task: PowerShell@2
inputs:
targetType: inline
script: |
git clone -b <your-desired-branch> https://azuredevops:$($env:token)@dev.azure.com/<your-organization>/<your-project>/_git/<your-repository> <target-folder-name>
./<target-folder-name>/foo.ps1
env:
token: $(System.AccessToken)
此脚本将签出任意分支并在目标存储库的根目录中执行脚本 foo.ps1。
在模板文件中调用- checkout: templates
。这可能仅在您插入模板时有效,但它成功地看到存储库资源并将其拉下。