linux搭建jenkins持续基础

原文笔记链接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.xml   http://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、初始密码
linux搭建jenkins持续基础_第1张图片
 
2、选择自定义安装插件
linux搭建jenkins持续基础_第2张图片
 
3、创建用户登陆
linux搭建jenkins持续基础_第3张图片
 
 
3、更改插件下载源:http://mirror.xmission.com/jenkins/updates/update-center.json
linux搭建jenkins持续基础_第4张图片
 
 
4、插件安装
 
安装以下插件:
Locale
Git
Publish Over SSH
SSH
Maven Integration
NodeJS
Workspace Cleanup
 
5、全局工具配置
1)Maven sellings 文件配置
linux搭建jenkins持续基础_第5张图片
 
2)Jdk 配置
linux搭建jenkins持续基础_第6张图片
 
3)Git 配置
linux搭建jenkins持续基础_第7张图片
 
4)Maven 配置
linux搭建jenkins持续基础_第8张图片
 
5)NodeJS 配置
linux搭建jenkins持续基础_第9张图片
 
6、其他配置
1)git 凭证配置
linux搭建jenkins持续基础_第10张图片
 
 
2)远程执行 shell 命令配置
linux搭建jenkins持续基础_第11张图片
 
添加用户名密码
linux搭建jenkins持续基础_第12张图片
 
 
3)远程传输文件配置
linux搭建jenkins持续基础_第13张图片
 
三、Jenkins打包构建
1、基础 jar 包
1)新建任务
linux搭建jenkins持续基础_第14张图片
 
2)源码管理
linux搭建jenkins持续基础_第15张图片
 
3)构建触发器
linux搭建jenkins持续基础_第16张图片
 
4)构建环境
linux搭建jenkins持续基础_第17张图片
 
5)构建配置
linux搭建jenkins持续基础_第18张图片
注:如果打包失败提示找不到xxx基础依赖,先让开发打包构建后上传到私服后在打包构建
 
2、项目 war 包、jar 包构建
1)新建任务
linux搭建jenkins持续基础_第19张图片
 
2)源码管理
linux搭建jenkins持续基础_第20张图片
 
3)构建环境
linux搭建jenkins持续基础_第21张图片
 
4)构建配置
linux搭建jenkins持续基础_第22张图片

 

5)构建
linux搭建jenkins持续基础_第23张图片
 
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)新建任务
linux搭建jenkins持续基础_第24张图片
 
2)源码管理
linux搭建jenkins持续基础_第25张图片
 
3)构建环境
linux搭建jenkins持续基础_第26张图片
 
4)构建配置
linux搭建jenkins持续基础_第27张图片
注:需要先下载依赖
 
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找不到符号
linux搭建jenkins持续基础_第28张图片
开发代码问题,让开发修改好以后重新提交代码,重新打包构建即可。
 
3、无法删除工作空间
一般出现在Jenkins服务安装在Windows机器上,并且Jenkins勾选了 "构建前删除当前构建空间" 选项,如下图:
linux搭建jenkins持续基础_第29张图片
解决方法:关闭Jenkins所在服务器所有已打开的文件和文件夹即可
 
4、打包构建后提示为黄色
一般为网络不稳定,上传文件失败,或执行本地、远程shell命令失败,如下图:
解决方法:检查shell命令,重新打包。网络问题的话到Jenkins服务器下找到对应项目的工作空间直接拷贝war上传到服务器重启更新
 
5、无法找到XXX文件,没有那个文件或目录,XXX文件或文件夹不存在
一般为shell脚本里文件或文件夹或目录名称写错了
解决方法:检查shell脚本,把shell脚本复制到服务器执行一遍
 
6、打包构建时间过长
一般为网络问题
解决方法:到项目服务器/home/deploy/jenkins/目录下查看上传的项目war包大小变化,太慢的话直接到Jenkins服务器拷贝war到项目服务器重启更新
 
7、其他问题解决
出现问题Jenkins的控制台输出都会有明确提示信息的,在控制台输出页面 “Ctrl + F”,全局搜索 “ERROR”,如下图
linux搭建jenkins持续基础_第30张图片
 
ERRO后面就是具体的报错信息,报错信息会明确输出的

你可能感兴趣的:(linux搭建jenkins持续基础)