gpt4 book ai didi

for-loop - 在 azure 管道作业中使用 for 循环

转载 作者:行者123 更新时间:2023-12-04 11:22:14 26 4
gpt4 key购买 nike

我将使用 for 循环扫描文件夹中的文件(value-f1.yaml、values-f2.yaml...),每次使用文件名作为变量并在 Azure 管道作业中运行该作业根据该值文件部署 helmchart。该文件夹位于 GitHub 存储库中。所以我在想这样的事情:

管道.yaml

 stages:
- stage: Deploy
variables:
azureResourceGroup: ''
kubernetesCluster: ''
subdomain: ''
jobs:
${{ each filename in /myfolder/*.yaml}}:
valueFile: $filename
- template: Templates/deploy-helmchart.yaml@pipelinetemplates

部署-helmchart.yaml
 jobs:
- job: Deploy
pool:
vmImage: 'ubuntu-latest'
steps:
- task: HelmInstaller@1
displayName: 'Installing Helm'
inputs:
helmVersionToInstall: '2.15.1'
condition: and(succeeded(), startsWith(variables['build.sourceBranch'], 'refs/tags/v'))

- task: HelmDeploy@0
displayName: 'Initializing Helm'
inputs:
connectionType: 'Azure Resource Manager'
azureSubscription: $(azureSubscription)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: 'init'
condition: and(succeeded(), startsWith(variables['build.sourceBranch'], 'refs/tags/v'))

- task: PowerShell@2
displayName: 'Fetching GitTag'
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
Write-Host "Fetching the latest GitTag"
$gt = git describe --abbrev=0
Write-Host "##vso[task.setvariable variable=gittag]$gt"
condition: and(succeeded(), startsWith(variables['build.sourceBranch'], 'refs/tags/v'))


- task: Bash@3
displayName: 'Fetching repo-tag'
inputs:
targetType: 'inline'
script: |
echo GitTag=$(gittag)
echo BuildID=$(Build.BuildId)
echo SourceBranchName=$(Build.SourceBranchName)
echo ClusterName= $(kubernetesCluster)

- 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: $(valueFile)
arguments: '--set image.tag=$(gittag) --set subdomain=$(subdomain)'
condition: and(succeeded(), startsWith(variables['build.sourceBranch'], 'refs/tags/v'))

另一件事是,如果作业默认可以访问 GitHub 存储库,或者我需要在作业级别做些什么?

此外,对于这种情况,我如何在工作中使用 for 循环?

任何帮助,将不胜感激。

收到@Leo 的评论后更新

这是我在 deploy-helmchart.yaml 中添加的 PowerShell 任务,用于从 GitHub 的文件夹中获取文件。
 - task: PowerShell@2
displayName: 'Fetching Files'
inputs:
targetType: 'inline'
script: |
Write-Host "Fetching values files"
cd myfolder
$a=git ls-files
foreach ($i in $a) {
Write-Host "##vso[task.setvariable variable=filename]$i"
Write-Host "printing"$i
}

现在的问题是如何使用参数为每个文件运行任务:HelmDeploy@0?

最佳答案

if the jobs can get access to the GitHub repo by default or do I need to do something in the job level?


答案是肯定的。
我们可以在作业中添加一个命令行任务,比如 job1通过 Github PAT 克隆 GitHub 存储库,然后我们可以在 value-f1.yaml 中访问这些文件( values-f2.yaml$(Build.SourcesDirectory) 、...) :
git clone https://<GithubPAT>@github.com/XXXXX/TestProject.git

Besides how can I use for-loop in the job for this case?


您可以创建一个具有一组操作的模板,并在构建过程中传递参数,例如:
部署-helmchart.yaml:
parameters:
param : []

steps:
- ${{each filename in parameters.param}}:
- scripts: 'echo ${{ filename }}'
管道.yaml:
steps:
- template: deploy-helmchart.yaml
parameters:
param: ["filaname1","filaname2","filaname3"]
查看文档 Solving the looping problem in Azure DevOps Pipelines了解更多详情。
命令行获取文件夹中的最新文件名:
   FOR /F "delims=|" %%I IN ('DIR "$(Build.SourcesDirectory)\*.txt*" /B /O:D') DO SET NewestFile=%%I

echo "##vso[task.setvariable variable=NewFileName]NewestFile"
更新:

Now the question is how can I run the task: HelmDeploy@0 for eachfiles using parameters?


s depends on whether your HelmDeploy` 任务具有接受文件名参数的选项。
正如我之前所说,我们可以使用以下 yaml 来调用带有参数的模板 yaml:
 - template: deploy-helmchart.yaml
parameters:
param: ["filaname1","filaname2","filaname3"]
但是,如果任务 HelmDeploy没有接受参数的选项,我们无法运行任务 HelmDeploy@0对于每个使用参数的文件。
然后我查看 HelmDeploy@0 ,我发现只有一个选项可以接受 掌 Helm 命令 参数:
enter image description here
所以,这个问题的答案是 取决于你的文件名是否可以用作 Helm 命令 ,否则,您将无法运行任务 HelmDeploy@0对于每个使用参数的文件。如果是,你可以做到。
请查看官方文档 Templates了解更多详情。
希望这可以帮助。

关于for-loop - 在 azure 管道作业中使用 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59387555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com