问题标签 [azure-devops-self-hosted-agent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
154 浏览

azure-pipelines-release-pipeline - 为什么 Azure 代理作业中的 åäö appcmd list 失败?

我们有一个 Azure DevOps 发布管道,它执行“管理 IIS 网站”任务以在 Windows 2016 服务器上创建或更新站点 + 应用程序池,英文版。

应用程序池和站点的名称包含“ö”。这之前运行良好,但是在将(虚拟)服务器迁移到新的托管服务提供商(包括从 VMware 转换为 Hyper-V)之后,它失败了。

问题是,appcmd list正确且成功地列出了现有应用程序池/站点的命令输出没有被代理正确解释,因此它没有“看到”应用程序池/站点已经存在,并尝试添加/创建它而不是更新现有的。后续appcmd add命令失败,因为应用程序池/站点已存在。

我尝试将应用程序池重命名为“o”而不是“ö”,然后它可以工作(对于应用程序池),所以很明显这是问题所在。

从此状态的日志(匿名):

我能做些什么来修复它?

我们确实想像以前一样使用瑞典名字。我确实明白使用 aao 而不是 åäö 会让我启动并运行,但这是一种解决方法而不是修复方法。

是否有可以在 Windows、Azure 代理、管道、PowerShell 中更改的设置...?

0 投票
2 回答
128 浏览

docker - 由于 COPY node_modules,Docker 在 azure 中构建 -> 在相同代码库上存在较大差异。本地运行没有差异

我有一个 Azure Devops 管道,它构建将在不同的 IoT-Edge 设备上运行的 docker 映像。这些设备的互联网连接非常糟糕,因此较小的 docker diff 大小至关重要。

代码库由一个打字稿 nodejs 服务器(因此yarn build)组成,它需要需要使用 make gcc 等构建的 node_modules。

当我在我的机器上本地运行 docker 构建过程时,docker 使用以前构建的中间层,因此使用时的差异docker history <image_id>只有 700kb。(实际的代码库)。我在yarn install从缓存中获取的构建日志中看到,因此层哈希变得相同。

在 azure 中构建图像时,差异变为 90MB。(复制了整个 node_modules)我从每个图像中提取了 node_modules,并比较了每个文件夹中所有文件的哈希值,并HashMyFiles.exe比较了 SHA-1 和 SHA-256。

但是未压缩的 tar 散列并不相同,请参阅这篇关于 docker 层如何散列的帖子:Docker 如何计算每个层的散列?它是确定性的吗?


所以问题是,在 azure 中构建图像时,如何避免每次代码更改都拉取整个 node_modules。


我们讨论过的一种解决方案是使用我们想要的 node_modules 构建一个 docker node-image preinstall。但这不是首选,并且在更改模块时需要额外的工作。

来自 azure 中构建的两个相同代码库的 Docker 历史记录: 1

2

我的 Dockerfile,我尝试了多个 dockerfile,有和没有多阶段构建,结果相同。Azure 在下载图像时给出了很大的差异:

.dockerignore


编辑+临时解决方案

我们最终做了一个自托管的构建代理,它有点贵,但我们获得了更快的构建时间和每个操作的正确缓存。最重要的是,我们获得了更小的下载大小。

我不确定为什么每次我们在每个操作上运行构建时 docker build 都会给出一个新的哈希值。

如果哈希相同,构建时间仍然会很慢,因为 azure 构建代理每次都从干净的机器开始。

0 投票
1 回答
386 浏览

docker - Azure DevOps 同一代理 (VM) 上的多个 Docker 容器

我必须在 VM 上使用 Azure DevOps 代理,因为该 VM 位于特殊网络中(因此不能使用 AKS 等)

VM 已安装 Docker,并且管道具有指定容器的作业

如何在同一个 VM(代理)上执行多个 Docker 容器以并行运行作业

0 投票
1 回答
487 浏览

azure-devops - 远程安装自托管代理并希望使其成为活动代理并需要关联它以构建管道

我正在尝试使用 ARM 模板和部署组在虚拟机上远程创建自托管 Windows 私有代理。我创建了 ARM 模板,它将成功地将 Team Services Agent 添加为现有 Windows VM 的扩展,并且可以看到它作为目标添加到 Azure DevOps 部署组中,并且它也在线,但是我看不到Azure DevOps 中任何代理池下的代理。现在我需要将该代理关联到我的构建管道以从该自托管代理执行构建?

PS 注意:我采用这种方法的原因是,我的客户不推荐使用 powershell 将代理添加为自定义脚本和代理安装或使用运行命令执行脚本。因为基本上这些方法需要将主脚本存储在存储帐户中 - 所以我们可以使用 SAS 来调用和执行它们,但不推荐使用 SAS 本身。

我几乎尝试了所有远程自动安装代理的方法。 我应该在现有 VM 上远程安全地安装自托管 Windows 代理,而无需登录到 VM,并且该代理应该成为活动代理,以便我可以将该代理与我的构建管道相关联。

任何建议都会有所帮助。谢谢。

0 投票
0 回答
210 浏览

android - 在 azure devops 管道上运行的托管计算机上的 telnet

这是我的问题的详细信息:

我想要达到的目标:

在 azure DevOps 上创建一个管道,包含任务

  1. 创建具有完整互联网条件的android模拟器
  2. 运行一些测试
  3. 连接远程登录
  4. 将 telnet 连接到 android 控制台端口-向 android 设备发送命令以将网络条件更改为低带宽,如此处所述(https://developer.android.com/studio/run/emulator-console

注意:我已经托管了 MacOS,还安装了 telnet+expect 和 spawn

问题是什么:

  1. 我的 android 设备在 5037 端口上运行

  2. telnet 任务输出显示“telnet 连接到本地主机”我用来连接到 android 控制台端口的命令是:telnet localhost 5037(在命令行任务中)

  3. 转义字符是“^]”**

  4. 它没有向我显示任何需要身份验证的消息或确定,所以我可以继续它,我也在尝试发送类似期望“^]”的命令,什么也没给我

** 我想运行模拟器 -netspeed gsm @Pixel_API_26 请帮忙

0 投票
1 回答
186 浏览

windows - 从 Docker 容器访问 Windows 文件共享(域)中的人工制品

所以....

我想知道是否有人能够帮助我解决这个问题?

基本上,我创建了一个自托管的 docker 容器,用作构建代理(Azure DevOps)

现在我已经开始测试代理,由于我们的放置文件夹位于 Windows 文件共享(已加入域)上,因此我无法将人工制品发布到目的地

是否有人能够阐明我如何能够访问此文件共享以从构建中删除人工制品并能够在发布阶段下载它们?

我们使用本地 TFS Azure DevOps 而不是 Azure DevOps Services :(

TIA,

更新

最后,我能够解决这个问题。

我为解决这个问题所做的是在域控制器上创建了一个 gMSA 帐户,然后在托管 docker 容器的机器上创建了一个 credspec 文件,最后我使用以下命令运行了容器docker run --security-opt "credentialspec=file://<credspecfilename>.json" --hostname <hostname> -it <Image-name> PowerShell

容器启动并运行后,我可以通过运行以下命令来确认目录是否可用dir <server>\\<share>- 此外,我必须确保新创建的 gMSA 帐户具有共享权限。

所以我继续将容器加入到我们的 DevOps 服务器的代理池中,然后我运行了一个测试构建。正如预期的那样,我能够从我们的本地加入域的服务器中提取/发布人工制品。

再次感谢大家在这个问题上帮助我。

0 投票
2 回答
53 浏览

azure - 无法安装 botskills 命令

无法在自托管 Azure 代理上安装 npm botskills 命令。

使用以下命令安装软件包得到更新,但是当尝试使用“botskills”命令检查时,它会抛出错误,说 botskills 不可用。

截图

使用“ npm install -g botskills@latest ”安装包,以下屏幕截图推断 botskill 包已更新。

图片

但是当尝试使用更新的包时它不起作用

图片

所有其他支持包都已更新。

仅在使用自托管代理(Windows 代理)时会出现此问题,并且在本地没有问题。

重现步骤 1) 使用任何 Microsoft 自托管代理。2)尝试使用以下命令安装 botkskills npm install -g botskills@latest (按照随附的屏幕截图) 3)尝试使用 botskills 验证软件包是否可用。

0 投票
2 回答
611 浏览

azure-pipelines - 使用两个自托管 Azure 管道代理以并行模式发布工件

我在 Azure Pipelines 中有一个构建管道,其中包含几个阶段。语言——C#、.Net Core 3.1/.Net Framework 4.7 在管道的第一阶段,构建了整个解决方案,并运行了单元和集成测试。在接下来的阶段,不同的微服务和 API 的单独部分将作为单独的工件发布并下载到 Azure。所有这些东西都在自托管的构建代理上运行。

我试图在测试后并行化这些阶段。逻辑是在这些阶段没有完成构建,只完成了简单的文件复制和归档。为此,我在一台计算机上从同一个池中运行了两个不同的构建代理。代理使用与他们的工作文件夹相同的本地文件夹。但是当我尝试运行构建管道时,代理开始争夺资源。构建工件的文件夹问题已解决,但不是唯一的问题。例如,两个代理都试图在 _temp 文件夹中创建/删除相同的临时文件。在这种情况下,一项任务因以下错误而失败:

此外,另一种奇怪的错误开始发生。错误的文本类似于下面的屏幕截图: 一个奇怪的错误文本

我想,两个代理之间的冲突导致了这些错误。

为代理使用两个不同的工作文件夹似乎不是最好的解决方案,因为在这种情况下,一个代理将无法访问在第一阶段构建的文件。

有没有人在同一台机器上运行两个 Azure Pipelines 代理来处理一个管道的成功经验?

0 投票
3 回答
157 浏览

azure - 是否可以在 Azure DevOps 代理池中的所有现有代理之间分散管道负载?

我们在 AKS 群集上创建了自己的自托管代理。

我们有 3 个副本,使用 StatefulSet 挂载持久卷 (PV) 以使用 docker 的缓存。这意味着这/var/lib/docker是每个副本上的挂载。

直到一切正常。

但是,它似乎完成了agent-0大部分工作,而工作量却agent-1减少了agent-2。这会导致一个问题,PV-0几乎使用它的全部容量并且PV-1不是PV-2

有没有办法控制 Azure DevOps 的管道,以便负载将在代理之间分散,而不是总是使用agent-0

0 投票
3 回答
4287 浏览

python - 将 Python 安装到自托管的 Windows 构建代理

我已经安装了 Windows 代理,我需要能够运行 Python 脚本。我知道我需要安装 Python,但我不知道如何安装。

我将标准安装中的 Python 文件添加到

重新启动代理,但现在呢?如何将其放入功能中?我错过了什么?

编辑:我需要运行这个 YAML 任务