实现Jenkins docker部署,设置svn/maven/jdk/ssh,编写自动部署工程脚本
折腾了好几天,终于实现了自动化部署,废话不多说,直接上干货:
先说环境,服务器操作系统是centos8,docker版本19.03.5,所有容器文件放到/data。
因为要新建maven工程,需要提前安装好jdk和maven。
第一步:docker search jenkins,找到评星最多的官方镜像,pull后创建容器,没想到无法启动,无奈放弃,选用第二个jenkins/jenkins,此为第一个坑:-(
第二步:创建容器:
新建目录 /data/jenkins_home,然后
docker run -d -p 8080:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins
这里自己挖了一个坑,把/data和/var搞反了,然后成功跳出。
/etc/localtime也是一个坑,实际上使用的是/etc/timezone, 造成后面的容器时间与服务器时间不一致,此坑未填,因为已经安装了一堆插件,否则后面还有重来。
docker ps -a 查看容器:
第三步:http://ip:8080, 开始安装初始化,
cat /data/jenkins_home/secrets/initialAdminPassword,复制密码后开始
插件安装时不要安装推荐插件,因为:连jenkins官方服务器太慢了!
但可以先安装一个中文本地化插件Localization Support Plugin,否则后面改成中文界面比较麻烦!
粗鲁的修改方法:
cd /data/jenkins_home/updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
或者在系统设置里修改,但没什么卵用,速度变化不大。
第四步:安装插件
Folders,SSH,Subversion,maven插件都是必须的,遗漏也没关系,使用时会有文档提示你安装的。
安装后如果没有问题,这里不应该有下图中的红色图标:
安装Credentials插件时,我降低了一下版本到2.2.0,否则会有冲突,不是所有插件都需要升级到最高版本。
第五步:进入系统管理-全局工具配置:
配置jdk和maven路径,jdk路径需要到容器里用$JAVA_HOME查看。
进入系统管理-系统配置-全局属性,新增SSH remote hosts,工程运行脚本时会用到。
第六步:新建一个maven工程,实现Springboot项目自动部署
这个网上的文章很多,无非就是设置一下svn地址账户密码,第一次构建时时间长一点,多等一会。麻烦的地方在于通过ssh远程执行脚本。在Post Steps步骤中选择Run only if build succeeds,添加
脚本内容:
jarfilename="iqms_test.jar"
pids=`ps -ef | grep $jarfilename | grep -v grep | awk '{print $2}'`
for pid in ${arr[@]}
do
exe_str=`kill -9 $pid`
echo ${exe_str}":"${pid}" is killed."
done
scp -P 9022 [email protected]:/data/jenkins_home/workspace/iqms-be-1/iqms-be-1/target/iqms.jar /iqms_beta/iqms_test.jar
/usr/bin/java -jar /iqms_beta/iqms_test.jar
echo "...end..."
第七步:开始构建吧,一般情况下,第一次不可能成功的,我搞了六次,祝大家顺利!
另外ssh需要配置免密码登录,注意是从jenkins服务器登录到被部署的服务器上运行,所以要在jenkins服务器上生成rsa**,做复制到被部署的服务器上。但我还是碰到一个问题,ssh无法用新建的用户名登录到被部署的服务器,命令行可以,在jenkins里测试怎么都不行,难道是密码太简单了?还是加密方式不一致?期待大咖帮我解决一下,先谢谢了!