准备工作:
-
安装Tomcat
-
安装Maven
-
安装Git
-
安装Jdk
Tomcat下Jenkins安装:
选择war包下载 http://my-tech.oss-cn-hangzhou.aliyuncs.com/jenkins.war
-
将Jenkins的war包放到tomcat的应用目录(默认在tomcat目录下的webapp)中:
-
启动tomcat 切换到tomcat下的bin目录
cd /home/apache-tomcat-8.5.43/bin/ ./startup.sh
忽略我的关闭操作,显示tomcat started表示启动成功
-
打开浏览器进入jenkins操作页面: 运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码:http://ip:8080/jenkins 查看管理员密码
cat /root/.jenkins/secrets/initialAdminPassword
输入后不要选择安装推荐插件,直接跳过,因为jenkins自己的站点下载速度很慢(后续我们会改成清华大学镜像地址)。 然后就会让你创建管理员账号,以后登录就可以通过这个账号登录。
-
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; } }
-
下载需要的插件进行安装: Git Maven Integration
-
配置jenkins中的jdk,maven,git 保存
配置自动部署
-
新建工程-->构建一个Maven项目
-
源码管理选择Git,Repository URL填入Git仓库的地址
在Credentials添加自己Git仓库的账号名和密码,选择分支(默认master)
-
构建中Goals and options填入clean install 点击构建右下角的高级,选择使用自定义的工作空间,目录中填入你想打包的目录地址(到这一步打包就能完成了)。Settings file和Global Settings file填入maven的settings.xml地址
-
点击下面的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:[email protected]/job/myJobName/build?token=my_job_token
myid:Jenkins中生成token的用户id mytoken: 刚刚生成的token字符串
如图所示就能够推送自动部署了
以上操作只是一种方式,其实Jenkins安装部署还有很多种方式,我之前去网上找了很多篇文章,都没有成功,这次只是把自己的操作流程写下来?。