【问题标题】:Why do you specify a pool in a deployment job in Azure Pipelines?为什么要在 Azure Pipelines 的部署作业中指定池?
【发布时间】:2021-08-24 15:02:52
【问题描述】:

我发现很难掌握 Azure Pipelines 中部署作业和环境的概念。据我了解,deployment job 是将应用程序部署到特定环境的一系列步骤,因此是 environment 字段。

如果是这样,为什么该作业定义的代理池还有pool 定义?

编辑

困扰我的是,据我了解,Environment 是您可以在其上运行应用程序的资源集合。因此,您将为 dev 定义一些,为 stageprod 等定义一些。因此您希望在这些目标上运行作业。那么为什么我们需要指定一个代理池来运行部署作业呢?不应该在属于指定环境的资源上运行吗?

编辑

以这个管道定义为例:


jobs:
  # Track deployments on the environment.
- deployment: DeployWeb
  displayName: deploy Web App
  pool:
    vmImage: 'Ubuntu-16.04'
  # Creates an environment if it doesn't exist.
  environment: 
     name: 'Stage'
     resourceType: VirtualMachine
  strategy:
    # Default deployment strategy, more coming...
    runOnce:
      preDeploy:
        steps:
        - script: echo "Hello"
      deploy:
        steps:
        - checkout: self 
        - script: echo my first deployment

我有一个名为“Stage”的环境,上面有一个虚拟机。

当我运行它时,我可以看到两个作业都在我的 VM 上运行

指定的代理池根本没有使用。

但是,如果我以另一个没有机器的环境为目标,它将在 Azure Pipelines vm 上运行

【问题讨论】:

  • 由于这不是一个真正的编程问题,它可能更适合DevOps

标签: azure-devops azure-pipelines


【解决方案1】:

为什么要在 Azure Pipelines 的部署作业中指定池?

因为环境是资源的集合,您可以通过管道部署来定位这些资源。

换句话说,它就像托管我们私有代理的机器,但它现在可以是虚拟环境,如 K8s、VM 等。

当我们指定一个环境时,它只提供给我们一个虚拟环境(你可以把它想象成一台机器)。但是,这些虚拟环境中并没有安装代理供我们运行管道,所以我们需要指定一个代理来运行管道。

例如,我们在本地机器上执行我们的管道,我们仍然需要创建我们的私有代理,否则,我们只有目标环境,但没有托管管道运行的代理。

【讨论】:

  • 请参考问题的编辑。
  • @YoavKlein,你可能不明白我的回答。确实,Environment 是您可以在其上运行应用程序的资源集合,但如果 Environment 没有安装代理,如何使用 azure pipeline 运行应用程序?就像我说的,如果你在本地机器上运行管道,但机器没有安装任何私有代理,你是如何运行管道的?我们不能只在代理池选项中选择机器名称。
  • 我了解,如果您没有在环境中创建任何资源,您将无法使用它,因为它不存在。我的问题是:在没有定义资源的环境中运行“部署作业”的可能性背后的原因是什么 - 而是在代理池上运行它?我的问题不是技术问题
  • @YoavKlein,如果环境没有定义资源。这个没什么实际意义,job还是直接在agent pool上运行,但是pipeline会有Environments好处:docs.microsoft.com/en-us/azure/devops/pipelines/process/…
【解决方案2】:

environment 字段表示部署工件的目标环境。通常有多个环境,例如工件流经的环境,例如development -> test -> production。 Azure DevOps 使用此字段来跟踪哪些版本部署到了哪些环境等,来自docs

环境是您可以定位的资源集合 从管道部署。环境名称的典型示例是 开发、测试、质量保证、登台和生产。

pool 是对代理池的引用。代理是执行作业内部逻辑的机器。例如,一个部署作业可能有几个逻辑步骤,例如脚本、文件复制等。所有这些逻辑都在来自代理池的代理上执行。来自docs

要使用 Azure Pipelines 构建代码或部署软件,您 至少需要一名代理。随着您添加更多代码和人员,您将 最终需要更多。

当您的管道运行时,系统会开始一项或多项作业。 代理 是安装了运行代理软件的计算基础设施 一次一份工作。

【讨论】:

  • 根据经验,一旦我指定了environment(假设此环境中至少有一个资源),整个作业将在那里执行。那么指定池代理有什么意义呢?
  • 不,poolenvironment 是两个不相关的概念。作业逻辑在pool agent 上执行。 Environments 是表示目标环境的抽象概念。部署作业本身environment 上运行,它在poolagent 上运行其逻辑,它在environment 中准备或安装东西
  • 你可以去试试。在一个环境中创建一个或多个 VM 资源,运行针对该环境的作业,您会看到它在属于该环境的所有 VM 上运行
  • 它将 池代理 for属于该环境的所有VM >。您能否分享您希望我尝试的管道的 yaml 定义,它可能会消除一些混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2018-02-16
  • 2018-07-07
  • 2020-07-27
  • 2019-10-09
相关资源
最近更新 更多