我试图弄清楚如何使用yaml管道将应用程序部署到多Web节点环境中。
我正在尝试创建一个包含两个阶段的管道。第一阶段将构建项目,第二阶段将其部署到暂存环境。该暂存环境(当前)具有2个Web节点。我不想硬编码要部署到我的管道中的实际计算机。因此,我想添加一个变量组,其中包含一个要部署到的Web节点的变量,并使用“每个”语句为每个节点生成作业。
但是,由于以下几个原因,该方法不起作用:
所以我的问题是,其他人如何解决呢?我想在中心位置而不是在管道定义中定义要部署到的服务器。
我的最初尝试印在下面。这行不通,但是确实描述了我要完成的工作。
主要Yaml:
variables:
- group: LicenseServerVariables #this contains StagingWebNodes variable
stages:
- stage: Build
displayName: Build
<some build steps>
- stage: DeployTest
displayName: Deploy on test
condition: and(succeeded(), eq(variables['DeployToTest'], 'true'))
jobs:
- template: Templates\Deploy.yaml
parameters:
nodes: $(StagingWebNodes)
Deploy.yaml:
parameters:
nodes: []
jobs:
- ${{ each node in parameters.nodes }}:
- job: ${{ node }}
displayname: deploy to ${{ node }}
pool: Saas Staging
demands: ${{ node }}
steps:
- template: DeployToNode.yaml
编辑:
我离解决方案有点近。通过对Deploy.yaml进行以下调整,我能够使管道与“每个”构造一起使用:
parameters:
nodes:
- name: 'Node1'
pool:
name: StagingPool
demands: 'Node1'
- name: 'Node2'
pool:
name: StagingPool
demands: 'Node2'
jobs:
- ${{ each node in parameters.nodes }}:
- job: ${{ node.name }}
displayName: deploy to ${{ node.name }}
pool: ${{ node.pool }}
steps:
- template: DeployToNode.yaml
这使它变得更好。但是,我仍然不想在管道yaml源中定义“ nodes”参数,而是在变量组中(或者其他地方,如果有人有很好的建议)定义
答案 0 :(得分:1)
通过添加虚拟机作为环境资源,此问题已消失。现在,我可以使用滚动部署任务将应用程序部署到所有Web节点