jenkins部署

jenkins linux

一、环境部署

注:以下操作都是在 /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@qq.com"

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.gz
更改名称: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
"
新建目录 mkdir /home/deploy/jenkins/plugins/
下载启动必要插件: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   <url>http://mirror.xmission.com/jenkins/updates/update-center.json</url>
/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、创建用户登录

创建用户登录

4、安装插件

安装插件

安装以下插件:
Locale
GitLab
Publish Over SSH
SSH
Maven Integration
NodeJS
Workspace Cleanup

5、全局工具配置

全局工具配置

1)Maven settings 文件配置

maven配置

2)JDK 配置

jdk配置

3)Git配置

git配置

4)Maven 配置

maven配置

5)Node JS 配置

node js配置

5、其他配置

1)Git 凭证配置

git凭证配置

2)配置shell命令

shell配置

3)添加用户名密码

添加用户名密码

4)远程传输文件配置

远程配置

三、Jenkins打包构建

1、基础jar包
1)新建任务

基础jar包

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

前端打包构建

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包报错如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmxWXGLh-1600330247060)(C:\Users\王延\AppData\Roaming\Typora\typora-user-images\image-20200911184810483.png)]

黑框里依次为:
组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勾选了 “构建前删除当前构建空间” 选项,如下图:

0

解决方法:关闭Jenkins所在服务器所有已打开的文件和文件夹即可

4、打包构建后提示为黄色

0

一般为网络不稳定,上传文件失败,或执行本地、远程shell命令失败,如下图:

0

解决方法:检查shell命令,重新打包。网络问题的话到Jenkins服务器下找到对应项目的工作空间直接拷贝war上传到服务器重启更新

5、无法找到XXX文件,没有那个文件或目录,XXX****文件或文件夹不存在

一般为shell脚本里文件或文件夹或目录名称写错了

解决方法:检查shell脚本,把shell脚本复制到服务器执行一遍

6、打包构建时间过长

一般为网络问题

解决方法:到项目服务器/home/deploy/jenkins/目录下查看上传的项目war包大小变化,太慢的话直接到Jenkins服务器拷贝war到项目服务器重启更新

7、其他问题解决

出现问题Jenkins的控制台输出都会有明确提示信息的,在控制台输出页面 “Ctrl + F”,全局搜索 “ERROR”,如下图

0

ERRO后面就是具体的报错信息,报错信息会明确输出的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值