linux环境实现jenkins前后台自动化部署
资料链接:https://pan.baidu.com/s/1d9oQw5F6uS1GytFjaoYQ3w
提取码:l70w
Jenkins内网环境搭建
由于内网环境无法下载jenkins插件,所以需要改变策略进行搭建。于是我使用外网下载插件,复制到内网的方式来安装jenkins。
Jenkins自动化部署原理
首先是从git,svn等的版本控制工具拉取代码,然后执行一段shell脚本,该脚本的主要功能是编译打包项目,上传打包好的所要执行的文件到另一台服务器,然后通过执行脚本执行另一台服务器的该文件,实现自动发布的功能
项目后台执行流程
1. 从git拉取代码
2. 编译打包项目 mvn clean install
3. 上传打包文件到另一台服务器 scp –r 要上传的文件 远程服务器用户@ip:/上传到的文件夹
4. 执行启动脚本 nohup java –jar *.jar &
项目前端执行流程
1. 从git拉取代码
2. 编译打包项目 npm run build
3. 上传打包文件到另一台服务器 scp –r 要上传的文件 远程服务器用户@ip:/上传到的文件夹
4. 执行nginx停止脚本 ./nginx –s stop
5. 执行nginx启动脚本 ./nginx
搭建步骤
linux内网环境下搭建jenkins准备
-
安装jdk
1)解压jdktar –zxvf jdk-8u121-linux-x64.tar.gz
2)配置jdk环境变量
JAVA_HOME=/usr/local/jdk1.8.0_121 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH
3) 检查java版本
java –version
java version “1.8.0_144”
Java™ SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot™ 64-Bit Server VM (build 25.144-b01, mixed mode) -
安装maven
1)解压maventar –zxvf apache-maven-3.3.9-bin.tar.gz
2)配置maven全局变量
export MAVEN_HOME=/kingstar/software/maven export PATH=$PATH:$MAVEN_HOME/bin:/usr/local/git/bin
-
检查maven版本
mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /kingstar/software/maven
Java version: 1.8.0_144, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_144/jre
Default locale: en_US, platform encoding: UTF-8
OS name: “linux”, version: “2.6.32-642.el6.x86_64”, arch: “amd64”, family: “unix”
-
Tomcat安装
解压tomcatunzip apache-tomcat-8.5.32.zip
-
安装git客户端
-
解压git客户端
tar –zxvf git-2.9.5.tar.gz
-
编译
cd git-2.9.5 ./configure –-prefix=/usr/local –with-iconv=/usr/local/libiconv
-
安装
make & make install
-
配置git全局
vim /etc/profile export PATH=$PATH:/usr/local/bin :wq退出后 source /etc/profile
-
检查git 版本
git -version
- 安装node环境
-
解压node
tar –xvf node-v10.16.3-linux-x64.tar.xz
-
重命名
mv node-v10.16.3-linux-x64 node
-
建立软连接
ln -s /usr/local/node/bin/node /usr/local/bin/node // 创建node软连接 ln -s /usr/local/node/bin/npm /usr/local/bin/npm // 创建npm软连接
-
查看node和npm版本
node -v npm -v
-
安装git服务器
1) 解压gitblittar –zxvf gitblit-1.8.0.tar.gz
2) 配置git服务器
在Gitblit安装目录下data\gitblit.properties文件,右键用“记事本”打开 修改httpPort即可
3) 启动服务器
./gitblit即可
4) 访问出现页面即是安装成功
注意:Java环境需要两台服务器都有。
服务器间设置免密
1) 在目标jenkins服务器生成秘钥
进入到root用户
ssh-keygen -t rsa 回车 回车 回车
注意三下回车,不需要填写任何字符
2) 把目标服务器的id_rsa.pub复制到出来
3) 同样在应用服务器生成秘钥
进入到root用户
ssh-keygen -t rsa 回车 回车 回车
注意三下回车,不需要填写任何字符
4) 目标jenkins服务器的id_rsa.pub的字符串写入应用服务器的authorized_keys
这样就可以不输入密码在应用服务器上传文件到jenkins服务器了。
在外网环境下载插件
- 在外网windows环境下载jenkins.war安装包
- 把jenkins.war放入tomcat的webapp目录下
- 启动tomcat
- 访问该项目http://127.0.0.1:8080/Jenkins/
- 拿到jenkins的admin密码登录,下载默认的所有插件
- 如果需要下载其他插件,在插件管理页面提前下载
- 进入C:\Users\wbjinzhicai.jenkins打包.jenkins文件
- 把该文件搞到内网环境
离线环境安装插件
Jenkins所有插件都在.jenkins文件中,所以有的.jenkins文件就有了插件
安装jenkins插件要遵循以下步骤
- 首先确定linux虚拟机是否有java环境,建议jdk1.8以上
- 把.jenkins文件中的文件放到C:\Users\wbjinzhicai.jenkins中
- 把jenkins.war放入到linux环境的tomcat中
- 启动tomcat
- 访问该项目http://该机器IP:port/jenkins/
- 拿到jenkins的admin密码登录
- 你会发现自己的jenkins环境已经存在了插件
后台项目自动化部署
Jenkins项目构建
新建任务→构建一个自由风格的软件项目→输入一个任务名称内填写名称→确定
项目构建完毕。。。
Jenkins配置
-
使用git拉取代码
-
编写脚本
—————————————————————————————————————##1.进入到项目所在目录并打包项目为jar包 cd /root/.jenkins/workspace/test/ouos-parent/ ##2.替换配置文件 for m in dataconfig gateway ; do echo $m be updated; cp -r /root/.jenkins/workspace/test/config-file-dev/$m/bootstrap.yml /root/.jenkins/workspace/test/ouos-parent/ouos-$m/src/main/resources/bootstrap.yml cp -r /root/.jenkins/workspace/test/config-file-dev/$m/dfzq-grpc-config.properties /root/.jenkins/workspace/test/ouos-parent/ouos-$m/src/main/resources/config/dfzq-grpc-config.properties done echo queryserver be updated; cp -r /root/.jenkins/workspace/test/config-file-dev/ouosserver/bootstrap.yml /root/.jenkins/workspace/test/ouos-parent/ouos-queryserver/src/main/resources/bootstrap.yml cp -r /root/.jenkins/workspace/test/config-file-dev/ouosserver/dfzq-grpc-config.properties /root/.jenkins/workspace/test/ouos-parent/ouos-queryserver/src/main/resources/config/dfzq-grpc-config.properties echo mvn clean install mvn clean install ##3.上传jar包文件到另一台服务器 ######################################################################### for i in ouos-dataconfig ouos-queryserver ouos-gateway ; do echo $i being to remote root@110.145.14.118; scp -r /root/.jenkins/workspace/test/ouos-parent/$i/target/$i-1.0-SNAPSHOT.jar root@110.145.14.118:/root/server done ######################################################################### ##4.连接其他服务器 ssh root@110.145.14.118 > /dev/null 2>&1 << eeooff ##5.查询并杀死所查微服务进程 #FILENAME="ouos-dataconfig" #ID=`ps -ef|grep ${FILENAME} | grep -v "grep"` #kill -9 $ID echo kill all ps -ef|grep ouos-dataconfig | grep -v "grep"|awk '{print$2}'|xargs kill ; ps -ef|grep ouos-queryserver | grep -v "grep"|awk '{print$2}'|xargs kill ; ps -ef|grep ouos-ouos-gateway | grep -v "grep"|awk '{print$2}'|xargs kill ; echo sleepping! #sleep(10000) #ps -ef | grep ouos-dataconfig | awk '{print $2}' | xargs kill -9 cd /root/server ##6.使用脚本启动项目 ######################################################################### #for n in ouos-dataconfig ouos-queryserver ouos-gateway ; #do #echo $n is to be started; #nohup java -jar $n-1.0-SNAPSHOT.jar & #done ######################################################################### ####nohup java -jar ./ouos-dataconfig-1.0-SNAPSHOT.jar ${1} >logs/dataconfig.log 2>&1 & ####nohup java -jar ./ouos-queryserver-1.0-SNAPSHOT.jar ${1} >logs/queryserver.log 2>&1 & ####nohup java -jar ./ouos-gateway-1.0-SNAPSHOT-1.jar --server.port=8092 ${1} >logs/gateway1.log 2>&1 & ####nohup java -jar ./ouos-gateway-1.0-SNAPSHOT-2.jar --server.port=8093 ${1} >logs/gateway2.log 2>&1 & ######################################################################### #BUILD=DONTKILLME ./start.sh #echo ouos-dataconfig-1.0-SNAPSHO is started #nohup java -jar ./ouos-dataconfig-1.0-SNAPSHOT.jar & #echo ouos-queryserver-1.0-SNAPSHO is started #nohup java -jar ./ouos-queryserver-1.0-SNAPSHOT.jar & #echo ouos-gateway-1.0-SNAPSHO is started #nohup java -jar ./ouos-gateway-1.0-SNAPSHOT.jar & #touch abcdefg.txt exit 0 eeooff #sleep(100000) echo done!
—————————————————————————————————————
注意:java启动脚本最好放在linux服务器中,使用jenkins脚本去调用,否则jenkins会一直处在等待状态,日志打印一直打转,原因是由于jenkins脚本无法获取到子线程启动完毕而一直打转。
前端项目自动化部署
Jenkins项目构建
新建项目和git拉取代码同后台
Jenkins配置
脚本如下:
##1.从git拉取代码(记得设置git用户名和密码)
#git pull
##2.替换配置文件
cp -r /usr/local/devops/sit.env.js /root/.jenkins/workspace/test2/OrientSecuritiesWeb/config/sit.env.js
cd /root/.jenkins/workspace/test2/OrientSecuritiesWeb
##3.打包项目
npm install
npm run build
##4.修改打包dist项目名称(使用时需要看情况使用)
mv dist/ ouos
##5.上传修改好的项目到另一台服务器的对应地址
scp -r /root/.jenkins/workspace/test2/OrientSecuritiesWeb/ouos root@110.145.14.118:/usr/local/nginx/html
##6.进入另一台服务器
ssh root@110.145.14.118 > /dev/null 2>&1 << eeooff
##6.重新启动nginx
cd /usr/local/nginx/sbin
./nginx -s stop
./nginx
eeooff
#sleep(100000)
echo done!
遗留的问题
- 脚本相对简单,不专业,遇到复杂的部署环境或许存在一定的问题
- 暂时没有把微服务项目分服务器