Jenkins安装配置和构建使用
Jenkins安装配置和构建使用
东西有点多,有点杂。慢慢看,不喜勿喷。谢谢!!!!!
一.#RPM 安装jenkins (注意事项)
#已先安装好jdk和maven
下载rpm包 历史所有版本下载地址 http://mirrors.jenkins.io/
rpm安装命令 rpm -ivh Jenkins的rpm包名
自动安装完成之后:
/usr/lib/jenkins/jenkins.war WAR包路径
/etc/sysconfig/jenkins 配置文件,可修改端口
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
#启动jenkins
systemctl start jenkins
#maven包配置完之后,修改settings.xml 添加架包配置
<localRepository>/usr/local/maven/repo</localRepository> //自定义架包编译位置
//添加阿里云镜像
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
#maven仓库repo文件夹授权为 jenkins (很重要)
chown -R jenkins:jenkins repo/
#jenkins配置maven和JDK
#编辑文件命令
vi /etc/profile
#添加配置
#jdk
export JAVA_HOME=/usr/local/application/jdk1.8.0_251 //jdk 目录
export PATH=$JAVA_HOME/bin:$PATH
#maven
export MAVEN_HOME=/usr/local/maven //maven 目录
export PATH=$PATH:$MAVEN_HOME/bin
#访问Jenkins 服务地址 通过 Ip+port(8080) 即可正常访问Jenkins
Jenkins 默认端口为 8080
修改默认端口号文件
/etc/sysconfig/jenkins
文件中,此处重新配置即可
## Type: integer(0:65535)
## Default: 8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="想设置的端口号"
二.访问成功设置 Jenkins
第一次进入需要密码:图中说明很清楚,在目录下找到对应的初始密码填充即可
登录成功后安装插件,创建用户也可直接用admin登录。
插件的选择 (SVN 必须的)
Subversion Plug-in Svn 代码服务插件(Svn 服务器,需要配置钩子程序,才可以进行代码拉取)
Publish Over SSH 这个插件即可解决我们远程连接服务器的配置插件。
插件安装失败,可通过安装新版本解决。
安装时,会发现第一个版本未删除干净,造成安装报错问题,即便安装成功,也会因为 Jdk 版本问题,导致安装后无法使用。
问题的症结:系统默认Jdk版本为 1.7,而当前最新版本的 Jenkins 2.222 所需 Jdk 需要 1.8+
如何查看jenkins中的系统属性(如果你已经更新并不能启动的时候,可以先装回旧版本,或者通过其他渠道查看)
下图为最新版Jenkins 以及我调整好的默认jdk版本配置(!!!!!默认Jdk 版本 不等于 你自行安装Jdk的版本)
解决方法:升级 Jenkins 到最新版本
第一步:安装回旧版 Jenkins,并启动服务
进入系统后,系统会提示你进行版本更新,并提供下载连接,下载后是 jenkins.war 包
使用 jenkins.war 包,直接替换 /usr/lib/jenkins/jenkins.war 这个包(替换前先备份)
第二步:查看默认 Jdk 版本
[[email protected] ~]# alternatives --config java
共有 1 个提供“java”的程序。
选项 命令
-----------------------------------------------
+ 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/bin/java
第三步:添加自己的 Jdk
[[email protected] ~]# alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_251/bin/java 2
[[email protected] ~]# alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_251/bin/javac 2
[[email protected] ~]# alternatives --install /usr/bin/jar jar /usr/local/java/jdk1.8.0_251/bin/jar 2
第四步:选择自己的安装的 Jdk
[[email protected] ~]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令
-----------------------------------------------
+ 1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/bin/java
* 2 /usr/local/application/jdk1.8.0_251/bin/java
按 Enter 保留当前选项[+],或者键入选项编号:2
第五步:Jenkis 中配置自己安装的 Jdk
vi /etc/init.d/jenkins
第六步:重启Jenkins
systemctl start jenkins
安装插件成功进行如下配置:
Configure System 设置
Publish over SSH 设置
新增 SSH Servers 有几个服务器就配置几个
Global Tool Configuration 设置
配置 maven settings提供 maven的settings路径 /usr/local/maven363/conf/settings.xml
JDK JAVA_HOME jdk存放路径 /usr/local/application/jdk1.8.0_251
Maven 安装 MAVEN_HOME maven存放路径 /usr/local/maven
三.构建项目步骤
1. 源码管理 选择对应仓库位置 SVN为例
选择 Subversion 如下完成配置
2.构建触发器
选择 Poll SCM 里设置每5分钟执行一次 H/5 * * * *
3.构建
1.服务和Jenkins在同服务器上时
选择maven构建方式 Invoke top-level Maven targets
配置Maven 版本
选择安装的maven名称
目标设置 clean install package -am --also-make -Dmaven.test.skip=true #代表maven方式操作
2.服务和Jenkins不在同服务器上时
选择maven构建方式 Invoke top-level Maven targets
配置Maven 版本 选择安装的maven名称
目标设置 clean install package -am --also-make -Dmaven.test.skip=true #代表maven方式操作
添加 Execute shell 方式
选择maven构建方式 Invoke top-level Maven targets
配置Maven 版本 选择安装的maven名称
目标设置 clean #代表maven方式操作
添加shell命令
#!/bin/bash
rm -rf business
mkdir business
cp ./wckj-iot/target/wckj-iot-1.0-SNAPSHOT.jar ./business
cp ./wckj-iot-event/target/wckj-iot-event-1.0-SNAPSHOT.jar ./business
cp ./wckj-system/target/wckj-system-1.0-SNAPSHOT.jar ./business
cp ./wckj-iot-deviceinfo/target/wckj-iot-deviceinfo-1.0-SNAPSHOT.jar ./business
4.构建后操作
1.服务和Jenkins在同服务器上时
选择ssh方式 Send build artifacts over SSH
Exec command( 自动编译文件存放地址) /usr/local/application/sh/business/test-business_service_all.sh
test-business_service_all.sh 文件内容
#!/bin/bash
echo '开始执行脚本'
kill -9 `ps -ef | grep 'wckj-system-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'` //查找端口服务 ---杀掉进程 kill -9 `ps -ef | grep 'wckj-iot-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
kill -9 `ps -ef | grep 'wckj-iot-event-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
kill -9 `ps -ef | grep 'wckj-iot-deviceinfo-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
sleep 3s // 停止3秒
nohup java -jar /usr/local/application/business/wckj-system-1.0-SNAPSHOT.jar --server.port=8081 --spring.profiles.active=dev >/usr/local/application/log/wckj-system-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-1.0-SNAPSHOT.jar --server.port=8082 --spring.profiles.active=dev >/usr/local/application/log/wckj-iot-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-event-1.0-SNAPSHOT.jar --server.port=8083 --spring.profiles.active=dev >/usr/local/application/log/wckj-iot-event-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-deviceinfo-1.0-SNAPSHOT.jar --server.port=8084 --spring.profiles.active=dev >/usr/local/application/log/wckj-iot-deviceinfo-log 2>&1&
echo '执行完了启动'
文件说明:
启动服务 指定端口
nohup java -jar /usr/local/application/business/wckj-system-1.0-SNAPSHOT.jar --server.port=8081 --
指定使用服务配置文件 指定log日志文件路径
spring.profiles.active=dev >/usr/local/application/log/wckj-system-log 2>&1&
前端服务包发布配置
test-wckj-iot-large-screen.sh 文件内容
#!/bin/bash echo '开始执行脚本'
netstat -tunlp|grep 9002|awk '{print $7}'|awk -F '/' '{print $1}'|xargs kill -9
cd /var/lib/jenkins/workspace/test-wckj-iot_large_screen/
cnpm install
cnpm install --save mockjs
#npm run dev &
nohup cnpm start -- --port 9002 >/usr/local/application/log/test-wckj-iot_large_screen 2>&1 & exit
echo '执行完了构建'
文件说明:
netstat -tunlp|grep 9002|awk '{print $7}'|awk -F '/' '{print $1}'|xargs kill -9 :用 ps 查看进程 PID ,用 kill 命令终止进程。
awk '{print $7}' : 项目id(我在当前项目应用中的版本即Jenkins项目列表的钟表类型的图标对应的列号为7)。
awk -F '/' '{print $1}': 代表以 '/' 分割的第一个参数。
xargs: 将前面获取到的进程号通过空格分割,传递给kill -9,杀死所有进程。
2.服务和Jenkins不在同服务器上时
选择ssh方式 Send build artifacts over SSH
Exec command( 自动编译文件存放地址) /usr/local/application/sh/test-business_service_all_run.sh
test-business_service_all_run.sh文件内容
#!/bin/bash
echo '开始执行脚本'
source /etc/profile
kill -9 `ps -ef | grep 'wckj-system-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
kill -9 `ps -ef | grep 'wckj-iot-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
kill -9 `ps -ef | grep 'wckj-iot-event-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
kill -9 `ps -ef | grep 'wckj-iot-deviceinfo-1.0-SNAPSHOT.jar' | grep -v grep |awk '{print $2}'`
sleep 3s
nohup java -jar /usr/local/application/business/wckj-system-1.0-SNAPSHOT.jar --server.port=8081 --spring.profiles.active=gstest >/usr/local/application/log/wckj-system-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-1.0-SNAPSHOT.jar --server.port=8082 --spring.profiles.active=gstest >/usr/local/application/log/wckj-iot-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-event-1.0-SNAPSHOT.jar --server.port=8083 --spring.profiles.active=gstest >/usr/local/application/log/wckj-iot-event-log 2>&1&
nohup java -jar /usr/local/application/business/wckj-iot-deviceinfo-1.0-SNAPSHOT.jar --server.port=8084 --spring.profiles.active=gstest >/usr/local/application/log/wckj-iot-deviceinfo-log 2>&1&
echo '执行完了启动'
5.配配置结束后,再看看是否可以运行
待打包及发布过程在代码中的时候,控制台输出: Finished: SUCCESS ,发布成功。