Azure Devops yaml:发布到多个 Web 节点

Pau*_*ugt 5 yaml azure-pipelines multistage-pipeline

我试图弄清楚如何使用 yaml 管道将应用程序部署到多网络节点环境。

我正在尝试创建一个具有 2 个阶段的管道。阶段 1 将构建项目,阶段 2 将其部署到暂存环境。这个登台环境(目前)有 2 个网络节点。我不想对要部署到我的管道中的实际机器进行硬编码。所以我想我会添加一个变量组,其中包含一个包含要部署到的 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)
Run Code Online (Sandbox Code Playgroud)

部署.yaml:

parameters:
  nodes: []

jobs:
- ${{ each node in parameters.nodes }}:
  - job: ${{ node }}
    displayname: deploy to ${{ node }}
    pool: Saas Staging
      demands: ${{ node }}
    steps:
    - template: DeployToNode.yaml
Run Code Online (Sandbox Code Playgroud)

编辑:

我更接近解决方案。通过对 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
Run Code Online (Sandbox Code Playgroud)

这使它好一点。但是,我仍然不想在我的管道 yaml 源中定义“节点”参数,而是在变量组中(或其他地方,如果有人有好的建议)