当前位置:   article > 正文

Jenkins - 单机和集群搭建、基于git分支部署spring boot项目(脚本、docker发布)、gitlab钩子部署【图文详解】_jenkins集群部署

jenkins集群部署

目录

Jenkins使用Docker方式安装

直接使用 Jenkins.war 启动

配置管理Jenkins

1、Jenkins原理和基本初始化

2、安装 Publish over SSH插件

3、安装和配置工具【jdk、git、maven】

4、配置项目 

5、基于git分支部署【可选项】

5-1)、输入框方式

5-2)、下拉选项方式 

6-1、脚本命令行部署

6-2、脚本Docker部署


之前也接触写了好几篇Jenkins的博客,但是自己使用最新版本的Jenkins【2.339版本】,然后去发布Spring boot项目,发现还是花了自己不少的时间,所以记录一下。整理一下遇到的问题:

1、还是对Jenkins的整体不熟悉,安装时选择默认插件安装,结果默认中并没有 Publish Over SSH 1.2.4插件,还以为是Jenkins的版本变动比较大,浪费了很多时间;

2、对shell脚本不熟悉,导致来回调了很久;

基于篇幅限制 钩子部署集群搭建部署 于其他文章中

Jenkins使用Docker方式安装

直接使用命令安装(省略安装Docker的部分):

  1. docker run \
  2. -u root \
  3. --rm \
  4. -d \
  5. -p 8300:8300 \
  6. -p 50000:50000 \
  7. -v jenkins-data:/var/jenkins_home \
  8. -v /var/run/docker.sock:/var/run/docker.sock \
  9. jenkinsci/blueocean

查看docker镜像信息:docker images

启动镜像:docker run -d -p 8300:8300 jenkinsci/blueocean

也可以增加jvm参见进行启动:

  1. docker run -d -p 8300:8300
  2. -e JAVA_OPTS='-Dfile.encoding=utf-8 -server -XX:+UseG1GC -Xms256m -Xmx256m'
  3. jenkinsci/blueocean

 查看是否启动,可以执行ps -ef|grep 8300或jenkins ; 或者执行命令 docker ps -a

直接使用 Jenkins.war 启动

直接下载文档版本的 jenkins.war包,可以在选择对应的版本

http://updates.jenkins-ci.org/download/war/

如:https://updates.jenkins-ci.org/download/war/2.339/jenkins.war

  1. cd /home/kevin/
  2. mkdir jenkins
  3. cd jenkins
  4. 下载包:wget http://updates.jenkins-ci.org/download/war/2.339/jenkins.war
  5. 执行 java -jar jenkins.war

配置管理Jenkins

1、Jenkins原理和基本初始化

浏览器访问:http://ip:8300 

需要输入密码,则在启动日志或者对应的文件中查看,如果不好找也可以搜索文件位置,使用:

find / -name initialAdminPassword

点击安装插件

2、安装 Publish over SSH插件

请一定注意需要安装 Publish over SSH插件,安装完成后可以看到:

 然后在 Configure System 配置ssh server,然后在项目job创建时可以直接使用插件的服务,如下:

3、安装和配置工具【jdk、git、maven】

需要在Jenkins的管理菜单,进入工具管理进行配置:

 Maven也已经安装了,这里需要设置 setting.xml的配置文件地址,服务部署时的配置文件,将其放到服务器中的 /home/kevin/maven/setting.xml, 则:

 JDK jenkins所在的服务器本身安装了jdk,查看jdk可以使用

whereis jdk

并查看jdk信息如下:

所以配置地址为:/usr/local/jdk/jdk1.8

 Git git一般都没有安装可以先看jdk是否有镜像存在

yum list git

yum -y install git

最后查看git版本: git --version

以及查看git的安装地址:whereis git

最后,在jenkins上进行配置:

4、配置项目 

Jenkins允许将项目使用 视图(VIEW)或 文件夹以将所有要发布的项目进行隔离,如下:

 现在直接在 mosty-framework下创建 mosty单体项目(Freestyle project或maven项目都可以):

 继续先为gitlab创建账号、密码:

 继续项目基础信息配置:

 继续配置代码拉去地址:

 配置maven打包的位置和命令,如果是maven子项目时需要增加对应的路径:

继续【构建】部分 

下面就是在 Publish over SSH中编写脚本等的时候了,这个时候分为两种情况,一种是直接将spring boot打成jar包,然后在服务器端进行启动;另一种是推包过去在服务器端打成 docker镜像再启动

5、基于git分支部署【可选项】

5-1)、输入框方式

在基础配置中,选择参数构建,选择字符串类型,填入对应的参数配置

 在git配置中选择分支部分,使用参数进行代替,如下:

构建时样式:

5-2)、下拉选项方式 

需要先按照 git paramter插件:

配置构建参数: 

 git地址配置时,分支选项使用参数代替:

 构建时的样式:

6-1、脚本命令行部署

Publish Ssh over的执行脚本见下面,当前配置的ssh server的服务器地址为: /home/mosty/project/workspace

Shell脚本说明(这里还需要注意,及时jdk设置了环境变量,在服务器任何地方都可以使用 java -jar命令启动,但是脚本这里也要写 java的具体路径,如下):

  1. 打印开始;定义jar包名字的变量;定义jar包的使用路径(即启动的位置);
  2. 使用p命令获取当前正在运行的该包的pid,如果pid存在则将进程杀死,这里使用了 -9,也可以去掉
  3. 由于publish over ssh配置的将包放到了 /home/mosty/project/workspace位置;此时先判断基础路径(即启动的位置)是否存在上次启动的包,如果有则将其使用日期进行修改,并将包mv到一个专门存放历史包的位置;再将推上来的包放到新的要启动的位置;
  4. 此时新的要启动的包,可能没有执行权限等,这里直接暴力的修改为 777权限(读写执行)
  5. 使用java -jar命令启动spring boot项目,这里增加了后台启动,jvm参数控制;
  6. 由于应该是使用了 nohup命令,此时直接退出的话,要不就是包启动了但是jenkins没有收到状态;要不就是jenkins显示成功了,但是包没有起来,此时需要sleep一定的时间并且在 Publish over SSH配置时勾选Exec in pty选项【见下图】
  1. echo "Stopping SpringBoot Application"
  2. JAR_FILE=mosty-1.0.0-SNAPSHOT.jar
  3. BASE_PATH=/home/mosty/project/mosty
  4. PID=ps -ef | grep $JAR_FILE | grep -v grep | awk '{print $2}'
  5. echo $PID
  6. echo "--------kill start--------------"
  7. if [ -n "$PID" ]
  8. then
  9. echo "kill -9 的pid:" $PID
  10. kill -9 $PID
  11. fi
  12. echo "--------kill finish-----------------"
  13. echo "--------replace start--------------"
  14. DATE=$(date +%Y%m%d%H%M%S)
  15. JAR_FILE_PATH="/home/mosty/project/mosty/$JAR_FILE"
  16. if [ -f "$JAR_FILE_PATH" ]; then
  17. mv $BASE_PATH/$JAR_FILE /home/mosty/project/workspace/bak/$JAR_FILE.$DATE.bak
  18. fi
  19. mv /home/mosty/project/workspace/$JAR_FILE $BASE_PATH/
  20. echo "--------replace finish-----------------"
  21. echo "Execute shell Finish"
  22. chmod 777 $BASE_PATH/mosty-1.0.0-SNAPSHOT.jar
  23. echo "修改jar包权限为 777 "
  24. echo "Executing program….."
  25. nohup /usr/local/jdk/jdk1.8/bin/java -server -Dfile.encoding=UTF-8 -Xms256m -Xmx256m -XX:+UseG1GC -jar $BASE_PATH/$JAR_FILE --spring.config.location=$BASE_PATH/application.yml $BASE_PATH/nohup.log 2>&1 &
  26. sleep 15s

执行完脚本后不需要等管道直接返回成功,可以选择:

6-2、脚本Docker部署

Publish Ssh over的执行脚本,其中Dockerfile 和 docker.sh 参见下面部分;当前配置的ssh server的服务器地址为: /home/mosty/project/workspace

Shell脚本说明

  1. 定义docker镜像的名称
  2. 同上面一样将spring boot包上传,再将上次运行的包修改后放到一个专门存放历史版本的地方,最后将上传的包mv到需要运行的位置
  3. 修改待运行的jar包的权限为 777(可读写执行)
  4. 获取当前正在运行的docker的进程
  5. 如果有正在运行的docker,则先停止;再删除;
  6. 使用新的Spring boot jar包构建镜像(Dockerfile 与jar包当前为同一级目录)
  7. 运行 docker.sh脚本(也就是启动docker脚本,见下)
  1. echo "jenkins开始部署"
  2. IMAGE_NAME=mosty-jar
  3. echo "--------replace start--------------"
  4. DATE=$(date +%Y%m%d%H%M%S)
  5. JAR_FILE="/home/mosty/project/mosty/$JAR_FILE"
  6. if [ -f "$JAR_FILE" ]; then
  7. mv /home/mosty/project/mosty/$JAR_FILE /home/mosty/project/workspace/bak/$JAR_FILE.$DATE.bak
  8. fi
  9. mv /home/mosty/project/workspace/$JAR_FILE /home/mosty/project/mosty/
  10. echo "--------replace finish-----------------"
  11. chmod 777 /home/mosty/project/mosty/mosty-1.0.0-SNAPSHOT.jar
  12. echo "修改jar包权限为 777 "
  13. echo '================获取容器id=================='
  14. CID=$(docker ps | grep "$IMAGE_NAME" | awk '{print $1}')
  15. echo 容器id=$CID
  16. echo '================获取镜像id=================='
  17. IID=$(docker images | grep "$IMAGE_NAME" | awk '{print $3}')
  18. echo 镜像id=$IID
  19. if [ -n "$CID" ]; then
  20. echo 存在$IMAGE_NAME容器,停止容器并删除
  21. docker stop $CID
  22. docker rm $CID
  23. fi
  24. docker build -t $IMAGE_NAME -f Dockerfile .
  25. echo 已经构建$IMAGE_NAME的镜像
  26. sh /home/mosty/project/mosty/docker.sh

Dickerfile脚本表简单:

  1. FROM java:8
  2. VOLUME /tmp
  3. ADD mosty-1.0.0-SNAPSHOT.jar app.jar
  4. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker.sh 脚本,和脚本说明:

  1. -d 后台运行docke;
  2. -p 将 9999端口与docker的9999端口进行关联或挂载;
  3. -e 设置jvm参数
  4. -v 挂载linux的包到docker的跟目录,由于docker运行的目录不是当前目录,并且这样的话也能实现修改当前的 application.yml 优先级高于项目中的yml,方便修改后重启
  1. docker run -d -p 9999:9999
  2. -e JAVA_OPTS='-Dfile.encoding=utf-8 -server -XX:+UseG1GC -Xms256m -Xmx256m -XX:+PrintGC -XX:+PrintGCTimeStamps'
  3. -v /home/mosty/project/mosty/application.yml:/application.yml mosty-jar

end!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/824640
推荐阅读
相关标签
  

闽ICP备14008679号