通过 Terraformed 规模集的 Azure DevOps Pipelines 代理池
Azure DevOps Pipelines Agent Pool via Terraformed Scale Set
我的任务是创建一个基于 Linux 的规模集,以便在 Terraform 中与 Azure DevOps Pipelines 一起使用。
我已经为基础设置了一切;但是,当我单击 DevOps 项目 Agent pools 区域中的 Agents 选项卡时,我收到消息:
No agents are connected
Azure virtual machine scale set agents will appear here when they are created.
我假设我需要使用 these instructions.
安装代理
到目前为止我做了什么:
- 使用 azurerm_linux_virtual_machine_scale_set 对我的 Azure 规模集进行 Terraform - 我正在使用 UbuntuServer 18.04-LTS
- 添加CustomScript extension via azurerm_virtual_machine_scale_set_extension
- 传入从 Terraform
中的文件读取的自定义 commandToExecute
参数
- 在我的 DevOps 项目中,添加一个新的代理池,它使用创建的规模集
在我的自定义脚本中,我有 Linux 代理的基本下载和解包:
mkdir azure-agent
curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts-agent.tar.gz
tar -zxf vsts-agent.tar.gz -C azure-agent
根据说明,我需要 运行 config.sh
交互式脚本。
我的问题是:
- 有没有比运行使用自定义脚本安装代理更好的方法?
- 如果没有更好的方法来执行此操作,我如何在不 运行 宁
config.sh
脚本的情况下将代理所需的数据获取到 VM 中?
我查看了 az vm extension image list --output table
的输出,除了 Microsoft.Azure.Monitor
扩展集外没有看到任何东西,这似乎不是我想要使用的,我没有'看不到任何标有“vsts”的东西。使用 az vm image list --all
也没有发现任何我注意到的东西。
更新 1
经过一番尝试,我找到了 Microsoft.VisualStudio.Services.TeamServicesAgentLinux
v1.21,其中包含一些基本设置:
settings = jsonencode({
"isPipelinesAgent" = true
"agentFolder" = "/agent"
"agentDownloadUrl" = "https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz"
"enableScriptDownloadUrl" = "https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/6/enableagent.sh"
})
这仍然没有为 config.sh
脚本在 运行.
时要求的选项提供选项
更新 2
我听从了@Joy 的建议,并能够验证我创建的脚本 运行 是否成功。如果我通过 SSH 连接到 VM 并执行它,它看起来像这样并且功能正常:
set -e
sudo apt-get update
sudo apt install -y jq apt-transport-https ca-certificates curl gnupg lsb-release python3 python3-pip
sudo apt install -y liblttng-ust0 libkrb5-3 zlib1g
sudo apt install -y libssl1.1 || \
sudo apt install -y libssl1.0.2 || \
sudo apt install -y libssl1.0.0
sudo apt install -y libicu67 || \
sudo apt install -y libicu66 || \
sudo apt install -y libicu63 || \
sudo apt install -y libicu60 || \
sudo apt install -y libicu57 || \
sudo apt install -y libicu55 || \
sudo apt install -y libicu52
# download the Azure script & run the setup
if [[ -d vsts-install ]]; then
rm -Rf vsts-install
fi
mkdir vsts-install
cd vsts-install
curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts.tgz
tar -zxf vsts.tgz
./config.sh --unattended \
--url https://dev.azure.com/MyOrganization \
--auth pat \
--token "MY_TOKEN" \
--pool TerraformedDevOpsPool \
--replace
sudo ./svc.sh install || true
sudo ./svc.sh stop || true
sudo ./svc.sh start
问题是当我在我的节点池中设置它时,它没有执行。我正在通过这个 Terraform 配置来做到这一点:
resource "azurerm_virtual_machine_scale_set_extension" "pipeliens_vms_custom_script" {
name = "TestingExtension"
virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.pipelines_vms.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = jsonencode({
"commandToExecute" = file(abspath("./scripts/pipelinesVmStartupScript.sh"))
})
}
我只需要弄清楚如何从脚本中查看失败或弄清楚为什么它没有按我期望的方式启动。
更新 3
切换到这个 运行s:
resource "azurerm_linux_virtual_machine_scale_set" "pipelines_vms" {
...
custom_data = base64encode(file(abspath("./scripts/pipelinesVmStartupScript.sh")))
只需要找出 config.sh
运行 失败的原因。
更新 4
脚本失败:
Must not run with sudo
我将在脚本中创建一个用户并将其 运行 作为该用户。这应该可以解决问题。
所以没有其他人需要经历这种痛苦。
custom_data
部分非常有效。
这是我需要的脚本 运行:
#!/bin/sh
set -e
sudo apt-get update
sudo apt install -y jq apt-transport-https ca-certificates curl gnupg lsb-release
sudo apt install -y liblttng-ust0 libkrb5-3 zlib1g
sudo apt install -y libssl1.1 || \
sudo apt install -y libssl1.0.2 || \
sudo apt install -y libssl1.0.0
sudo apt install -y libicu67 || \
sudo apt install -y libicu66 || \
sudo apt install -y libicu63 || \
sudo apt install -y libicu60 || \
sudo apt install -y libicu57 || \
sudo apt install -y libicu55 || \
sudo apt install -y libicu52
sudo addgroup vsts
sudo useradd -s /bin/bash -d /home/vsts -m -g vsts vsts
sudo usermod -aG sudo vsts
sudo mkdir /vsts-install
cd /vsts-install
sudo curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts.tgz
sudo tar -zxf vsts.tgz
sudo chown -R vsts:vsts /vsts-install
sudo su -c "./config.sh --unattended --url https://dev.azure.com/${MY_ORGANIZATION} --auth pat --token ${MY_INJECTED_TOKEN} --pool ${MY_POOL_NAME} --replace 2>&1 | tee /tmp/CONFIG_LOG" vsts
sudo ./svc.sh install || true
sudo ./svc.sh stop || true
sudo ./svc.sh start
cd ..
我的任务是创建一个基于 Linux 的规模集,以便在 Terraform 中与 Azure DevOps Pipelines 一起使用。
我已经为基础设置了一切;但是,当我单击 DevOps 项目 Agent pools 区域中的 Agents 选项卡时,我收到消息:
No agents are connected Azure virtual machine scale set agents will appear here when they are created.
我假设我需要使用 these instructions.
安装代理到目前为止我做了什么:
- 使用 azurerm_linux_virtual_machine_scale_set 对我的 Azure 规模集进行 Terraform - 我正在使用 UbuntuServer 18.04-LTS
- 添加CustomScript extension via azurerm_virtual_machine_scale_set_extension
- 传入从 Terraform 中的文件读取的自定义
- 在我的 DevOps 项目中,添加一个新的代理池,它使用创建的规模集
commandToExecute
参数
在我的自定义脚本中,我有 Linux 代理的基本下载和解包:
mkdir azure-agent
curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts-agent.tar.gz
tar -zxf vsts-agent.tar.gz -C azure-agent
根据说明,我需要 运行 config.sh
交互式脚本。
我的问题是:
- 有没有比运行使用自定义脚本安装代理更好的方法?
- 如果没有更好的方法来执行此操作,我如何在不 运行 宁
config.sh
脚本的情况下将代理所需的数据获取到 VM 中?
我查看了 az vm extension image list --output table
的输出,除了 Microsoft.Azure.Monitor
扩展集外没有看到任何东西,这似乎不是我想要使用的,我没有'看不到任何标有“vsts”的东西。使用 az vm image list --all
也没有发现任何我注意到的东西。
更新 1
经过一番尝试,我找到了 Microsoft.VisualStudio.Services.TeamServicesAgentLinux
v1.21,其中包含一些基本设置:
settings = jsonencode({
"isPipelinesAgent" = true
"agentFolder" = "/agent"
"agentDownloadUrl" = "https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz"
"enableScriptDownloadUrl" = "https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/6/enableagent.sh"
})
这仍然没有为 config.sh
脚本在 运行.
更新 2
我听从了@Joy 的建议,并能够验证我创建的脚本 运行 是否成功。如果我通过 SSH 连接到 VM 并执行它,它看起来像这样并且功能正常:
set -e
sudo apt-get update
sudo apt install -y jq apt-transport-https ca-certificates curl gnupg lsb-release python3 python3-pip
sudo apt install -y liblttng-ust0 libkrb5-3 zlib1g
sudo apt install -y libssl1.1 || \
sudo apt install -y libssl1.0.2 || \
sudo apt install -y libssl1.0.0
sudo apt install -y libicu67 || \
sudo apt install -y libicu66 || \
sudo apt install -y libicu63 || \
sudo apt install -y libicu60 || \
sudo apt install -y libicu57 || \
sudo apt install -y libicu55 || \
sudo apt install -y libicu52
# download the Azure script & run the setup
if [[ -d vsts-install ]]; then
rm -Rf vsts-install
fi
mkdir vsts-install
cd vsts-install
curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts.tgz
tar -zxf vsts.tgz
./config.sh --unattended \
--url https://dev.azure.com/MyOrganization \
--auth pat \
--token "MY_TOKEN" \
--pool TerraformedDevOpsPool \
--replace
sudo ./svc.sh install || true
sudo ./svc.sh stop || true
sudo ./svc.sh start
问题是当我在我的节点池中设置它时,它没有执行。我正在通过这个 Terraform 配置来做到这一点:
resource "azurerm_virtual_machine_scale_set_extension" "pipeliens_vms_custom_script" {
name = "TestingExtension"
virtual_machine_scale_set_id = azurerm_linux_virtual_machine_scale_set.pipelines_vms.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = jsonencode({
"commandToExecute" = file(abspath("./scripts/pipelinesVmStartupScript.sh"))
})
}
我只需要弄清楚如何从脚本中查看失败或弄清楚为什么它没有按我期望的方式启动。
更新 3
切换到这个 运行s:
resource "azurerm_linux_virtual_machine_scale_set" "pipelines_vms" {
...
custom_data = base64encode(file(abspath("./scripts/pipelinesVmStartupScript.sh")))
只需要找出 config.sh
运行 失败的原因。
更新 4
脚本失败:
Must not run with sudo
我将在脚本中创建一个用户并将其 运行 作为该用户。这应该可以解决问题。
所以没有其他人需要经历这种痛苦。
custom_data
部分非常有效。
这是我需要的脚本 运行:
#!/bin/sh
set -e
sudo apt-get update
sudo apt install -y jq apt-transport-https ca-certificates curl gnupg lsb-release
sudo apt install -y liblttng-ust0 libkrb5-3 zlib1g
sudo apt install -y libssl1.1 || \
sudo apt install -y libssl1.0.2 || \
sudo apt install -y libssl1.0.0
sudo apt install -y libicu67 || \
sudo apt install -y libicu66 || \
sudo apt install -y libicu63 || \
sudo apt install -y libicu60 || \
sudo apt install -y libicu57 || \
sudo apt install -y libicu55 || \
sudo apt install -y libicu52
sudo addgroup vsts
sudo useradd -s /bin/bash -d /home/vsts -m -g vsts vsts
sudo usermod -aG sudo vsts
sudo mkdir /vsts-install
cd /vsts-install
sudo curl -sSL https://vstsagentpackage.azureedge.net/agent/2.187.2/vsts-agent-linux-x64-2.187.2.tar.gz --output vsts.tgz
sudo tar -zxf vsts.tgz
sudo chown -R vsts:vsts /vsts-install
sudo su -c "./config.sh --unattended --url https://dev.azure.com/${MY_ORGANIZATION} --auth pat --token ${MY_INJECTED_TOKEN} --pool ${MY_POOL_NAME} --replace 2>&1 | tee /tmp/CONFIG_LOG" vsts
sudo ./svc.sh install || true
sudo ./svc.sh stop || true
sudo ./svc.sh start
cd ..