准备工作:

  1. 安装Tomcat

  2. 安装Maven

  3. 安装Git

  4. 安装Jdk

Tomcat下Jenkins安装:

Jenkins的安装与设置

选择war包下载 http://my-tech.oss-cn-hangzhou.aliyuncs.com/jenkins.war

  1. 将Jenkins的war包放到tomcat的应用目录(默认在tomcat目录下的webapp)中:

  2. 启动tomcat 切换到tomcat下的bin目录

    	cd /home/apache-tomcat-8.5.43/bin/
    	./startup.sh
    

    忽略我的关闭操作,显示tomcat started表示启动成功

  3. 打开浏览器进入jenkins操作页面: 运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码:http://ip:8080/jenkins 查看管理员密码

    	cat /root/.jenkins/secrets/initialAdminPassword
    

    输入后不要选择安装推荐插件,直接跳过,因为jenkins自己的站点下载速度很慢(后续我们会改成清华大学镜像地址)。 然后就会让你创建管理员账号,以后登录就可以通过这个账号登录。

  4. jenkins插件地址更新: 选择 Manage Jenkins,进入插件管理(Manage Plugins)——高级——升级站点 将下面的站点url更新成 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 并保存

    欺骗jenkins 我要去清华真实下载插件 在服务器hosts(地址:/etc/hosts)中加上这么一句:

    	### jenkins ###
    	127.0.0.1 mirrors.jenkins-ci.org
    

    添加nginx反向代理

    	vi /usr/local/nginx/conf.d/vhost.conf
    

    将下面复制到里面,并重启nginx

    	server
    	    {
    	        listen 80;
    	        server_name mirrors.jenkins-ci.org;
    
    	        location / {
    	            proxy_redirect off;
    	            proxy_pass https://mirrors.tuna.tsinghua.edu.cn/jenkins/;
    	            proxy_set_header X-Real-IP $remote_addr;
    	            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	            proxy_set_header Accept-Encoding "";
    	            #proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.49 Safari/537.36";
    	            proxy_set_header Accept-Language "zh-CN";
    	        }
    	        index index.html index.htm index.php;
    
    	        #error_page   404   /404.html;
    
    	        location ~ /\.
    	        {
    	            deny all;
    	        }
    	    }
    
  5. 下载需要的插件进行安装: Git Maven Integration

  6. 配置jenkins中的jdk,maven,git 保存

配置自动部署

  1. 新建工程-->构建一个Maven项目

  2. 源码管理选择Git,Repository URL填入Git仓库的地址

    在Credentials添加自己Git仓库的账号名和密码,选择分支(默认master)

  3. 构建中Goals and options填入clean install 点击构建右下角的高级,选择使用自定义的工作空间,目录中填入你想打包的目录地址(到这一步打包就能完成了)。Settings file和Global Settings file填入maven的settings.xml地址

  4. 点击下面的add post-build step,选择execute shell,命令框中就是打包后执行的shell命令。

source /etc/profile
#切换到打包的jar文件目录
cd /home/jenkinsWebApps/Blog/target
#移动jar文件到我的指定启动目录
mv my-blog-1.0.0-SNAPSHOT.jar /home/web/myblog
#切换到启动目录
cd /home/web/myblog
#执行脚本,重启项目
./start.sh restart

脚本内容:

#!/bin/bash
cd `dirname $0`
CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`
#修改这里jar包名即可
JAR_NAME="my-blog-1.0.0-SNAPSHOT.jar" 
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME
#配置堆内存大小,非堆内存大小,垃圾回收器CMS(降低stw时间为200MS)
JAVA_MEM_OPTS=" -server -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128M -XX:+UseConcMarkSweepGC"
#JAVA_MEM_OPTS=""
#SPRING_PROFILES_ACTIV="-Dspring.profiles.active=eureka2"
SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME}.log
echo_help()
{
    echo -e "syntax: sh $CUR_SHELL_NAME start|stop|restart"
}
if [ -z $1 ];then
    echo_help
    exit 1
fi
if [ ! -d "$LOG_DIR" ];then
    mkdir "$LOG_DIR"
fi
if [ ! -f "$LOG_PATH" ];then
    touch "$LOG_DIR"
fi
if [ "$1" == "start" ];then
# check server
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -n "$PIDS" ]; then
        echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."
        exit 1
    fi
echo "Starting the $JAR_NAME..."
 
    # start
	#jenkins启动必须加这句话,不然不会启动成功,因为Jenkins默认会在Build结束后Kill掉所有的衍生进程
    export BUILD_ID=dontKillMe
    nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
        if [ $COUNT -gt 0 ]; then
            break
        fi
    done
    PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
    echo "${JAR_NAME} Started and the PID is ${PIDS}."
    echo "You can check the log file in ${LOG_PATH} for details."
	#奇怪如果去掉以下延时,就会被jenkins杀掉
    sleep 10s
 
elif [ "$1" == "stop" ];then
 
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
        echo "ERROR:The $JAR_NAME does not started!"
        exit 1
    fi
echo -e "Stopping the $JAR_NAME..."
 
    for PID in $PIDS; do
        kill $PID > /dev/null 2>&1
    done
 
    COUNT=0
    while [ $COUNT -lt 1 ]; do
        sleep 1
        COUNT=1
        for PID in $PIDS ; do
            PID_EXIST=`ps --no-heading -p $PID`
            if [ -n "$PID_EXIST" ]; then
                COUNT=0
                break
            fi
        done
    done
 
    echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
elif [ "$1" == "restart" ];then
    PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`
    if [ -z "$PIDS" ]; then
		echo -e "The $JAR_NAME does not started!"
	else
		echo -e "Stopping the $JAR_NAME..."
		for PID in $PIDS; do
			kill $PID > /dev/null 2>&1
		done
		
		COUNT=0
		while [ $COUNT -lt 1 ]; do
			sleep 1
			COUNT=1
			for PID in $PIDS ; do
				PID_EXIST=`ps --no-heading -p $PID`
				if [ -n "$PID_EXIST" ]; then
					COUNT=0
					break
				fi
			done
		done
		echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
	fi
	
	# start
	export BUILD_ID=dontKillMe
	nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &
 
	COUNT=0
	while [ $COUNT -lt 1 ]; do
		sleep 1
		COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`
		if [ $COUNT -gt 0 ]; then
			break
		fi
	done
	PIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`
	echo "${JAR_NAME} Started and the PID is ${PIDS}."
	echo "You can check the log file in ${LOG_PATH} for details."
	sleep 10s
else
    echo_help
    exit 1
fi

jenkins下的启动日志:

配置推送自动触发

Jenkins首页进入用户列表 选择当前用户 进入左侧的设置,并新增一个Token并记录下来。 在你的代码管理平台仓库中配置WebHook。 host 前面加上 [Application ID]:[Token]@,比如

http://myid:mytoken@myjenkins.com/job/myJobName/build?token=my_job_token

myid:Jenkins中生成token的用户id mytoken: 刚刚生成的token字符串

如图所示就能够推送自动部署了

以上操作只是一种方式,其实Jenkins安装部署还有很多种方式,我之前去网上找了很多篇文章,都没有成功,这次只是把自己的操作流程写下来?。