原文笔记链接:https://note.youdao.com/ynoteshare1/index.html?id=669e23ab3b00bb7f9cbc2c95ad27e886&type=note
一、环境搭建
注:以下操作都是在 /home/deploy/ 路径下
1、Java
下载:wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz" 解压:tar zxvf jdk-8u141-linux-x64.tar.gz 重命名:mv jdk1.8.0_141 jdk8 环境变量配置: vim /etc/profile 加入以下: export JAVA_HOME=/home/deploy/jdk8 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin 保存::wq 刷新:source /etc/profile 验证:java -version
2、Maven
maven 历史版本:https://archive.apache.org/dist/maven/maven-3/ 下载:wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 解压:tar zxvf apache-maven-3.3.9-bin.tar.gz mv apache-maven-3.3.9-bin maven 环境变量配置: vim /etc/profile 加入以下: export MAVEN_HOME=/home/deploy/maven export PATH=$MAVEN_HOME/bin:$PATH 保存::wq 刷新:source /etc/profile 验证:mvn -version maven 目录下新建 repository:mkdir repository maven settings.xml 找开发人员要 3、Git 下载:wget https://github.com/git/git/archive/v2.26.0.zip 下载依赖:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 解压: unzip v2.26.0.zip 移除旧: yum -y remove git 进入git目录: cd /home/deploy/git-2.26.0 编译git源码: make prefix=/usr/local/git all 安装:make prefix=/home/deploy/git install 环境变量配置: vim /etc/profile 加入以下: export PATH=$PATH:/home/deploy/git/bin 保存::wq 刷新:source /etc/profile 验证:git --version 设置git: git config --global user.name "name" git config --global user.email "email" 生成密钥:ssh-keygen -t rsa -C "[email protected]"
4、Node JS
下载:wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.gz 解压:tar xvf node-v12.13.0-linux-x64.tar.xz 更改名称:mv node-v12.13.0-linux-x64 nodejs 环境变量配置: vim /etc/profile 加入以下: export NODE_HOME=/home/deploy/nodejs export PATH=$PATH:$NODE_HOME/bin 保存::wq 刷新:source /etc/profile 验证:node -v
5、Jenkins
下载:wget https://pkg.jenkins.io/redhat-stable/jenkins-2.204.2-1.1.noarch.rpm 安装:rpm -ih jenkins-2.204.2-1.1.noarch.rpm 修改工作目录: vim /etc/sysconfig/jenkins JENKINS_HOME=/home/deploy/jenkins 修改用户:vim /etc/sysconfig/jenkins JENKINS_USER="root" 添加java环境:vim /etc/init.d/jenkins candidates=" /home/deploy/jdk11/bin/java " 下载启动必要插件:cd /home/deploy/jenkins/plugins/ wget http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/6.12/cloudbees-folder.hpi 修改插件下载源:cd /home/deploy/jenkins/plugins/ vim hudson.model.UpdateCenter.xmlhttp://mirror.xmission.com/jenkins/updates/update-center.json /usr/lib/jenkins/jenkins.war WAR包 /etc/sysconfig/jenkins 配置文件 /var/lib/jenkins/ 默认的JENKINS_HOME目录 /var/log/jenkins/jenkins.log Jenkins日志文件 启动: service jenkins start 重启: service jenkins restart 停止: service jenkins stop 访问:ip+端口, 第一次登录Jenkins会要求解锁,打开红色标记中的路径,取出password
二、Jenkins配置
1、初始密码
2、选择自定义安装插件
3、创建用户登陆
3、更改插件下载源:http://mirror.xmission.com/jenkins/updates/update-center.json
4、插件安装
安装以下插件:
Locale
Git
Publish Over SSH
SSH
Maven Integration
NodeJS
Workspace Cleanup
5、全局工具配置
1)Maven sellings 文件配置
2)Jdk 配置
3)Git 配置
4)Maven 配置
5)NodeJS 配置
6、其他配置
1)git 凭证配置
2)远程执行 shell 命令配置
添加用户名密码
3)远程传输文件配置
三、Jenkins打包构建
1、基础 jar 包
1)新建任务
2)源码管理
3)构建触发器
4)构建环境
5)构建配置
注:如果打包失败提示找不到xxx基础依赖,先让开发打包构建后上传到私服后在打包构建
2、项目 war 包、jar 包构建
1)新建任务
2)源码管理
3)构建环境
4)构建配置
5)构建
pack.sh代码
#!/bin/bash name=$1 port=$2 echo "===========================================================================" echo "`date "+%Y-%m-%d %H:%M:%S"` 删除的旧包为: /home/deploy/${name}/webapps/" #ls /home/deploy/${name}/webapps/ | grep -v application.properties | xargs rm -rf rm -fr /home/deploy/${name}/webapps/* if [ $? -eq 0 ];then echo "`date "+%Y-%m-%d %H:%M:%S"` 删除成功" else echo "`date "+%Y-%m-%d %H:%M:%S"` 删除失败" fi echo "`date "+%Y-%m-%d %H:%M:%S"` 删除完毕, 请留意提示是否删除成功" echo "============================================================================" echo "" echo "" echo "============================================================================" echo "`date "+%Y-%m-%d %H:%M:%S"` 拷贝新包 ${name} 到 --> ${name}" cd /home/deploy/jenkins_jobs/workspace/${name}/target/ \cp -rf *.war /home/deploy/${name}/webapps/ echo "============================================================================" echo "" echo "" echo "============================================================================" echo "端口号为: ${port}" echo "进程PID为: `netstat -anp|grep ${port}`" echo "PID: `netstat -tunlp|grep ${port}|awk '{print $7}'|awk -F '/' '{print $1}'|xargs`" pid="`netstat -anp|grep ${port}`" echo "`date "+%Y-%m-%d %H:%M:%S"` 杀死进程中...... ${pid}" sleep 3s kill -9 $(lsof -i :${port}| awk '{print $2}'| sed -n '2p') kill -9 $(lsof -i :${port}| awk '{print $2}'| sed -n '2p') while [ `netstat -anp|grep ${port}`!="" ] do kill -9 $(lsof -i :${port}| awk '{print $2}'| sed -n '2p') echo "`date "+%Y-%m-%d %H:%M:%S"` ${pid} 已杀死" sleep 3s if [ `netstat -anp|grep ${port}`="" ];then echo "进程: `netstat -anp|grep ${port}`" echo "`date "+%Y-%m-%d %H:%M:%S"` 确认结束进程" break fi done echo "========================================================================================" echo "" echo "" echo "=========================================================================================" echo "`date "+%Y-%m-%d %H:%M:%S"` 等待启动中......" sleep 5s echo "`date "+%Y-%m-%d %H:%M:%S"` 启动 ---> ${name} 项目" cd /home/deploy/${name}/bin/ sh startup.sh #sh /home/deploy/${name}/bin/startup.sh sleep 5s a=`netstat -anp|grep ${port}|wc -l` if [ "${a}" -eq "1" ]&&[[ `netstat -anp|grep ${port}`!="" ]] ;then echo "`date "+%Y-%m-%d %H:%M:%S"` ${name} 服务启动 ---> 成功" sleep 5s echo "=====================================================================================" echo "" echo "" echo "`date "+%Y-%m-%d %H:%M:%S"` 等待日志输出中......" sleep 10s echo "" echo "" echo "===========================================================日志输出===========================================================" s1="start Server startup in" for i in $(seq 1 100) do s2=`tail -n 20 /home/deploy/${name}/logs/catalina.out` result=$(echo ${s2} | grep "${s1}") if [[ "$result" = "" ]] then echo "`date "+%Y-%m-%d %H:%M:%S"` 日志输出 ---> 正在启动...... ${i}" sleep 2s if [[ "${i}" = "100" ]]&&[[ `lsof -i :${port}`="" ]] then echo "`date "+%Y-%m-%d %H:%M:%S"` 启动 ${name} 失败, 详情见下方日志" break else echo "`date "+%Y-%m-%d %H:%M:%S"` 日志输出 ---> 启动 ${name} 完毕! ---> 请检查以下最后 100 行日志!!!" break fi elif [[ "$result" != "" ]] then echo "`date "+%Y-%m-%d %H:%M:%S"` 日志输出 ---> 启动 ${name} 完毕! ---> 请检查以下最后 100 行日志!!!" break fi done echo "===========================================================================================================" echo "" echo "" sleep 3s tail -n 100 /home/deploy/${name}/logs/catalina.out echo "" echo "" echo "=========================== `date "+%Y-%m-%d %H:%M:%S"` ${name} 打包结束, 请检查日志是否启动成功 ==============================" echo "" echo "" echo "再次检查: " echo "`ps -ef | grep ${port}`" else echo "${time} ${name} 服务启动 ---> 失败, 启动命令执行失败" fi echo "当前时间: `date "+%Y-%m-%d %H:%M:%S"`" exit 0
3、前端打包构建
1)新建任务
2)源码管理
3)构建环境
4)构建配置
注:需要先下载依赖
front.sh 脚本代码
#!/bin/bash export NODE_HOME=/home/deploy/nodejs export PATH=$PATH:$NODE_HOME/bin name=$1 comm=$2 echo "" echo "`date "+%Y-%m-%d %H:%M:%S"` 开始打包, 请稍等......" cd /home/deploy/jenkins_jobs/workspace/${name}/ echo `npm run ${comm}` sleep 10s echo "" cd /home/deploy/jenkins_jobs/workspace/${name}/ cp -rf dist /home/deploy/jenkins_jobs/workspace/${name}/${name} if [ -d "/home/deploy/jenkins_jobs/workspace/${name}/${name}/" ];then echo "${name} 文件夹存在, 构建成功" echo "" echo "拷贝新包 ${name} 到 ---> ip:/home/deploy/nginx/html/ 目录下" \scp -P port -r /home/deploy/jenkins_jobs/workspace/${name}/${name} root@ip:/home/deploy/nginx/html/ echo "" echo "`date "+%Y-%m-%d %H:%M:%S"` 打包全部完成" sleep 3s echo "" echo "`date "+%Y-%m-%d %H:%M:%S"` 打包项目为: ${name}" echo "删除 ${name} 下除了 node_modules 依赖外所有文件" cd /home/deploy/jenkins_jobs/workspace/${name}/ ls | grep -v node_modules | xargs rm -fr else echo "${name} 文件夹不存在, 打包失败" fi
四、Jenkins问题解决
1、找不到基础依赖
Jenkins从git上拉取jar包的时候可能会有个别包没有下载到本地,这时候就要用命令行本地安装一下
jenkins从git拉取基础jar包报错如图:
黑框里依次为:
组ID:-DgroupId=com.azazar
jar包名称:-DartifactId=bitcoin-json-rpc-client
jar包版本:-Dversion=1.0.1-SNAPSHOT.jar
maven构建基础jar包命令:
mvn install:install-file -Dfile=D:\apache-maven-3.6.1\repository\bitcoin-json-rpc-client-1.0.1-SNAPSHOT.jar -DgroupId=com.azazar -DartifactId=bitcoin-json-rpc-client -Dversion=1.0.1-SNAPSHOT -Dpackaging=jar
解析:
-Dfile=:需要安装的jar包绝对路径,如:
-Dfile=D:\apache-maven-3.6.1\repository\bitcoin-json-rpc-client-1.0.1-SNAPSHOT.jar
-DgroupId=:组ID,如:
-DgroupId=com.azazar
-DartifactId=:jar包名称,如:
-DartifactId=bitcoin-json-rpc-client
-Dversion=:jar包版本,类似以下:
-Dversion=1.0.1-SNAPSHOT.jar
注意:jar包带 SNAPSHOT 为快照版本,不带 SNAPSHOT 为正常版本,注意分辨安装
2、XXX程序包不存在、XXX找不到符号
开发代码问题,让开发修改好以后重新提交代码,重新打包构建即可。
3、无法删除工作空间
一般出现在Jenkins服务安装在Windows机器上,并且Jenkins勾选了 "构建前删除当前构建空间" 选项,如下图:
解决方法:关闭Jenkins所在服务器所有已打开的文件和文件夹即可
4、打包构建后提示为黄色
一般为网络不稳定,上传文件失败,或执行本地、远程shell命令失败,如下图:
解决方法:检查shell命令,重新打包。网络问题的话到Jenkins服务器下找到对应项目的工作空间直接拷贝war上传到服务器重启更新
5、无法找到XXX文件,没有那个文件或目录,XXX文件或文件夹不存在
一般为shell脚本里文件或文件夹或目录名称写错了
解决方法:检查shell脚本,把shell脚本复制到服务器执行一遍
6、打包构建时间过长
一般为网络问题
解决方法:到项目服务器/home/deploy/jenkins/目录下查看上传的项目war包大小变化,太慢的话直接到Jenkins服务器拷贝war到项目服务器重启更新
7、其他问题解决
出现问题Jenkins的控制台输出都会有明确提示信息的,在控制台输出页面 “Ctrl + F”,全局搜索 “ERROR”,如下图
ERRO后面就是具体的报错信息,报错信息会明确输出的