前言

之前部署过jenkins(旧的文章),之前是因为jdk想要用8版本的所以用了旧版的jenkins,之前的文章写过了旧版jenkins是存在漏洞的,正好要部署新的jenkins,所以带来这篇文章来部署最新的jenkins来编译maven项目。

1. 环境说明:

用独立的jenkins用户安装jenkins,用war包部署的方式
小团队推荐的硬件配置:4 GB+ 内存,50 GB 以上的驱动器空间
war包版本:2.387.1LTS(这个是20230314最新的LTS版本)
需要jdk11或者17(这两个版本是LTS版本,jdk版本要求)
已经安装了gitlab,从私有的gitlab拉取代码进行编译
gitlab上的代码需要使用jdk8来进行编译
然后通过ansible进行部署

2. 部署jenkins

2.1 部署准备

下载版本包

useradd jenkins
passwd jenkins
su - jenkins
上传jenkins.war

安装jdk

上传jdk-17_linux-x64_bin.tar.gz
tar -zxf jdk-17_linux-x64_bin.tar.gz
rm -f jdk-17_linux-x64_bin.tar.gz
chown -R jenkins:jenkins /home/jenkins/jdk-17.0.6/
vi ~/.bash_profile
export JAVA_HOME=/home/jenkins/jdk-17.0.6
export PATH=$HOME/bin:$JAVA_HOME/bin:$PATH
source ~/.bash_profile
java -version

创建文件夹

mkdir /home/jenkins/jenkins_logs
mkdir /home/jenkins/jenkins_data

使用命令安装字体

yum install fontconfig
fc-cache --force

(下面是如果不安装字体会报的错)

java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is nullat java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:224)at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:106)

添加jenkins家目录环境变量

vi ~/.bash_profile
export JENKINS_HOME=/home/jenkins/jenkins_data
source ~/.bash_profile

2.2 编写启动停止重启脚本

vi jenkins.sh
#!/bin/bash
# 在执行过程中若遇到使用了未定义的变量或命令返回值为非零,将直接报错退出
set -eu
# 检查参数个数
if [ "${#}" -lt 1 ]; thenecho "\033[41;37m 脚本使用示例: sh jenkins.sh start|stop|restart  \033[0m"exit
fi
# 获取脚本第一个参数
APP_OPT=${1}
# 端口
APP_PORT=8080
# 名称
APP_NAME=jenkins-2.387.1LTS.war
# jar名 | war名
APP_JAR=jenkins-2.387.1LTS.war
# 程序根目录
APP_JAR_HOME=/home/jenkins
# 日志名
APP_LOG_NAME=jenkins
# 日志根目录
APP_LOG_HOME=/home/jenkins/jenkins_logs
# 程序运行参数
JAVA_OPTS=" --httpPort=${APP_PORT} --prefix=/jenkins"
#--ajp13Port=-1echo "本次操作服务名:[${APP_NAME}]"
echo "本次操作选择:[${APP_OPT}]"# 停止
function stop(){echo "<-------------------------------------->"echo "[${APP_NAME}] ... stop ..."# 查看该jar进程pid=`ps -ef | grep ${APP_JAR} | grep -v 'grep' | awk '{print $2}'`echo "[${APP_NAME}] pid="${pid}# 存在则kill,不存在打印一下吧if [ "${pid}" ]; thenkill -9 ${pid}# 检查kill是否成功if [ "$?" -eq 0 ]; thenecho "[${APP_NAME}] stop success"elseecho "[${APP_NAME}] stop fail"fielseecho "[${APP_NAME}] 进程不存在"fi
}# 运行
function start(){echo "<-------------------------------------->"echo "[${APP_NAME}] ... start ..."cd ${APP_JAR_HOME}echo "当前路径:`pwd`"# 赋予可读可写可执行权限chmod 777 ${APP_JAR}echo "启动命令: nohup java -jar ${APP_JAR} ${JAVA_OPTS} >> ${APP_LOG_HOME}/${APP_NAME}.log 2>&1 &"nohup java -jar ${APP_JAR} ${JAVA_OPTS} >> ${APP_LOG_HOME}/${APP_NAME}.log 2>&1 &if [ "$?" -eq 0 ]; thenecho "[${APP_NAME}] start success"elseecho "[${APP_NAME}] start fail"fi
}
# 重启
function restart(){echo "<-------------------------------------->"echo "[${APP_NAME}] ... restart ..."stopstart
}
# 多分支条件判断执行参数
case "${APP_OPT}" in"stop")stop;;"start")start;;"restart")restart;;*)echo "\033[41;37m 提示:不支持参数 命令 -> ${APP_OPT} \033[0m";;
esac

2.3 设置插件更新地址

启动一次,这次启动为了让jenkins创建出初始文件

sh jenkins.sh start
本次操作服务名:[jenkins-2.387.1LTS]
本次操作选择:[start]
<-------------------------------------->
[jenkins-2.387.1LTS] ... start ...
当前路径:/home/jenkins
启动命令: nohup java -jar jenkins-2.387.1LTS.war  --httpPort=8080 --prefix=/jenkins >> /home/jenkins/jenkins_logs/jenkins-2.387.1LTS.log 2>&1 &
[jenkins-2.387.1LTS] start success

查看日志

vi /home/jenkins/jenkins_logs/jenkins-2.387.1LTS.log
最下面会有此提示信息证明成功
*************************************************************
*************************************************************
*************************************************************Jenkins initial setup is required. An admin user has been created and a password g
enerated.
Please use the following password to proceed to installation:4215bf0dc5b5459382e5bd0fdbc0e403This may also be found at: /home/jenkins/jenkins_data/secrets/initialAdminPassword*************************************************************
*************************************************************
*************************************************************

看日志成功关掉进程,去设置插件更新地址

sh jenkins.sh stop
本次操作服务名:[jenkins-2.387.1LTS]
本次操作选择:[stop]
<-------------------------------------->
[jenkins-2.387.1LTS] ... stop ...
[jenkins-2.387.1LTS] pid=56012
[jenkins-2.387.1LTS] stop success

更换插件更新地址为清华源

sed -i 's/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /home/jenkins/jenkins_data/updates/default.jsonsed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' /home/jenkins/jenkins_data/updates/default.json
vi /home/jenkins/jenkins_data/hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites><site><id>default</id><url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url></site>
</sites>

2.4 日志轮转

vi /etc/logrotate.d/jenkins
/home/jenkins/jenkins_logs/jenkins-2.387.1LTS.log {su jenkins jenkinscopytruncatedailyrotate 1000 missingokcompressdelaycompress notifemptycreate 644 jenkins jenkinsdateextdateformat -%Y%m%d%H.%s
}

2.5 启动jenkins

sh jenkins.sh start
本次操作服务名:[jenkins-2.387.1LTS]
本次操作选择:[start]
<-------------------------------------->
[jenkins-2.387.1LTS] ... start ...
当前路径:/home/jenkins
启动命令: nohup java -jar jenkins-2.387.1LTS.war  --httpPort=8080 --prefix=/jenkins >> /home/jenkins/jenkins_logs/jenkins-2.387.1LTS.log 2>&1 &
[jenkins-2.387.1LTS] start success

看日志看初始密码

vi /home/jenkins/jenkins_logs/jenkins-2.387.1LTS.log
*************************************************************
*************************************************************
*************************************************************Jenkins initial setup is required. An admin user has been created and a password ge
nerated.
Please use the following password to proceed to installation:4215bf0dc5b5459382e5bd0fdbc0e403This may also be found at: /home/jenkins/jenkins_data/secrets/initialAdminPassword*************************************************************
*************************************************************
*************************************************************

再看一下进程确认一下

ps -ef |grep jenkins
jenkins  60319     1 13 17:30 pts/0    00:00:28 java -jar jenkins-2.387.1LTS.war --httpPort=8080 --prefix=/jenkins
jenkins  61253 60277  0 17:33 pts/0    00:00:00 grep --color=auto jenkins

2.6 访问jenkins页面并初始化

浏览器访问http://192.168.3.111:8080/jenkins/

把刚才的密码复制进去,继续

选择插件来安装
根据自己的需要把不用的删掉,添加自己需要的
我这里取消了ant,Gradle,GitHub一系列
添加了GitLab,点击安装

安装完成,创建新用户

配置访问URL

开始使用

2.7 处理初始的提示信息

这里有个红色的提示
在内置节点上构建可能是一个安全问题。您应该设置分布式生成。请参阅文档
直接点击dismiss即可

还有黄色的警告
第一个是插件的警告,初始化的时候有的插件可能会未安装成功

点击这里

点击重启更新,等待重启之后即可看到只有一个更新的提示,不用管他。

至此安装jenkins完毕。

3. 全局工具配置

3.1 查看主目录设置

进入系统管理后,系统管理–>插件管理,记得更新插件
之后,查看主目录是否正确,这里的主目录是机器上jenkins家目录环境变量

3.2 安装全局工具

根据需要把编译源码整个过程需要的环境配置好
先在服务器上安装需要的软件

3.2.1 jdk

编译的代码依赖的是java8的jdk,所以不能用jenkins安装的17版本的,需要单独放置一套jdk,然后在jenkins内配置该jdk的路径

su - jenkins
上传包jdk-8u351-linux-x64.tar.gz
tar -zxf jdk-8u351-linux-x64.tar.gz
rm -f jdk-8u351-linux-x64.tar.gz
ll jdk1.8*
drwxrwxr-x  8 jenkins jenkins     4096 Mar 14 16:55 jdk1.8.0_351

3.2.2 配置maven

部署之前要先安装jdk

  • 下载
    https://dlcdn.apache.org/maven/
    安装maven如下:
su - jenkins
上传包
tar xvf apache-maven-3.8.7-bin.tar.gz
vi ~/.bash_profile
export MAVEN_HOME=/home/jenkins/apache-maven-3.8.7
export PATH=$MAVEN_HOME/bin:$PATH
source ~/.bash_profile
mvn -v
Apache Maven 3.8.7
  • 修改maven配置文件–修改本地仓库地址
mkdir /home/jenkins/apache-maven-3.8.7/repository
cd apache-maven-3.8.7/conf
vi settings.xml
maven默认存放地址看settings的52行:| Default: ${user.home}/.m2/repository
默认存放在用户家目录的隐藏文件.m2文件夹中
在55行插入下面内容
<localRepository>/home/jenkins/apache-maven-3.8.7/repository</localRepository>
  • 修改maven配置文件–修改远程仓库地址
    将下载服务器换成阿里云服务器,因为国外服务器下载jar包比较慢。
vi settings.xml
找到159-165行<mirrors></mirrors>标签内替换内容
<!-- 阿里云服务器配置 --><mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
  • 修改maven配置文件–配置jdk
    找到219行,插入下面内容
将下面的代码粘贴到settings中,放在<profiles></profiles>之间
<!-- jdk配置 --> <profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile>
  • maven配置完成,进行测试
 mvn help:system
[INFO] Scanning for projects...
...................略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17.885 s
[INFO] Finished at: 2023-04-14T15:57:49+08:00
[INFO] ------------------------------------------------------------------------

3.2.3 安装curl

(目的是gitlab是https的方式,安装git需要先编译一下curl命令,不需要可以不做)
下载
https://curl.se/download.html

yum install gcc
su - jenkins
tar -zxf curl-7.88.1.tar.gz
rm -f curl-7.88.1.tar.gz
mv curl-7.88.1 curl-7.88.1h
mkdir curl-7.88.1
cd curl-7.88.1h
./configure --prefix=/home/jenkins/curl-7.88.1 --with-ssl --enable-tls-srp
make
make install
vi ~/.bash_profile
export CURL_ROOT=/opt/curl-7.76.1-ubuntu-x64
# 运行依赖
export LD_LIBRARY_PATH=$CURL_ROOT/lib:$LD_LIBRARY_PATH
# 开发依赖
export PATH=$CURL_ROOT/bin:$PATH
export CPATH=$CURL_ROOT/include:$CPATH
export LIBRARY_PATH=$CURL_ROOT/lib:$LIBRARY_PATHsource ~/.bash_profile
rm -rf ~/curl-7.88.1h/

3.2.4 安装git

(如果gitlab是https的方式,需要先编译一下curl命令,然后编译git时加上–with-curl参数)
下载
https://git-scm.com/download/linux
点击The latest version is 2.40.0.最后的版本号下载tar包

解压
tar -zxf git-2.40.0.tar.gz
rm -f git-2.40.0.tar.gz
mv git-2.40.0/ git-2.40.0h
mkdir git-2.40.0安装编译环境
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker automake autoconf libtool make
安装上面编译环境的时候,yum自动帮你安装了git,这时候你需要先卸载这个旧版的git。
否则还是一个老版本
git --version
git version 1.8.3.1
yum remove git
(有依赖一起卸载掉没事不用管)编译源码
cd git-2.40.0h
./configure --prefix=/home/jenkins/git-2.40.0 --with-curl --with-expat
make prefix=/home/jenkins/git-2.40.0 all
prefix里面填你想要放的文件夹位置安装git
make prefix=/home/jenkins/git-2.40.0 install配置环境变量
vim ~/.bash_profile
export GIT_HOME=/home/jenkins/git-2.40.0
export PATH=$GIT_HOME/bin:$PATH
source ~/.bash_profile验证
git --version
git version 2.40.0本地配置(本地可以不用配置,如果想本地使用git,可以如下配置)
git config --global user.name gituser
git config --global user.email gituser@workstation.lab.example.com
git config --global push.default simple
git config --global --list

3.2.5 安装ansible

(这里我直接用yum安装的,编译安装等有时间搞一下)

yum install ansible -y

3.2.6 检查profile文件

此时~/.bash_profile文件应该是:

PATH=$PATH:$HOME/.local/bin:$HOME/binexport CURL_ROOT=/home/jenkins/curl-7.88.1
export LD_LIBRARY_PATH=$CURL_ROOT/lib:$LD_LIBRARY_PATH
export PATH=$CURL_ROOT/bin:$PATH
export CPATH=$CURL_ROOT/include:$CPATH
export LIBRARY_PATH=$CURL_ROOT/lib:$LIBRARY_PATHexport JAVA_HOME=/home/jenkins/jdk-17.0.6
export JENKINS_HOME=/home/jenkins/jenkins_data
export MAVEN_HOME=/home/jenkins/apache-maven-3.8.7
export GIT_HOME=/home/jenkins/git-2.40.0
export PATH=$HOME/bin:$JAVA_HOME/bin:$MAVEN_HOME/bin:$GIT_HOME/bin:$PATH

3.3 然后我们配置服务端

3.3.1 安装插件

配置之前还需要安装几个插件

  • Ansible plugin
  • Publish Over SSH
  • Maven Intergration plugin

3.3.2 全局工具配置

点进全局工具配置

Dashboard > 系统管理 > 全局工具配置
全局工具配置

Maven 配置默认 settings 提供文件系统中的 settings 文件文件路径/home/jenkins/apache-maven-3.8.7/conf/settings.xml默认全局 settings 提供文件系统中的全局 settings 文件文件路径/home/jenkins/apache-maven-3.8.7/conf/settings.xml
JDK--新增JDKJDK别名jdk1.8.0_351JAVA_HOME/home/jenkins/jdk1.8.0_351自动安装(不选择)
Git installations--Add GitGitNamegit-2.40.0Path to Git executable/home/jenkins/git-2.40.0/bin/git自动安装(不选择)
Maven--新增 MavenMavenNamemaven-3.8.7MAVEN_HOME/home/jenkins/apache-maven-3.8.7自动安装(不选择)
Ansible--新增 AnsibleAnsibleNameansible2.9.27Path to ansible executables directory/bin自动安装(不选择)

4.配置任务

4.1 新建任务

一步一步操作

Dashboard
新建任务输入一个任务名称构建一个maven项目确定
进入Configure页面General--默认就好源码管理选择GitRepositoriesRepository URL填写gitlab源码地址Credentials选择账号密码没有的话点击添加,选择Usename With password,填写用户名密码备注,点击添加Branches to build指定分支(为空时代表any)*/test源码库浏览器(自动)构建触发器--默认就好构建环境--默认就好Pre Steps--默认就好,这是编译前的动作BuildRoot POMpom.xmlGoals and optionsclean package -DskipTests=true(这里我是跳过测试了)高级--默认就好Post Steps选择Run only if build succeeds其他的默认就好,我们稍后再配置构建设置、构建后操作--默认就好
保存

4.2 开始构建

点击进入项目
点击立即构建
点击左侧下面的编译过程中
查看控制台输出
第一次编译时可以看到:拉取代码Cloning the remote Git repositoryCloning repository **********下载文件First time build. Skipping changelog.Parsing POMsDownloaded artifact *********.pom然后会有报错Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0然后显示Finished: FAILURE提示编译失败这里的意思是jenkins的jdk版本只能大于等于11,而我们用来编译代码的jdk是8版本,所以失败我们直接第二次构建,不用管报错
第二次编译:拉取代码之后,会在后面显示Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0at *****************************ERROR: ================================================================================ERROR: Invalid project setup: Connection resetERROR: [JENKINS-18403][JENKINS-28294] JDK 'jdk1.8.0_351' not supported to run Maven projects.ERROR: Maven projects have to be launched with a Java version greater or equal to the minimum version required by the controller.ERROR: Use the Maven JDK Toolchains (plugin) to build your maven project with an older JDK.ERROR: Retrying with agent Java and setting compile/test properties to point to /home/jenkins/jdk1.8.0_351.ERROR: ================================================================================Established TCP socket on 43238[test] $ /home/jenkins/jdk-17.0.6/bin/java -cp*****************我们可以看到jenkins自动换成了17版本的jdk进行运行,这里不用担心,编译出来的包还是可以使用的,之后每次编译都会出现这个报错的,我们不用管他后面就是下载很多包,因为是第一次编译[INFO] Downloading from nexus-aliyun: 编译之后会看到[INFO] ------------------------------------------------------------------------[INFO] Reactor Summary for yggq 1.0-SNAPSHOT:[INFO] [INFO] zzx............................................... SUCCESS [  3.224 s][INFO] zzx1 ........................................ SUCCESS [01:13 min][INFO] zzx2 ........................................... .SUCCESS [  8.406 s][INFO] zzx3 ...........................................SUCCESS [ 18.337 s][INFO] zzx4 ....................................... .....SUCCESS [ 11.951 s][INFO] zzx5 ............................................ SUCCESS [  3.081 s][INFO] zzx6 ............................................ SUCCESS [  6.014 s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time:  02:11 min[INFO] Finished at: 2023-04-14T18:56:31+08:00[INFO] ------------------------------------------------------------------------显示编译成功,然后后面jenkins会整理数据和文件Waiting for Jenkins to finish collecting data[JENKINS] Archiving /home/jenkins/jenkins_data/workspace/test/zzx1/target/zzx-1.0-SNAPSHOT.jar to com.xyx.zzx/zzx1/1.0-SNAPSHOT/zzx-1.0-SNAPSHOT.jar能看到在工作空间下的target目录下生成了jar包,我们的编译是成功的,这个jar包就是我们要使用的jar包channel stoppedFinished: SUCCESS最后提示编译成功

5. 编写ansible-playbook

这里我们只需要编写playbook即可,配置文件和主机列表到jenkins里配置即可

su - jenkins
mkdir playbook
cd playbook
vi jar.yml

我这个maven的项目下面有几个子项目
所以这个playbook需要通用性,可以在jenkins中指定ansible的变量,在playbook中多使用变量来实现通用性
jenkins完成编译后,利用编译后的动作将jar包放到指定目录下,playbook将jar包进行备份归档,再利用每个主机上的启动停止脚本来进行jar包的启动和停止

---
---
- name: "本机备份jar包"hosts: localhosttasks:- name: "获取本机当前时间"debug:msg: "{{ hostvars['localhost']['ansible_date_time']['iso8601_basic_short'] }}"register: localdate- name: "查看版本包状态"stat:path: "{{ nasdir }}/{{ jarname }}"register: jarstat- debug:var: jarstat.stat.exists- name: "创建备份目录"file:path: "{{ nasdir }}/{{ localdate.msg }}"state: directorymode: 0777- name: "转移jar包到备份文件夹"copy:src: "{{ nasdir }}/{{ jarname }}"dest: "{{ nasdir }}/{{ localdate.msg }}"- file:path: "{{ nasdir }}/{{ jarname }}"state: absent- name: "更新版本信息"lineinfile:dest: "{{ nasdir }}/info.txt"regexp: "^previous version:"state: absentcreate: yes- replace:path: "{{ nasdir }}/info.txt"regexp: "lastest version"replace: "previous version"- lineinfile:path: "{{ nasdir }}/info.txt"regexp: 'add a line!'line: "lastest version: {{ localdate.msg }}"backrefs: no
- name: "jar自动上版"hosts: hostgather_facts: falseserial: 1tasks:- name: "获取本机当前时间"debug:msg: "{{ hostvars['localhost']['ansible_date_time']['iso8601_basic_short'] }}"register: localdate- name: "查看版本包状态"stat:path: "{{ nasdir }}/{{ localdate.msg }}/{{ jarname }}"register: jarstat- debug:var: jarstat.stat.exists- name: "关闭进程"shell: "sh ~/shutdown.sh"register: shutdownsh- debug:var: shutdownsh.stdout_lines- name: "删除旧版本包"file:path: "~/{{ jarname }}"state: absent- name: "拷贝版本包"copy:src: "{{ nasdir }}/{{ localdate.msg }}/{{ jarname }}"dest: "~"- name: "启动tomcat"shell: "sh ~/start.sh"register: startsh- debug:var: startsh.stdout_lines

根据playbook我们需要

  • 指定jarname-jar包名称
  • 指定nasdir-版本包存放位置
  • 指定logdir-日志位置
  • 家目录下停止启动的脚本-shutdown.sh、start.sh
  • nasdir 下有存放版本信息的文件-info.txt
  • 要实现滚动升级,并行数要设置为1

6. 准备jar包运行环境

远程到需要部署jar包的主机

  • 安装jdk8
  • 创建所需路径
su - root
useradd zzx
passwd zzx
mkdir /nas/testlog/
chown zzx:zzx /nas/testlog/
mkdir /nas/testpackage/
chown zzx:zzx /nas/testpackage/
vi mkdir /nas/testpackage/info.txt
lastest version:
previous version:
chown zzx:zzx /nas/testpackage/info.txt
  • 日志轮转
su - root
vi /etc/logrotate.d/jar
/nas/testlog/outlog.log {copytruncatedailyrotate 7 missingokcompressdelaycompress notifemptycreate 644 zzx zzxdateextdateformat -%Y%m%d%H.%s
}
  • 启动脚本
su - zzx
vi start.sh
#!/bin/bash
echo "开始启动"
/usr/sbin/logrotate -f /etc/logrotate.d/jar
nohup /usr/local/jdk1.8.0_351/bin/java -jar -Dfile.encoding=utf8 -Xms1024m -Xmx1024m /home/zzx/zzx-business-1.0-SNAPSHOT.jar --server.port=8848 --spring.profiles.active=test --logging.path=/nas/testlog/ >> /nas/testlog/outlog.log 2>&1  &
sleep 5
for ((i=1;i<=6;i++))
donacos=`grep -E 'NacosServiceRegistry - nacos registry, DEFAULT_GROUP \S* \S*:\S* register finished' /nas/testlog/outlog.log `if [ -z "$nacos" ]thenecho "请稍等。。。。"sleep 5elseecho "已启动!"grep -E 'NacosServiceRegistry - nacos registry, DEFAULT_GROUP \S* \S*:\S* register finished' /nas/testlog/outlog.log echo `ps -ef| grep 'zzx' | grep -v 'grep' |awk '{print $1,$2}'`breakfi
done
  • 停止脚本
vi shutdown.sh
#!/bin/bash
pid=`ps -ef| grep 'zzx' | grep -v 'grep' |awk '{print $2}'`
if [ ! -z "$pid" ]
thenkill $pid
fi
sleep 5
for ((i=1;i<10;i++))
dopid2=`ps -ef| grep 'zzx' | grep -v 'grep' |awk '{print $2}'`if [ ! -z "$pid2" ]thenecho "请稍等。。。。"sleep 5elseecho "已关闭!"breakfi
done

7. 配置jenkins上的ansible

7.1 先配置ssh主机

Dashboard > 系统管理 > Configure System
找到 Publish over SSH
点击新增

SSH ServersSSH ServerNamelocalhostHostname127.0.0.1UsernamejenkinsRemote Directory/高级勾选Use password authentication, or use a different keyPassphrase / Password主机密码下面的默认即可
点击Test Configuration进行测试
返回Success即成功
点击最下方应用

7.2 配置任务

Dashboard > 你的项目 > Configuration

7.2.1 添加文件传输过程

拉到最下面找到Post Steps
点选Run only if build succeeds
点击Add post-build step,选择Send files or execute commands over SSH
这步是为了编译后传输文件到指定位置
Send files or execute commands over SSH
SSH PublishersSSH ServerNamelocalhost(选择刚才添加的主机)高级点选Verbose output in console其他默认TransfersTransfer SetSource files(这是编译出来的jar包位置,jenkins编译后默认在工作空间内,所以写相对路径)zzx-test/target/zzx-1.0-SNAPSHOT.jarRemove prefix(我们只需要jar包,所以把前面的路径去掉,否则会创建相对路径)zzx-test/targetRemote directory(这个路径最前面的/会自动去掉,所以配置时需要看ssh主机的Remote Directory参数,配置成他的相对路径)/nas/testpackageExec commandecho "传输版本包"高级默认即可

7.2.2 添加执行的ansible

找到Post Steps
点选Run only if build succeeds
点击Add post-build step,选择Invoke Ansible Playbook
Ansible installationansible2.9.27
Playbook path/home/jenkins/playbook/jar.yml
Inventory选择Inline content不勾选Dynamic inventoryContent[host]192.168.1.1
Host subset不填,我实验填了就不好使了,原因请哪位大神告知一下
Credentials主机用户名密码,没有的话添加一下凭证
Vault Credentials默认即可
高级Number of parallel processes这里填1,并行数设置成1,进行滚动升级Disable the host SSH key check勾选上,不保存主机公钥,省的ssh升级之后登录报错Unbuffered stdout勾选上Extra VariablesKeyjarnameValuezzx-1.0-SNAPSHOT.jarKeynasdirValue/nas/testpackageKeylogdirValue/nas/testlog/

最后点击保存

8. 开始构建

点击立即构建
打开控制台输出

在编译代码整理数据之后会看到
channel stopped
SSH: Connecting from host [zzx]
SSH: Connecting with configuration [localhost] ...
***
SSH: put [zzx-1.0-SNAPSHOT.jar]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [echo "传输版本包"] ...
SSH: EXEC: connected
传输版本包
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [localhost] ...
SSH: Transferred 1 file(s)

可以看到ssh的配置生效了,jenkins把版本包放到了指定的目录下
接着看

[test] $ sshpass ******** /bin/ansible-playbook /home/jenkins/playbook/jar.yml -i /tmp/inventory4167368454137635701.ini -f 1 -u zzx -k -e jarname=zzx-1.0-SNAPSHOT.jar -e nasdir=/nas/testpackage -e logdir=/nas/testlogPLAY [本机备份jar包] ****************************************************************TASK [Gathering Facts] *********************************************************
ok: [localhost]
****
PLAY RECAP *********************************************************************
192.168.1.1             : ok=9    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
localhost                  : ok=10   changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   Finished: SUCCESS

我们可以看到ansible的任务也执行成功
我们可以去主机上看各个文件,日志状态是否正确
至此,我们的jenkins+ansible就成功完成了

Gungnir系列-jenkins01-编译部署maven项目(新版本)相关推荐

  1. Jenkins部署maven项目找不到jar包解决

    Jenkins部署maven项目找不到jar包解决 环境部署 问题描述 解决方案 环境部署 1. centos搭建java部署环境 2. jenkins环境搭建 3. jenkins部署springb ...

  2. 基于建木CI部署maven项目

    ​1. 前置准备工作 使用环境: 测试环境: 操作系统:Centos7 cpu:四核 内存:4G docker版本:20.10.8 建木CI版本:v2.0.0 2. 如何安装建木CI 使用docker ...

  3. Tomcat部署maven项目

    部署方式有几种,这里介绍热部署,即tomcat处于启动状态 一.热部署 步骤: 1.安装好tomcat.maven或者在eclipse中安装好maven插件,这里以插件示例: 2.设置好maven的本 ...

  4. IDEA报错总结:修改Java编译版本--maven项目

    之前写过2篇文章: 解决IDEA报错:Lambda expressions not supported at language level '7' IDEA报错解决:Error:(33, 35) ja ...

  5. maven引入依赖包,import依赖包,编译运行maven项目

    文章目录 IDEA中新建一个maven项目 在pom.xml中添加依赖包,确定依赖包成功导入,在项目中import依赖包 怎么确定maven成功的导入了依赖包 在项目中import导入的依赖包 总结 ...

  6. git maven 一键部署_Jenkins实现一键部署maven项目

    git插件安装 进入菜单"jenkins>系统管理>管理插件>可选插件",在右侧搜索栏输入"Git Plugin",也可以搜索安装" ...

  7. eclipse中编译运行maven项目使用jetty

    1.在plugins中添加jetty节点 <plugin><groupId>org.mortbay.jetty</groupId><artifactId> ...

  8. 解决部署maven项目将mysql5.7改为mysql8.0

    之前尝试了很多种,学习了这篇成功调试出来了. https://blog.csdn.net/zz18435842675/article/details/99675926?ops_request_misc ...

  9. Maven项目整合讲义(Eclipse版)

      1.  Maven概述 1.1.   Maven是什么 Maven是一个由Apache基金会维护的项目构建工具. 1.2.   项目构建是什么 我们将项目的代码从源代码到具体程序文件的过程称为代码 ...

最新文章

  1. python菜鸟excel教程-Python操作Excel的Xlwings教程(一)
  2. 将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中
  3. 腾讯、百度、小米等7家互联网各大厂的中台建设怎么样了?
  4. 内存还剩余很多,却使用 swap 分区
  5. 萌新的Python练习实例100例(五)输入三个整数x,y,z,请把这三个数由小到大输出。
  6. ArcGIS——Window Server2016中的安装10.2问题
  7. Security+ 学习笔记39 安全网络设计
  8. 【渝粤教育】国家开放大学2018年春季 3717-22T天然气管道长输技术 参考试题
  9. WCF开发中遇到的问题及解决系列(一):运行WCF客户端时碰到错误“AddressAlreadyInUseException”...
  10. PID控制以及各种控制环节-C语言实现
  11. 阿里云平台购买域名 免费申请SSL证书
  12. 时间序列平稳性检验—R语言KPSS检验
  13. 装linux系统的工具箱,PE,Dos工具箱,自动安装linux的U盘制作
  14. 计算机桌面颜色异常怎样修复,显示器颜色不正常如何调_电脑显示屏的颜色不对如何处理...
  15. 如何才能高效的学习编程语言(分享)
  16. 【信息保护论】信息保护与密码学
  17. 转 C# 托管内存与非托管内存之间的转换
  18. css单边投影与双侧投影
  19. java的包装类型是什么用_Java基本类型和包装类型的区别
  20. 我国制药装备市场规模不断扩大,技术水准和综合实力显著提升

热门文章

  1. python 没有网 创建python虚拟环境
  2. 用计算机怎么计算sh 3,Shell 实现简单计算器功能
  3. vue中emit的用法
  4. python-js逆向人人网登录
  5. 习题7-10 守卫棋盘(Guarding the Chessboard,UVa11214)
  6. 四个步骤教你入门Selenium+python脚本编写
  7. 注意力机制的原理及实现(pytorch)
  8. android 开发零起步学习笔记(二十二):ANDROID应用ACTIVITY、DIALOG、POPWINDOW、TOAST窗口添加机制及源码分析(一)
  9. 终身学习--启程篇:清华大学 《ARM控制器与嵌入式系统》
  10. 京东的offer真就这么难拿?专科学历——京东5面终收offer