我正在Azure DevOps中建立几个管道。为了使我的团队生活更轻松,我正在使用作业模板。
这些作业模板仅在适合它们的位置存储在正确的存储库中。
对于每个管道,我都定义了存储库以从中获取模板。
这些模板中的某些任务运行powershell代码,我希望此代码位于脚本文件中,以便可重复使用并存储在与模板相同的存储库中。
当管道运行时,将嵌入模板,它会尝试在实际正在构建/部署的项目存储库中找到powershell脚本。
我该如何实现?
解决方法是拥有我真的不想拥有的内联代码。
任何建设性的答案将不胜感激。
谢谢
经过一番挖掘,我找不到任何方法来指定脚本文件作为模板中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
答案 0 :(得分:1)
当前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 。
答案 1 :(得分:1)
在模板文件中调用- checkout: templates
。这可能仅在您插入模板时有效,但它可以成功查看存储库资源并将其拉下。
答案 2 :(得分:0)
您可以从源目录复制脚本文件。目前,您还没有提到根文件夹-
ssis/pipelines/scripts/build-ssis-project.ps1
假设,您是在Powershell脚本所在的回购中构建的-
尝试-
- task: PowerShell@1
inputs:
scriptName: '$(ScriptsDir)/ssis/pipelines/scripts/build-ssis-project.ps1'
传递ScriptsDir的值,该值可以是构建源目录或构建工作目录