Skip to content

Latest commit

 

History

History
353 lines (248 loc) · 15 KB

README_ZH_CN.md

File metadata and controls

353 lines (248 loc) · 15 KB

Alibabacloud ECS plugin

Jenkins Gitter

目录

介绍

该插件实现Jenkins从节点提供机制。在CI / CD方案中,如果您的Jenkins主节点工作量很大,请使用此插件来配置从节点 ECS , 减轻主节点的工作量。

下图说明了jenkins主从机制的工作原理。

Master&Slave Mechanism

用法

前置条件

开始之前,请确保您满足以下要求:

  1. 阿里云账户。 对于国际用户,请参阅 阿里云全球账户
  2. 阿里云 AccessKey/SecretKey 用于API的访问。
  3. Jenkins主服务器:需要运行的Jenkins主服务器,此插件仅预配置从节点,不预配置主节点。

步骤1:为ECS创建密钥对

为了使用SSH隧道与主节点进行通信,预配节点必须有一个密钥对。

1.1 登录到 ECS 控制台

1.2. 导航到“网络和安全性” > “密钥对”菜单

1.3. 生成密钥对 单击“创建SSH密钥对”按钮,根据提示生成密钥,并将生成的密钥对保存为“ .PEM”格式

步骤2:搜索并下载阿里云ECS插件

2.1 登录到您自己的Jenkins控制台。导航到“管理Jenkins”>“管理插件”>“可选插件”菜单

2.2 键入并搜索“Alibaba Cloud ECS”

2.3 安装插件

Alibaba Cloud Credentials Plugin 是必需的,也需要被安装。

步骤3:配置Clouds

3.1 导航到“Configure cloud”菜单

ECS插件安装完成后,导航至“管理Jenkins”>“管理节点和云”>“配置云”菜单

3.2 添加新云(Add a new Cloud)

选择 "Alibaba Cloud ECS"

3.3 配置云“Name”

必须使用名称来标识云。

3.4 勾选“Jenkins Master In Private Network”

当前Jenkins Master是否部署在VPC内网环境中(即是否有访问公网的权限). 如果您的Jenkins Master部署在内网环境中(即没有访问公网权限), 请勾选此项, 后续插件调用阿里云SDK会使用VPC私网域名进行请求. 如果不勾选此项, 默认会使用公网域名进行访问, 会导致访问不通, 从而后续使用该插件会出现"ConnectTimeoutException"异常 如果在公网环境中(即有访问公网权限), 则无需勾选此项, 后续调用阿里云SDK会使用公网域名进行请求.

3.5 配置“Alibaba Cloud Credentials”

必须是有效的凭据。插件使用凭据(ak / sk)调用阿里云ECS OpenAPI,以将ECS创建为从节点。

3.5.1 添加新凭据**-必填**

3.5.2 选择“Alibaba Cloud Credentials” -必填

3.5.3 输入 "Access Key ID" & "Secret Access Key" -必填

  • 输入您之前在 前置条件 创建的"Access Key ID" & "Secret Access Key"
  • 请确保您没有在下面列出任何警告:

3.5.4 配置“Alibaba Cloud Credentials” -必填

选择您刚刚创建的凭证

3.6 配置“Region” -必填

选择将在其中配置从ECS节点的正确区域。

3.7 配置“Image” -必填

选择正确的镜像类型。

3.8 配置“ VPC” -可选

如果所选区域中有任何VPC,它们将列在“ VPC”下拉列表中。并且如果未找到VPC,将使用172.16.0.0/12 CIDR块创建默认的VPC。

3.9 配置“Security Group” -可选

如果所选区域中有任何安全组,它们将列在“安全组”下拉列表中。如果未找到安全组,将使用“ 22/22”端口范围访问权限创建默认安全。

4.0 配置“ ECS SSH密钥” -必填

4.10 "Test Connection" -必填

在继续之前,您应该单击“测试连接”按钮进行彻底检查,并确保所有必需的项目都已成功配置。

4.11 配置“Availability Zone” -可选

选择将在其中配置从ECS节点的正确可用区域。如果未选择可用区域,则将选择一个随机区域。

4.12 配置“ VSW” -可选

选择将在其中配置从ECS节点的右侧vsw。如果没有选择VSW,将创建一个与现有vsws不重叠的随机vsw。

4.13 配置“Instance Type” -可选

Select the right instance type that the slave ECS node will be provisioned. And if no instance type selected, a random instance type will be selected.

4.14 配置 "Minimum number of instances" -可选

最小实例数是用于生成关注者的关注者节点的数量。 此插件将根据填写的数字创建子节点。该数字至少应为1

4.15 配置 "Init Script" -可选

Init脚本是在Jenkins开始启动跟随者节点之前在新启动的跟随者节点实例上运行的Shell脚本。 这也是安装构建和测试所需的其他软件包的好地方。

4.16 配置 "Labels" -可选

4.17 配置 "Remote FS root" -可选

4.18 配置 "Remote user"" -可选

4.19 配置 "System Disk Category"

4.20 配置 "System Disk Size"

4.21 勾选 "Assign Public Ip"

是否设置公网ip

4.22 勾选 "挂载数据卷" -可选

  • 勾选 "创建新的数据卷"
  • 配置云盘id

步骤4: 添加节点

  • 保存成功后,输入新节点以添加节点。初始化状态如下:

  • 通过pot单击提供实例后,将按照以下方式初始化子节点:

  • 一段时间后,连接后状态将恢复。

  • 单击节点下拉框,以在跟随者节点上执行相关操作。

  • 单击配置以查看跟随者节点信息

通过 Groovy 脚本配置插件

Jenkins 初始化 后或通过 Jenkins 脚本控制台 自动执行,例如

import com.alibabacloud.credentials.plugin.auth.AlibabaCredentials
import com.alibabacloud.jenkins.ecs.AlibabaCloud
import com.alibabacloud.jenkins.ecs.AlibabaEcsFollowerTemplate
import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.domains.Domain
import hudson.model.*
import jenkins.model.Jenkins

def AlibabaCredentialsParameters = [
        id         : 'alibabacloud-jenkins-key',
        description: 'Jenkins Key For Alibaba Cloud',
        accessKey  : '${your-alibaba-cloud-ak}',
        secretKey  : '${your-alibaba-cloud-sk}'
]

def AlibabaCloudFollowerTemplateParameters = [
        region                  : '${your-region-no}', // cn-qingdao
        zone                    : '${your-zone-no}', // cn-qingdao-c
        instanceType            : '${your-instance-type}', // ecs.sn2ne.2xlarge
        minimumNumberOfInstances: 1,
        vsw                     : '${your-vsw-id}',
        initScript              : "",
        labelString             : 'Jenkins Agent',
        remoteFs                : "/root",
        remoteAdmin             : "/remoteAdmin"
]

def AlibabaCloudParameters = [
        cloudName    : 'AlibabaCloudECS',
        sshKeyId     : '${your-ssh-key-id}', // 请先在 Dashboard/Credentials 里配置好SSH Key, 这里放的是SSH Key的ID
        image        : '${your-image-id}',
        vpc          : '${your-vpc-id}',
        securityGroup: '${your-sg-id}'
]

// https://github.com/jenkinsci/alibabacloud-credentials-plugin/blob/master/src/main/java/com/alibabacloud/credentials/plugin/auth/AlibabaCredentials.java
AlibabaCredentials alibabaCredentials = new AlibabaCredentials(
        CredentialsScope.GLOBAL,
        AlibabaCredentialsParameters.id,
        AlibabaCredentialsParameters.accessKey,
        AlibabaCredentialsParameters.secretKey,
        AlibabaCredentialsParameters.description
)

// get Jenkins instance
Jenkins jenkins = Jenkins.getInstance()

// get credentials domain
def domain = Domain.global()

// get credentials store
def store = jenkins.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()

// add credential to store
store.addCredentials(domain, alibabaCredentials)

// https://github.com/jenkinsci/alibabacloud-ecs-plugin/blob/master/src/main/java/com/alibabacloud/jenkins/ecs/AlibabaEcsFollowerTemplate.java
AlibabaEcsFollowerTemplate slaveTemplateQingdao = new AlibabaEcsFollowerTemplate(
        AlibabaCloudFollowerTemplateParameters.region,
        AlibabaCloudFollowerTemplateParameters.zone,
        AlibabaCloudFollowerTemplateParameters.instanceType,
        AlibabaCloudFollowerTemplateParameters.minimumNumberOfInstances,
        AlibabaCloudFollowerTemplateParameters.vsw,
        AlibabaCloudFollowerTemplateParameters.initScript,
        AlibabaCloudFollowerTemplateParameters.labelString,
        AlibabaCloudFollowerTemplateParameters.remoteFs,
)

// https://github.com/jenkinsci/alibabacloud-ecs-plugin/blob/master/src/main/java/com/alibabacloud/jenkins/ecs/AlibabaCloud.java
AlibabaCloud alibabaCloud = new AlibabaCloud(
        AlibabaCloudParameters.cloudName,
        AlibabaCredentialsParameters.id,
        AlibabaCloudParameters.sshKeyId,
        AlibabaCloudFollowerTemplateParameters.region,
        AlibabaCloudParameters.image,
        AlibabaCloudParameters.vpc,
        AlibabaCloudParameters.securityGroup,
        AlibabaCloudFollowerTemplateParameters.zone,
        AlibabaCloudFollowerTemplateParameters.vsw,
        AlibabaCloudFollowerTemplateParameters.instanceType,
        AlibabaCloudFollowerTemplateParameters.minimumNumberOfInstances,
        AlibabaCloudFollowerTemplateParameters.initScript,
        AlibabaCloudFollowerTemplateParameters.labelString,
        AlibabaCloudFollowerTemplateParameters.remoteFs
)

// add cloud configuration to Jenkins
jenkins.clouds.add(alibabaCloud)

// save current Jenkins state to disk
jenkins.save()

通过 pipeline 添加节点

AlibabaEcs Step pipeline

故障排查

  • 当您单击“保存”按钮时,如果“带有私钥的SSH用户名”连接测试失败,则保存将成功,但是“设置节点”将报告错误“处理请求时发生问题”。因此,保存前请确保连接成功。

变更日志

变更日志

联系我们

  • 如果您有任何疑问或要求,请用钉钉 扫描以下二维码