Jenkins 云插件动态扩缩容slave节点

背景

流水线很吃资源,而且用到几十台高配置云主机,每天下午是使用高峰,晚上9点以后基本处于空闲状态,为了节省成本计划购买按需付费的云主机,配置云插件如果有流水线任务队列就会按需创建云主机,云主机空闲超过设定时间自动删除释放,这样能最大限度的节省资源成本

Jenkins安装云插件

插件通过引入华为云官方sdk管理华为云主机,在jenkins配置界面配置ak sk ,配置VPC、子网、地域等信息,配置ECS模板添加创建的云主机的规格、最大和最小数量。

问题卡点

插件配置界面有一项Region地域选择,由于当前云环境是在一个新的地域乌兰察布,而这个插件版本比较旧,当时华为云还没有开通这个地域,对应的sdk接口也没有上线

解决

1、提工单让华为云官方上线乌兰察布对应的sdk接口支持

2、更改插件源码适配新的地域,重新编译后自部署集成

2.1 华为云插件源码重构

git clone https://github.com/jenkinsci/huaweicloud-ecs-plugin.git -b 1.1.1-19.vf1c6e1263c69

在HuaweiVPC.java 包里面方法添加乌兰察布地域

 

 添加后在插件配置界面就有了对应选项

 

 2.2 重构华为云插件依赖的华为云sdk

查看插件依赖的sdk版本信息

less pom.xml 

依赖的是多工程jar包, iam  core ecs eip等,而关于地域配置的只在ecs里面

 

 查看华为sdk源码,添加乌兰察布对应配置

git cone  https://github.com/huaweicloud/huaweicloud-sdk-java-v3.git  -b 3.0.40-rc

 

 

 

 2.3 更改后重新编译sdk

/data/maven/bin/mvn clean package -Dmaven.test.skip=true -e -X -Djava.version=1.8

生成jar包如下

 

2.4 重新编译huaweicloud-ecs插件,引入上面新编译的ecs sdk jar包

pom里面依赖的sdk是maven官方仓库地址,但是本地对其中的ecs jar做了定制化更改,所以此jar要引入本地的,所以把它部署到 .m2下缓存仓库里面

cd huaweicloud-sdk-java-v3

/data/maven/bin/mvn install:install-file -Dfile=./huaweicloud-sdk-ecs-3.0.40-rc.jar -DgroupId=com.huaweicloud.sdk -DartifactId=huaweicloud-sdk-ecs  -Dversion=3.0.40-rc -Dpackaging=jar

 

cd huaweicloud-ecs-plugin

/data/maven/bin/mvn clean package -Dmaven.test.skip=true -e -X  (缓存优先级高于本地和远程中央仓库)

3、重新部署插件到Jenkins

在target下有一个hpi文件这是部署到jenkins的制品

 

 先卸载之前安装的插件,再上传重新编译的

 

 

上传如下hpi文件即可

插件配置注意事项

ak sk 权限一定要给足,如果没有服务器管理员权限,就会提示找不到对应的密钥对

jenkins上配置的密钥对,必须在华为云上面有一个同名的一样的密钥对

ECS模板配置如下

 

 

 

 下面配置决定超过空闲时间后是关机还是删除,勾选表示关机,不勾选删除

 

posted @ 2025-07-04 16:40  fanggege  阅读(20)  评论(1)    收藏  举报