目录
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
通常与版本管理工具(SVN、GIT)、构建工具(Maven、Ant、Gradle)结合使用。
jenkins离线安装及配置可见linux在线安装及配置jenkins
一.下载及安装
- 官方下载 jenkins.war包:https://www.jenkins.io/download/
- 上传war包到服务器并通过以下命令启动(默认端口8080,由于已被占用,改为8088)
也可以直接放到tomcat下
nohup java -jar jenkins.war --logfile=server.log --httpPort=8088 > server.log 2>& 1 &
非离线状态时解决加载慢和插件安装慢的问题
- 将谷歌地址改为百度,将更新地址改为国内地址
切换到安装目录下的update目录,cd /root/.jenkins/update
修改default.json(注意注意!)
http://www.google.com/改为http://www.baidu.com/
https://updates.jenkins.io/download/plugins/改为http://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
- 修改hudson.model.UpdateCenter.xml文件
<url></url>
内的地址如下
切换到安装目录下,cd /root/.jenkins/
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
- 浏览器打开
http://[ip]:8088
根据提示输入密码
cat /root/.jenkins/secrets/initialAdminPassword //查询密码命令
- 如果是非离线,等待推荐插件安装;如果是离线,则跳过,之后手动安装
二、插件安装
离线安装方式
下载插件.hpi文件:https://plugins.jenkins.io//或http://updates.jenkins-ci.org/download/plugins/
若安装报红色错,通过查看提示可知是缺少其他插件或者其他插件版本太低,因此需要下载相关插件。
若报黄色错误,通过提示可知已安装,需restart重启,http://[ip]:8088/restart
重启
jenkins插件离线安装注意事项
- 下载所用到的插件:
publish-over-ssh
、maven-plugin
、subversion
- 出现错误缺少依赖插件或插件版本太低时,将缺少的或高版本的依赖插件安装后重新安装该插件
(最好下载最新版本)
- 出现重启提示时,在浏览器地址栏的jenkins地址后加
/restart
回车,然后在界面选择yes
三、配置
全局配置
jdk
可通过echo $JAVA_HOME
获得jdk安装地址
maven
安装(离线的话需要自己配置仓库)
可通过echo $MAVEN_HOME
获得jdk安装地址
系统配置
ssh
maven离线安装及配置
- 下载压缩包:http://maven.apache.org/download.cgi
apache-maven-3.6.1-bin.tar.gz - 上传apache-maven-3.6.1-bin.tar.gz到
cd /usr/local
,然后解压tar -zxvf apache-maven-3.6.1-bin.tar.gz
- 配置环境变量:
vi /etc/profile
- 使修改的环境变量生效
source /etc/profile
- 检查
mvn -v
- 修改仓库地址,
vi /usr/local/apache-maven-3.6.1/conf/setting.xml
(不修改的话默认是/root/.m2/repository)
- 将相关依赖上传到自己的仓库(我是将本地开发环境仓库
C:\Users\lg\.m2\repository
内的都传了上去)
四、项目构建(maven+svn)
点击新建项目
输入项目名,构建Maven项目
点击OK,进入项目配置
配置SVN
svn地址与账密配置,其中账号密码需要通过Add按钮添加后再选择
build配置
Post Steps
选择build成功后才运行
选择通过之前系统配置的ssh server上传jar包和执行指令
ssh publishers配置,下图配置了两个transfers set,第一个是上传文件前执行指令,第二个是上传文件并执行指令
Name
:选个一个在系统设置里配置的要部署jar包的服务器名字Source files
:需要上传的文件(相对于工作区,可填写多个,用,
分隔)Remove prefix
:针对source files要移除的目录前缀,不指定的话会在远程目录下新建相对地址文件夹而不是直接将jar包放在远程目录下Remote directory
:远程目录(默认会继承系统配置,也可以自己设置绝对地址)Exec command
:文件上传后要执行的命令,命令执行是相对于用户的根目录的(我是用的root账户,所以是相对于/root)
如果有旧的jar包,则移除
# 切换到脚本存放目录
cd /opt/hrj/jenkins_test
# 使脚本可执行
chmod a+x rm_old_jar_city5g.sh
# 执行脚本
./rm_old_jar_city5g.sh
启动新的jar包
cd /opt/hrj/jenkins_test
chmod a+x start_new_jar_city5g.sh
./start_new_jar_city5g.sh
rm_old_jar_city5g.sh
#!/bin/sh
echo "remove old jar ..."
# 如果jar包存在,则移除旧jar包
if [ -f intelligenceinsightserver-0.0.2-SNAPSHOT.jar ];then rm intelligenceinsightserver-0.0.2-SNAPSHOT.jar;echo "remove success" ;fi
start_new_jar_city5g.sh
#!/bin/sh
echo 'stopping application....'
# 查找旧jar包启动进程号
pid=`ps -ef | grep intelligenceinsightserver-0.0.2-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
# 如果有正在运行的,则停止该进程
if [ "$pid" == "" ];then echo 'apllicationis already stop!';else echo "kill -9 的pid:"+$pid;kill -9 $pid;fi
# 等2s
sleep 2s
echo 'running jar....'
# 启动新jar包
nohup java -jar intelligenceinsightserver-0.0.2-SNAPSHOT.jar > out.file 2>&1 &
echo 'running finish'
ssh执行命令脚本采坑
-
一开始,直接执行启动
./opt/hrj/jenkins_test/start_new_jar_city5g.sh
脚本报错Permission denied
,也即没有权限,经过多番试验没解决,发现直接将脚本里的命令拿出来放在Exec command
可以运行 -
修改后发现,执行没问题但是nohup没有在后台启动,而是直接启动在前台,导致卡住
-
原因是jenkins不能正常退出,通过高级设置在pty(伪中断)执行构建成功了,但是实际服务器也没有启动
-
查找说需要用nohup 执行.sh脚本脚本才可以,所以问题又回到了最初的脚本执行权限问题
-
去掉之前勾选的pty,通过
chmod a+x filename
给脚本赋予可执行权限可解决Permission denied
问题,但是又出现了.sh脚本文件的No such file or directory
问题
-
经过查找是因为
.sh
脚本编码问题,因为是在window下写的脚本,编码是doc
,需要改为unix
才可以
# 确保文件有可执行权限,给所有用户给予该文件可执行权限
chmod a+x filename
# 修改文件
vi filename
# 查看文件格式
:set ff
# 修改文件格式
:set ff=unix
# 保存并退出
:wq
- 终于成功
- 由于不在pty环境,所以执行脚本没加nohup也没有影响