如何解决免费套餐中的“未购买或授予任何托管并行性”?

ctw*_*twx 67 azure-devops azure-pipelines

我刚刚开始使用 Azure DevOps 管道,并使用 Maven 任务创建了一个非常简单的管道。现在我不关心并行性,并且不确定以何种方式将其添加到我的管道中。有没有办法在免费层上使用 Maven 任务而无需并行?

这是我的管道:

 trigger:
 - master
    
 pool:
   vmImage: ubuntu-latest
    
 steps:
 - task: Maven@3
Run Code Online (Sandbox Code Playgroud)

我的想法是任务总是并行的?除此之外我看不出并行步骤在哪里。

Krz*_*tof 70

首先 - 任务总是按顺序执行。1 个顺序管道被记录为“1 个并行代理”,是的,命名可能会更好。由于下面列出的更改,新帐户现在可以获得零个并行代理,并且必须手动请求才能获得之前默认的 1 个并行管道和免费构建分钟数。

看看这个

我们暂时禁止为公共项目和新组织中的某些私人项目免费提供并行工作。但是,您可以通过提交请求来请求这笔资助。现有组织和项目不受影响。请注意,我们需要 2-3 个工作日才能回复您的免费套餐请求。

有关这些限制为何发挥作用的更多背景信息:

太长了;人们使用自动化来启动 1000 个 Azure DevOps 组织,添加管道并使用该服务发送垃圾邮件、挖掘比特币或用于其他邪恶目的。事实上,他们可以免费、快速且无需任何人工干预地完成此任务,这对团队来说是一种负担。事实证明,自动检测恶意行为非常困难,并且变成了一场无休止的猫鼠游戏。手动步骤是一种必要的罪恶,它已经制止了这种滥用行为,并且绝不意味着迈向服务进一步货币化的一步。这实际上是为了确保免费套餐仍然可以提供给像你我这样的真实的人,

  • @TomW 所以本质上没有办法在不填写表格的情况下使用免费层上的管道?我只是想在更彻底地使用它们之前测试它们。 (7认同)
  • 当您意识到每个作业(包括第一个作业(免费且默认包含在 DevOps 计划中,直到最近,正如文档提到的)被称为“并行作业”时,这个答案就更容易理解了,即使只有一个作业只允许一个管道一次运行。无论您有多少并行作业,管道中的所有任务都会按顺序运行。 (6认同)
  • 我同意,这太可怕了。我为一个平面网站设置了一个全新的存储库,发布的只是到 blob 容器的文件副本。它没有说它需要增加并行性。完全荒谬。 (5认同)
  • 这看起来确实像是取消免费套餐的前兆。令人失望。如果 MS 正在采取措施通过其免费套餐获利,我当然不会在任何开源项目中使用或推荐 Azure Pipelines。 (4认同)
  • @ctwx 这个答案中提到的限制对我来说是新的,我使用过的每个 DevOps 租户都有包含的免费工作。您还可以[自行托管代理](https://learn.microsoft.com/en-us/learn/modules/host-build-agent/) (2认同)
  • 他们决定这样做是因为它被用于采矿。我知道这很痛苦,但工具本身仍然很好。因此,也许值得写一封电子邮件并请求 ublokcing 并行性。如果没有,你可以考虑 gitihub actions,但现在 MS 也是这个的所有者。在一些dergee工具中是类似的。 (2认同)
  • 人们自动启动新的 Azure DevOps 帐户、添加管道来开始挖掘并对一堆作业进行排队。基本上是滥用免费托管代理。他们尝试了多种方法来检测挖矿代理并阻止它们与主机接触,但这变成了一场无休止的猫鼠游戏。为了维持所有真正的免费和付费用户的服务水平,他们添加了这一一次性人工验证步骤。这个小坎已经解决了服务端的大部分问题。 (2认同)

Dig*_*ity 37

这是荒谬的。“免费套餐”并不完全免费,除非您再次请求!

最佳选择:使用自托管池。它可以是您想要运行测试的笔记本电脑。

MS azure 文档在这里

在此输入图像描述

并在 YAML 文件中使用上面的池

pool: MyPool
Run Code Online (Sandbox Code Playgroud)

或者

请求访问 MS:

亲们,可以在这里索取。通常,它会在一两天内获得批准。

##[error]No hosted parallelism has been purchased or granted. To request a free parallelism grant, please fill out the following form https://aka.ms/azpipelines-parallelism-request
Run Code Online (Sandbox Code Playgroud)


Pét*_*ási 11

扩展@Digital_Reality 答案。

免费赠款终止

Microsoft 禁止为公共项目和新组织中的某些私人项目免费授予并行作业。因为用户滥用(例如加密挖掘)免费的计算资源。1

您可以通过两种方式解决该问题:

  1. 通过提交https://aka.ms/azpipelines-parallelism-request表单来请求免费赠款。
  2. 创建自托管代理。

申请免费赠款通常需要两到三天的时间。如果您不想等待请求批准,您可以创建自己的自托管代理。

创建自托管代理

要创建自托管代理,请转到“项目设置”并选择“管道”部分下的“代理池”选项。按添加池按钮并配置代理:

  • 选择池类型为自托管
  • 添加描述性池名称(在此示例中my-personal-computer
  • 选中管道权限框,这样您就不需要手动授予权限
  • 单击创建按钮

在此输入图像描述

现在,导航到新创建的代理。在右上角,按“新代理”按钮。您可以创建 Windows、macOS 和 Linux 代理。根据您的计算机选择适当的操作系统,然后按照说明进行操作:

  1. 解压存档:下载代理,然后将其解压到文件夹中

  2. 配置代理:运行配置脚本并选择默认设置:

    • 服务器 URL:复制并粘贴组织 URL,如下所示https://dev.azure.com/<my-organization-name>
    • 个人访问令牌 (PAT):转到“用户设置”图标下的“个人访问令牌”选项。确保您生成的 PAT 具有对代理池的 读取和管理访问权限在此输入图像描述
    • my-personal-computer代理池名称:新创建的池,在我们的例子中是
    • 代理名称:给出一个有意义的名称(例如Windows-Agent)或保留默认值
    • 工作文件夹:按 Enter 键获取默认值
    • 代理即服务:按 Enter 键获取默认值
  3. 运行代理:执行运行脚本

完成后,您可以在Agents面板下看到 Agent 已启动并正在运行。

在此输入图像描述

自托管代理连接到 Azure DevOps 并侦听新作业。

注意:如果您在代理配置期间创建服务,则无需手动运行代理。

配置管道

最后一步是更新管道以使用最近创建的代理。转到管道并选择您的管道。单击“编辑”并将该pool: <my-selfhosted-agent>部分添加到配置文件中。这是一个azure-pipeline.yml文件示例:

trigger:
- main

pool: my-personal-computer
strategy:
  matrix:
    Python36:
      python.version: '3.6'
    Python37:
      python.version: '3.7'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '$(python.version)'
  displayName: 'Use Python $(python.version)'

- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  displayName: 'Install dependencies'

- script: |
    pip install pytest pytest-azurepipelines
    pytest
  displayName: 'pytest'
Run Code Online (Sandbox Code Playgroud)

它将进入池并选择一个可用的代理。我们只有一个代理,因此它会选择它并在其上运行各种作业。您可以进入自托管代理文件夹并从该_work目录获取日志。您还可以在 Azure DevOps 上查看作业的输出。


use*_*182 10

如果您使用带有 Gatekeeper 的 MacOS 最新版本,对于不知情的人来说,这种“安全增强”是一个严重的 PITA,因为您会遇到数百个错误,其中每个被拒绝的程序集都必须在安全性中手动允许。

不要那样做。

从 DevOps 下载代理文件后,在解压缩该文件之前,请对其运行此命令。这将删除触发错误的属性,并允许您不间断地继续。

xattr -c vsts-agent-osx-x64-V.v.v.tar.gz  ## replace V.v.v with the version in the filename downloaded.

# then unpack the gzip tar file normally:

tar xvfz vsts-agent-osx-x64-V.v.v.tar.gz
Run Code Online (Sandbox Code Playgroud)

以下是您需要运行的所有步骤,包括上述步骤,以便您可以克服“托管并行性”问题并立即继续测试,无论是在等待授权还是完全跳过它。

  1. 转到项目设置 -> 代理池

  2. 创建新的代理池,将其命名为“本地”(随意命名,或者您也可以在默认代理池中执行此操作)

  3. 添加新代理并按照说明进行操作,其中包括下载适合您的操作系统(此处为 MacOS)的代理。

  4. 运行xattr -c vsts-agent-osx-x64-V.v.v.tar.gz下载的文件以消除 Gatekeeper 安全问题。

  5. 解压存档文件tar xvfz vsts-agent-osx-x64-V.v.v.tar.gz

  6. cd进入存档目录并输入./config.sh这里最重要的配置选项是服务器 URL,https://dev.azure.com/{organization name}其余的都可以使用默认值。继续,直到返回命令提示符。此时,如果您要在新代理池或默认(取决于您放置的位置)中查看 DevOps 内部,您将看到新代理处于“离线”状态,因此运行:

  7. ./run.sh这将使您的代理上线。您的代理现在正在运行并监听您开始工作。请注意,这会占用您的终端窗口。

  8. 最后,在管道 YAML 文件中,通过指定自托管代理所在的代理池的名称,将作业配置为使用本地代理,如下所示:

    trigger:
    - main
    
    pool:
      name: local
    #pool:
    #  vmImage: ubuntu-latest
Run Code Online (Sandbox Code Playgroud)


小智 5

最简单的解决方案是将项目从公共更改为私有,以便您可以使用免费池。私有项目默认有一个空闲池。

考虑按照其他建议在您的计算机上使用自托管池。

这是账单页面。 在此输入图像描述

  • 我不相信这对每个人都有效。好像被禁用了 (4认同)
  • 截至 2022 年 10 月,也许更早,他们禁止在不填写表格的情况下免费使用任何 Azure 提供的跑步者。 (3认同)