Azure VM代理

ID:Azure-VM-Agents

重要的:此插件由Jenkins Community维护,并不会由Microso必威国际有限公司ft截至2024年2月29日的。

在A必威国际有限公司zure虚拟机中创建Jenkins代理的Jenkins插件(通过Azure ARM模板)。

支持功能:

  1. 使用SSH和JNLP的Azure Cloud上的Windows代理
    • 对于通过SSH启动的Windows映像,需要使用SSH预先配置映像。
    • 要准备自定义Windows映像,请参阅Azure文件
  2. 使用SSH实现Azure云上的Linux代理
    • 用于准备自定义Linux映像,请参阅Azure文件

如何安装

您可以在Jenkins更新中心安装/更新此插件(管理Jenkins - >必威国际有限公司 Manage Plugins,搜索Azure VM代理插件)。

如果你想在正式发布之前试用最新的功能,你也可以手动安装插件。手动安装插件:

  1. 克隆回购和构建:
    mvn包
  2. 打开Jenkins 必威国际有限公司Dashboard,转到管理Jenkins - > Manage Plugins。
  3. 进入高级选项卡,在上传插件部分,单击选择文件。
  4. 选择Azure-VM-Agents.hpi目标您的回购文件夹,单击“上载”。
  5. 安装完成后重新启动Jenk必威国际有限公司ins实例。

先决条件

要使用此插件来创建VM代理,首先需要在Jenkins实例中拥有Azure服务主体。必威国际有限公司

  1. 通过创建一个Azure服务主体Azure CLIAzure门户网站
  2. 打开Jen必威国际有限公司kins仪表板,进入凭据,添加一个新的Microsoft Azure服务主体与您刚刚创建的凭据信息。

配置插件

添加一个新的Azure VM代理云

  1. 单击“管理jenkins 必威国际有限公司 - >管理节点和云 - >在左窗格中,单击”配置云“。
  2. 为云提供一个名称(如果你把它空着,插件会为你生成一个,但建议给它一个有意义的名称)。
  3. 通过填写订阅ID,客户端ID,客户端密钥和OAuth 2.0令牌端点,从Azure凭据下拉列表中选择现有帐户或在凭据管理页面中添加新的“Microsoft Azure服务主体”凭据。
  4. 点击“验证配置”以确保配置文件配置正确。
  5. 使用模板配置保存并继续(参见下面的说明)。

添加新的Azure VM代理模板

  1. 单击“添加Azure虚拟机模板”中的“添加”以添加模板。模板用于定义Azure VM代理配置,如其VM大小,区域或保留时间。

  2. 为您的新模板提供有意义的名称和描述。

  3. 提供一个或多个有意义的标签,例如。“Windows”或“Linux”。作业使用标签来确定将选择哪些代理来运行作业,因此请确保给它一个有意义的标签。

  4. 在下拉列表中选择区域和虚拟机大小。

  5. 选择存储帐户类型,可以是Standard_LRS或Premium_LRS。注意,有些虚拟机大小只支持Standard_LRS。

  6. 虚拟机操作系统磁盘存放时,需要指定Azure存储帐户名称或选择已有的存储帐户名称。如果您选择创建一个新插件,但将名称留空,插件将为您生成一个名称。

  7. 在“管理磁盘”(推荐)和“非管理磁盘”中选择磁盘类型。

  8. 选择保留策略

    • 闲置的保留策略。您可以指定保留时间,单位为分钟。这定义了Jenkins在自动删除空闲代理之前可以等待的分钟数。必威国际有限公司如果不希望自动删除空闲代理,请指定0。
    • 池保留策略。这种保留策略帮助您将代理数量维持在特定数量。您可以指定保留时间(以小时为单位)和池大小。
    • 一旦保留策略。这种保留策略确保只使用一个代理一次。

    保留时间是指自业务代表创建后自动删除的小时数。池大小定义要维护的代理池大小。如果您更改了云名称、模板名称或大部分参数(如区域、图片),我们将立即删除现有代理,并根据您的新模板提供新的代理。但如果你只是改变你的留存时间或池大小,我们只会向内或向外扩展,或什么都不为你做。

  9. 选择一个使用选项:

    • 如果选择“尽可能利用此节点”,则Jenkins可以在代理上运行任何可用的作业。必威国际有限公司
    • 如果选择“只有与匹配此节点的标签表达式的构建作业”,则Jenkins将在使用标签表达式的某些节点限制该项目时在此节点上构建项目,并且该表达式与此节点的名必威国际有限公司称和/或标签匹配。这允许为某些类型的工作保留代理。
  10. 选择内置图像,您可以在Windows Server 2016和Ubuntu 16.04 LTS之间进行选择。您还可以选择在代理上安装一些工具,包括Git,Maven和Docker(始终安装JDK)。

  11. 指定管理员凭据(用户名/密码凭据),如果要登录代理VM,则为用户名和密码。

  12. 单击验证模板以确保所有配置正确,然后保存。

在Azu必威国际有限公司re VM agent上运行Jenkins作业

在配置了Azure VM代理模板之后,当您运行一个新的Jenkins作业时,只有在没有可用的执行器时,Jenkins才会自动提供一个新的必威国际有限公司Azure VM。

一个更常见的场景是,您希望限制某些作业总是在特定VM代理而不是Jenkins控制器上运行。必威国际有限公司实现:

  1. 打开您的Jenkin必威国际有限公司s项目,委托,检查“限制该项目即可运行的位置”。
  2. 在“标签表达式”中填写已分配给虚拟机模板的标签。
  3. 保存并运行作业,您将看到作业在VM代理上运行,即使Jenkins控制器是空闲的。必威国际有限公司

有关如何在管道中选择代理,请参阅此医生

使用自定义VM图像

内置映像只有一个干净的Windows或Ubuntu操作系统,并安装了一些工具,如Git和Maven,在某些情况下,你可能想对映像进行更多的定制。使用自定义图像:

  1. 在图像配置中,选择“使用高级映像配置”。

  2. 在两个可能的选项中选择:

    • 使用自定义用户映像(提供映像URL和操作系统类型-注意,您的自定义映像必须在您将要创建代理节点的同一个存储帐户中可用);
    • 通过指定图像参考来使用任何市场图像(通过出版商、报价、sku和版本提供图像参考)。你可以通过查看该图像的ARM模板来获得出版商、报价和sku。
  3. 对于启动方法,选择SSH或JNLP。

    • Linux代理只能通过SSH启动。
    • 可以使用SSH或JNLP启动Windows代理。对于Windows代理,如果启动方法是SSH,那么在Windows代理中检查Pre-Install SSH,或者镜像需要自定义准备并预先安装SSH服务器。

    我们推荐使用SSH而不是JNLP,因为您需要更少的初始化代码并获得更清晰的日志。

    使用JNLP启动选项时,请确保以下内容:

    • 必威国际有限公司Jenkins URL(管理Jenkins - > Configure System - > Jenkins位置)
    • Azure代理需要访问URL,因此确保相应地配置任何相关的防火墙规则。
    • JNLP代理的TCP端口(Manage Jenkins -> Configur必威国际有限公司e Global Security -> Enable Security -> JNLP代理的TCP port)。
    • TCP端口需要可以从使用JNLP启动的Azure代理访问。建议使用固定端口,以便任何必要的防火墙例外都可以实现。

    如果Jenki必威国际有限公司ns控制器运行在Azure上,那么打开一个端点“JNLP代理代理的TCP端口”,如果是Windows,在虚拟机中添加必要的防火墙规则(Run -> firewall.cpl)。

  4. 对于初始化脚本,可提供虚拟机发放后使用的脚本。这允许在代理上安装您需要的任何应用程序/工具。请注意,如果镜像没有预先安装Java,您至少需要安装JRE。我们准备了一个示例脚本,用于Linux通过SSH、Windows通过SSH和Windows通过JNLP。详情请查看帮助按钮。

    如果你打了存储可伸缩性限制对于VHD所在存储帐户上的自定义映像,您应该考虑使用代理的映像临时存储或在多个存储帐户中复制自定义图像,并在同一代理云中使用具有相同标签的多个VM模板。

    更多关于如何准备自定义图像的细节,请参考以下链接:

    初始化脚本应该在20分钟内完成(这个时间可以在Azure Profile Configuration的部署超时设置中配置)。不建议运行复杂的初始化脚本,如果初始化脚本需要很长时间才能完成,则建议使用自定义准备的映像。

高级配置

如果您选择使用高级镜像配置,您可以点击高级按钮,在那里您可以找到更多的虚拟机配置:

  1. 虚拟网络名称,虚拟网络资源组名称和子网名称:默认情况下,VM不属于任何虚拟网络,如果希望VM要在虚拟网络中以进行网络安全性,则可以提供一个。请注意,虚拟网络必须存在。

  2. 使虚拟机代理IP私有:默认情况下,插件将为虚拟机创建一个公共IP,这样它就可以在互联网上公开访问。如果您不希望创建公共IP,请选中此选项。

    使VM代理IP私有可以使VM更安全,但如果您配置为推出代理商使用SSH,Jenkins控制器需要能够访问VM。必威国际有限公司因此,在这种情况下,您还需要指定虚拟网络和子网名称,以便代理和Jenkins主站位于同一子网中。必威国际有限公司

  3. 网络安全组名称:将虚拟机加入网络安全组。

  4. “JVM Options”:指定JVM选项。

  5. executor的数量:指定VM代理可以同时运行的并发构建的数量。

  6. 禁用模板:暂时禁用该模板。

使用“configuration as code”插件配置虚拟机模板

这个插件可以完全配置必威国际有限公司Jenkins配置代码插件

首先使用UI配置插件,然后导出配置并根据需要进行调整

注意:直到凭据支持合并到凭据插件中,您需要安装configuration-as-code-support插入

使用Groovy脚本配置虚拟机模板

建议您使用配置 - 代码自动化插件配置的插件。如果由于某种原因不能这样做,那么可以使用groovy脚本

以下是一个示例Groovy脚本,可创建新的Azure Cloud和VM模板。您可以在管理Jenkins - >脚本控制台中运必威国际有限公司行它。

") .withNewResourceGroupName("") .addNewTemplate() .withName("ubuntu") .withLabels("ubuntu") .withLocation("East US") .withVirtualMachineSize("Standard_DS2_v2") .withNewStorageAccount("") .addNewBuiltInImage() .withBuiltInImageName("Ubuntu 16.14 LTS") .withInstallGit(true) .withInstallMaven(true) .withInstallDocker(true) .endBuiltInImage() .withAdminCredential("") .endTemplate() .build() Jenkins.getInstance().clouds.add(myCloud) ">
//使用内置图像配置云进口com.microsoft.azure.vmagent.builders。*defmyCloud=AzureVMCloudBuilder().withcloudname(yazure.).withazurecredentialsid(<您的Azure凭据ID>) .withNewResourceGroupName (<您的资源组名称>) .addNewTemplate () .withName (ubuntu) .withLabels (ubuntu) .withLocation (美国东部).wirvirtualmachinedeize(standard_ds2_v2.) .withNewStorageAccount (<您的存储帐户名称>) .addNewBuiltInImage () .withBuiltInImageName (Ubuntu 16.14 LTS.) .withInstallGit (真正的) .withInstallMaven (真正的).withinstalldocker(真正的) .endBuiltInImage () .withAdminCredential (<您的管理员凭据ID>.build) .endTemplate () ()必威国际有限公司getInstance()添加(myCloud)
") .addNewAdvancedImage() .withReferenceImage("Canonical", "UbuntuServer", "16.04-LTS", "latest") .withInitScript("sudo add-apt-repository ppa:openjdk-r/ppa -y \n" + "sudo apt-get -y update \n" + "sudo apt-get install openjdk-8-jre openjdk-8-jre-headless openjdk-8-jdk -y") .endAdvancedImage() .withAdminCredential("") .build() def myCloud = new AzureVMCloudBuilder() .withCloudName("myAzure") .withAzureCredentialsId("") .withNewResourceGroupName("") .addToTemplates(firstTemplate) .addNewTemplate() .withName("second-template") .withLabels("windows") .withLocation("Southeast Asia") .withVirtualMachineSize("Standard_DS2_v2") .withNewStorageAccount("") .addNewAdvancedImage() .withReferenceImage("MicrosoftWindowsServer", "WindowsServer", "2016-Datacenter", "latest") .endAdvancedImage() .withAdminCredential("") .endTemplate() .build() Jenkins.getInstance().clouds.add(myCloud) ">
//使用高级图像的Mutli-模板配置云进口com.microsoft.azure.vmagent.builders。*deffirstTemplate=azurevmtemplateBuilder.() .withName (第一模板) .withLabels (ubuntu) .withLocation (美国东部).wirvirtualmachinedeize(standard_ds2_v2.) .withNewStorageAccount (<您的存储帐户名称>) .addNewAdvancedImage () .withReferenceImage (典范Ubuntuserver16.04 lts最新的).withinitscript(Sudo add-apt-repository ppa:openjdk-r/ppa -y\ n+sudo apt-get -y更新\ n+Sudo apt-get install openjdk-8-jre).endAdvanceImage().withadmincredential(<您的管理员凭据ID>) 。建造()defmyCloud=AzureVMCloudBuilder().withcloudname(yazure.).withazurecredentialsid(<您的Azure凭据ID>) .withNewResourceGroupName (<您的资源组名称>) .addToTemplates(firstTemplate) .addNewTemplate() .withName(second-template) .withLabels (窗户) .withLocation (东南亚).wirvirtualmachinedeize(standard_ds2_v2.) .withNewStorageAccount (<您的存储帐户名称>) .addNewAdvancedImage () .withReferenceImage (MicrosoftWindowsServerWindowsServer2016数据中心最新的).endAdvanceImage().withadmincredential(<您的管理员凭据ID>.build) .endTemplate () ()必威国际有限公司getInstance()添加(myCloud)
") .addNewAdvancedImage() .withReferenceImage("Canonical", "UbuntuServer", "16.04-LTS", "latest") .endAdvancedImage() .withAdminCredential("") .build() def myCloud = new AzureVMCloudBuilder() .withCloudName("myAzure") .withAzureCredentialsId("") .withNewResourceGroupName("") .addNewTemplateLike(baseTemplate) .withName("inherit") .withLabels("inherit") .addNewAdvancedImageLike(baseTemplate.getAdvancedImageInside()) .withInitScript("sudo add-apt-repository ppa:openjdk-r/ppa -y \n" + "sudo apt-get -y update \n" + "sudo apt-get install openjdk-8-jre openjdk-8-jre-headless openjdk-8-jdk -y") .endAdvancedImage() .endTemplate() .build() Jenkins.getInstance().clouds.add(myCloud) ">
//继承现有的模板进口com.microsoft.azure.vmagent.builders。*进口com.microsoft.azure.vmagent。*AzureVMAgentTemplatebaseTemplate=azurevmtemplateBuilder.() .withLocation (东南亚).wirvirtualmachinedeize(standard_ds2_v2.) .withStorageAccountType (Premium_LRS) .withNewStorageAccount (<您的存储帐户名称>) .addNewAdvancedImage () .withReferenceImage (典范Ubuntuserver16.04 lts最新的).endAdvanceImage().withadmincredential(<您的管理员凭据ID>) 。建造()defmyCloud=AzureVMCloudBuilder().withcloudname(yazure.).withazurecredentialsid(<您的Azure凭据ID>) .withNewResourceGroupName (<您的资源组名称>) .addNewTemplateLike baseTemplate .withName (继承) .withLabels (继承) .addNewAdvancedImageLike (baseTemplategetAdvancedImageInside ()) .withInitScript (Sudo add-apt-repository ppa:openjdk-r/ppa -y\ n+sudo apt-get -y更新\ n+Sudo apt-get install openjdk-8-jre).endAdvanceImage().endtemplate().build()必威国际有限公司getInstance()添加(myCloud)

本示例只包含了一些生成器参数,请在文件夹中找到所有参数建筑物