如何在Azure DevOps流水线中基于目录数量创建动态Job?
Azure DevOps动态Job实现方案
完全可以实现,你可以通过Azure DevOps的动态矩阵作业功能,根据部署目录的实际数量自动生成对应数量的部署Job,不需要提前硬编码Job数量。
实现步骤
1. 新增矩阵生成前置作业
首先添加一个用于扫描目录、生成动态矩阵参数的前置Job,输出所有待部署的应用目录列表供后续作业使用,示例配置如下:
jobs: # 前置作业:扫描目录生成矩阵 - job: generate_deploy_matrix pool: vmImage: 'ubuntu-latest' steps: - bash: | # 扫描deployments目录下所有一级子目录,生成数组格式的应用列表 APP_LIST=$(find deployments -maxdepth 1 -type d | grep -v '^deployments$' | xargs basename | jq -R -s -c 'split("\n")[:-1]') # 输出变量供后续作业调用 echo "##vso[task.setvariable variable=appList;isOutput=true]$APP_LIST" name: get_app_dirs
2. 配置动态部署作业
添加依赖前置作业的部署Job,通过引用前置作业输出的矩阵参数,自动生成对应数量的部署Job,每个Job对应一个应用目录:
# 动态部署作业:每个应用对应一个独立Job - job: deploy_single_app dependsOn: generate_deploy_matrix pool: vmImage: 'ubuntu-latest' strategy: # 引用前置作业输出的应用列表生成矩阵 matrix: $[ dependencies.generate_deploy_matrix.outputs['get_app_dirs.appList'] ] # 可修改此处控制最大并发部署数,1为串行执行 maxParallel: 10 steps: - bash: | # 提前安装cf cli(如果代理镜像中没有预装) # wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add - # echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list # sudo apt-get update && sudo apt-get install cf8-cli # 登录Cloud Foundry cf login -a $CF_API -u $CF_USER -p $CF_PASSWORD -o $CF_ORG -s $CF_SPACE # 进入对应应用目录执行部署 cd deployments/$(System.JobName) cf push env: # 以下变量提前在流水线变量中配置,不要硬编码敏感信息 CF_API: $(cf_api) CF_USER: $(cf_user) CF_PASSWORD: $(cf_password) CF_ORG: $(cf_org) CF_SPACE: $(cf_space)
注意事项
- 如果你使用的构建代理已经预装了Cloud Foundry CLI,可以跳过配置中的cf cli安装步骤
- 可以根据实际需求调整
maxParallel参数控制部署并发数,设置为1即可实现应用串行部署 - 所有认证相关信息建议存在Azure DevOps流水线的加密变量中,避免泄露
内容的提问来源于stack exchange,提问作者shrish
相关产品推荐
相关产品推荐

