实测搭建jenkins多环境、多分支demo
一、环境以及工具信息
1. 3台服务器信息
jenkins: 192.168.123.163、serverA:192.168.123.130、serverB :139.198.17.241三台机器都是ubuntu16.04系统
所需jenkins插件工具:Publish Over SSH、Maven Integration plugin、git plugin、Git Parameter Plug-In
ssh工具:sshd
jenkins版本为2.17
二、搭建目标
1. 实现可选git分支以及拉取最新代码
2. 实现选择不同环境发布jar部署到对应的机器上
三、构建
1. 安装插件:Publish Over SSH、Maven Integration plugin、git plugin
2. jenkins机器配置
a. 安装jdk8
b.配置maven路径,下载tar.gz,解压即可
3. 配置系统管理-》全局工具配置
只需要配置jdk和maven,其他都默认即可
4. 配置系统管理-》系统设置
passphrase/password:为你输入的密码
241配置 ,key为你jenkins机器的本地私钥,passphrase/passwd值可以删掉,这里要注意:必须将本地私钥完整内容拷贝,包括----字符
5. 部署配置
5.1 新建任务,由于我这里已经创建忽略此步骤
5.2 选中general里的参数化构建过程,点击git parameter和选项参数,前者是配置不同git分支,后者是选中不同环境
5.3 配置git
注意将branch spec改为:$BRANCH,否则git只会找master分支
5.4 构建触发器
5.5 配置post steps
此步骤实现文件上传、jar启动,执行shell脚本
a. 选中send files or execute commands over ssh
b. 配置server
c. 选中server里的高级 选中lable
d. 选中外层的高级 配置 参数化发布
Remove prefix:删除目录前缀,填target表示不创建target目录
Remote directory:文件发送到远程服务器的哪个目录下。这里跟你系统设置里的工作目录关联,会在对应的remote directory 目录下创建Kepler..目录。
Exec command:文件发送到远程服务器后,在远程服务器上执行的命令
附上shell内容:masterKepler.sh
# jar包路径 JAR_PATH='/data/app/KeplerMockDevice' #Jenkins中编译好的jar名称 jar_name=KeplerMockDevice-0.0.1-SNAPSHOT.jar cd ${JAR_PATH} #模糊查询指定jar服务的进程id pid=`ps -ef|grep Mock|grep -v grep|awk '{print $2}'` if [ -n "$pid" ] then echo '163 mock The pid: server' $pid ' will be killed....' sudo kill -9 $pid echo '163 mock The pid: server' $pid ' will be start' nohup java -jar ${JAR_PATH}/${jar_name} & else echo '163 mock The pid: server' $pid ' not exist , will be start' nohup java -jar ${JAR_PATH}/${jar_name} & fi echo '163 mock The pid: server' $pid ' started'
6. 保存
四、发布
选中项目下的git parameters,选中分支BRANCH,选中环境ENV发布。最后就可以享受成果了。
五、常见问题
1.jenkins 彻底解决sudo sudo: no tty present and no askpass program specified
方案:
a. chmod 600 /etc/sudoers
b.vim /etc/sudoers 改成下列值
%root ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL) NOPASSWD: ALL
c.添加jenkins Linux account到root 组中:
usermod -a -G root jenkins
运行id jenkins
查看jenkins
Linux account是否已经属于root
组
d.重启jenkins
2. 配置ssh remotes hosts报Can't connect to server
方案:
- 本地机器秘钥生成不对
- 必须将本地私钥完整内容拷贝,包括----字符
- 生成秘钥时候的密码错误
3. There were errors checking the update sites: UnknownHostException: updates.jenkins.io
方案:没有外网导致
参考自:
https://www.jianshu.com/p/6288703532cf