我有一个PowerShell脚本任务,该任务从git存储库中的文件夹获取某些文件的名称,并将其放入变量中。我想在参数中使用这些文件名,并在另一个任务(任务:HelmDeploy @ 0)中使用“每个”条件,以便每次使用文件名之一作为valueFile变量运行该任务。
这是我尝试过的方法,但是它给出了错误Template-Yaml/deploy-jobs.yaml@pipelinetemplates期望的序列或映射。 $ {{parameters.files}}] >>行中的实际值'$ [dependencies.A.outputs ['fileoutput.valuefiles']]'
deploy-jobs.yaml
parameters: files: [] jobs: - job: Deploy pool: vmImage: 'ubuntu-latest' variables: filenames: ${{ parameters.files }} steps: - task: HelmInstaller@1 displayName: 'Installing Helm' inputs: helmVersionToInstall: '2.15.1' - task: HelmDeploy@0 displayName: 'Initializing Helm' inputs: connectionType: 'Azure Resource Manager' azureSubscription: $(azureSubscription) azureResourceGroup: $(azureResourceGroup) kubernetesCluster: $(kubernetesCluster) command: 'init' - task: AzureCLI@2 inputs: azureSubscription: $(azureSubscription) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: echo "##vso[task.setvariable variable=imgtag]$(az acr repository show-tags --name myacr --repository myrepo --orderby time_desc --top 1 | awk ' /[[:digit:]]/ { print $0 } ' | tr -d '[:space:]')" - task: Bash@3 displayName: 'Fetching repo-tag' inputs: targetType: 'inline' script: | echo tag=$(imgtag) echo filenames=$(filenames) ### output is: **/myfolder/dev/file1.yaml,**/myfolder/dev/file2.yaml - ${{each file in parameters.files}}: ##Error - task: HelmDeploy@0 displayName: 'Upgrading helmchart' inputs: connectionType: 'Azure Resource Manager' azureSubscription: $(azureSubscription) azureResourceGroup: $(azureResourceGroup) kubernetesCluster: $(kubernetesCluster) command: 'upgrade' chartType: 'FilePath' chartPath: $(chartPath) install: true releaseName: $(releaseName) ##valueFile: $(valuefiles) valueFile: ${{ file }} arguments: '--set image.tag=$(imgtag) --set domain=$(domain)'
azure-pipeline.yaml文件如下:
trigger: branches: include: - master - refs/tags/v* paths: exclude: - readme.md variables: azureSubscription: 'myazuresubscription' chartPath: '**/mychart' containerRegistry: 'mysc' repository: 'myrepo' resources: repositories: - repository: pipelinetemplates type: github name: 'mygitorg/myrepo' endpoint: 'mygitorg' stages: - stage: Deploy_Cluster variables: azureResourceGroup: 'myresourcegroup' kubernetesCluster: 'mycluster' releaseName: 'mychartreleasename' #valueFile: '**/mychart/values.yaml' domain: 'mydomain' jobs: - job: A pool: vmImage: 'ubuntu-latest' steps: - task: PowerShell@2 displayName: 'Fetching ValueFiles' inputs: targetType: 'inline' script: | Write-Host "Fetching value files" cd tenant/dev $a=git ls-files $List = $a | foreach {'**/myfolder/dev/' + $_} Write-Host $List $d = '"{0}"' -f ($List -join '","') Write-Host $d ### output is: "**/myfolder/dev/file1.yaml","**/myfolder/dev/file2.yaml" Write-Host "##vso[task.setvariable variable=valuefiles;isOutput=true]$d" name: fileoutput - template: Template-Yaml/deploy-jobs.yaml@pipelinetemplates ##Error expected a sequence or mapping parameters: files : $[dependencies.Deploy.outputs['fileoutput.valuefiles']]
我从此页面中有了一些想法:https://www.aaron-powell.com/posts/2019-05-24-azure-pipeline-templates-and-parameters/有关使用依赖项。
我在Google上搜索了很多,但是到目前为止,我仍未找到解决该问题的方法,我们将不胜感激。
我有一个PowerShell脚本任务,该任务从git存储库中的文件夹获取某些文件的名称,并将其放入变量中。我想在参数中使用这些文件名,并在...
发生错误是因为files
仅在运行时可以计算,但是- ${{each file in parameters.files}}
在编译时才计算。检查here以获取有关变量语法的更多信息。