Azure devops yaml:发布到多个 web 节点
Azure devops yaml: release to multiple web nodes
我正在尝试弄清楚如何使用 yaml 管道将应用程序部署到多网络节点环境。
我正在尝试创建一个包含 2 个阶段的管道。第 1 阶段将构建项目,第 2 阶段将其部署到暂存环境。此暂存环境(当前)有 2 个 Web 节点。我不想将要部署到我的管道中的实际机器硬编码。所以我想我会添加一个变量组,其中包含一个包含要部署到的 Web 节点的变量,并使用 "each" 语句为每个节点生成一个作业。
但是,由于以下几个原因,这不起作用:
- 作业是在读取变量组之前生成的,所以显示找不到变量的错误
- 显然不支持数组变量,内置变量除外
所以我的问题是,其他人是如何解决这个问题的?我想将要部署到的服务器定义在一个中心位置,而不是在我的管道定义中。
我的初步尝试打印如下。这不起作用,但它确实描述了我要完成的任务。
主 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:
进行以下调整,我能够使管道与 "each" 构造一起使用
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" 参数,而是在一个变量组中(或者如果有人有好的建议,则在其他地方)
随着虚拟机作为环境资源的添加,这个问题已经消失。我现在可以使用滚动部署任务将应用程序部署到所有 Web 节点
我正在尝试弄清楚如何使用 yaml 管道将应用程序部署到多网络节点环境。
我正在尝试创建一个包含 2 个阶段的管道。第 1 阶段将构建项目,第 2 阶段将其部署到暂存环境。此暂存环境(当前)有 2 个 Web 节点。我不想将要部署到我的管道中的实际机器硬编码。所以我想我会添加一个变量组,其中包含一个包含要部署到的 Web 节点的变量,并使用 "each" 语句为每个节点生成一个作业。
但是,由于以下几个原因,这不起作用:
- 作业是在读取变量组之前生成的,所以显示找不到变量的错误
- 显然不支持数组变量,内置变量除外
所以我的问题是,其他人是如何解决这个问题的?我想将要部署到的服务器定义在一个中心位置,而不是在我的管道定义中。
我的初步尝试打印如下。这不起作用,但它确实描述了我要完成的任务。
主 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:
进行以下调整,我能够使管道与 "each" 构造一起使用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" 参数,而是在一个变量组中(或者如果有人有好的建议,则在其他地方)
随着虚拟机作为环境资源的添加,这个问题已经消失。我现在可以使用滚动部署任务将应用程序部署到所有 Web 节点