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模板配置如下
下面配置决定超过空闲时间后是关机还是删除,勾选表示关机,不勾选删除