Jenkins自动化构建部署代码

Jenkins自动化构建部署代码

1.背景

“唉,每天提交完代码都得自己打包再部署到测试环境和开发环境,好麻烦啊!都快变成运维了”
“啊?哦!确实,每天打包部署确实都成为了工具人了”
这不禁让我想起在澳门项目兼顾充当发包工具人的时光,在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;或者前后端分离后,经常会修改接口,然后重新部署;这些情况都会涉及到频繁的打包部署;
手动打包常规步骤:
  1.提交代码
  2.问一下同组小伙伴有没有要提交的代码
  3.拉取代码并打包(war包,或者jar包)
  4.上传到Linux服务器
  5.查看当前程序是否在运行
  6.关闭当前程序
  7.启动新的jar包
  8.观察日志看是否启动成功
  9.如果有同事说,自己还有代码没有提交…再次重复1到8的步骤!!!!!(一上午没了)
  那么,有一种工具能够实现,将代码提交到git后就自动打包部署勒,答案是肯定的:Jenkins
  当然除了Jenkins以外,也还有其他的工具可以实现自动化部署,如Hudson等
  只是Jenkins相对来说,使用得更广泛。

2.Jenkins自动化部署实现原理

在这里插入图片描述

3.基于docker安装Jenkins环境

前置条件:阿里云服务器+安装好docker环境
当然也可以不使用docker而是自己一步步搭建Jenkins环境(贼辛苦,一堆坑,后面有时间再出教程)
使用docker pull一个镜像可以节省很多时间,也避免了很多奇奇怪怪的坑.
1.使用docker安装jenkins
docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
2.访问jenkins地址 ip:8080
在这里插入图片描述

注意:第一次启动的时候正在加载jenkins大概会等待3-10分钟。
3.解锁jenkins
在这里插入图片描述

Jenkins启动后,默认的日志会输出到/var/log/jenkins/jenkins.log文件中,启动后默认会创建一个管理员账号admin,以及为此账号产生一个密码,
密码会写入到文件/var/jenkins_home/secrets/initialAdminPassword中,可通过vim或vi查看日志文件和密码文件
在这里插入图片描述

在这里插入图片描述

大概需要等待3-10分钟
在这里插入图片描述

Jenkins默认使用8080端口,要修改此端口,编辑/etc/default/jenkins配置文件,找到对应的端口进行修改成其他端口.这里我还是使用默认端口8080.

3.1 Jenkins全局工具配置

进入到jenkins容器中 echo $JAVA_HOME 获取java环境安装地址

JDK环境安装在这里插入图片描述

Maven环境安装 --这里采用自动安装的方式

在这里插入图片描述

3.2安装Jenkins对应Maven插件

找到 “系统管理“ - “安装插件” ,点击 “可选插件”,找到如下maven插件的版本
插件名称 Maven Integration
在这里插入图片描述

在这里插入图片描述

4.Jenkins实现Springboot项目自动部署

1. 新建一个发布任务

在这里插入图片描述

2.配置任务git账号密码(打个码哈哈哈)

在这里插入图片描述

3.项目打包

在这里插入图片描述

4.点击立即构建

在这里插入图片描述

第一次构建可能耗时比较长,因为需要下载一些相关依赖jar包
在这里插入图片描述

点击Console Output可以查看控制台打印

5.Jenkins启动成功之后执行的shell脚本

在这里插入图片描述

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=/var/jenkins_home/jobs/test_springboot/workspace/mldncloud-dept-service-swagger/target/mldncloud.jar
 
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
}
 
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}
 
#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup java -jar $APP_NAME > vi /tmp/jenkins/app/admin.log 2&>1 &
    echo "App is runing success!"
  fi
}
 
#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}
 
#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
 
#重启
restart(){
  stop
  start
}
 
#根据输入参数,选择执行对应方法,不输入则执行使用说明
#特别说明:这里其实是根据传的参数去执行对应的方法.在这里我是直接写死直接调restart方法
case "restart" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

对以上脚本做个简单说明,这里的脚本文件需要使用时,是需要传参调用脚本执行对应传参的方法的.为了方便,在这里case “restart” in 我直接写死调用restart方法,而restart方法其实就是先stop杀死进程再启动进程,而启动进程主要看这个: nohup java -jar $APP_NAME > vi /tmp/jenkins/app/admin.log 2&>1 &
这里的文件要你手动先创建,不然jenkins是没有创建文件的权限的.当然你也可以把jenkins的用户改为"root"以此来获得root权限.

6.容器映射8081端口

重启容器
systemctl restart docker
清空未运行的容器
docker rm $(sudo docker ps -a -q)

docker run -p 8080:8080 -p 8081:8081 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

5.docker端口映射

5.1项目启动后发现访问不了

测试ping一下ip,能通;
在这里插入图片描述

这个时候就要ping一下你的项目(jar包)的端口看看能不能通了.
tcping下载地址:https://download.elifulkerson.com//files/tcping/0.39/tcping.exe
放入目录C:\Windows\System32,之后再cmd窗口运行即可
在这里插入图片描述

(这里一开始是不通的,因为jenkins是部署在docker里面的,docker需要对端口做一下外部映射)

5.2【docker】追加docker容器端口映射的方法(不懂的可以看这个)

6.最终效果

在这里插入图片描述

以后每次部署只需要把修改后的代码提交到远程仓库,然后点击jenkins的立即构建.之后jenkins会自动去你配置的git仓库拉取最新代码,并且执行maven的构建.
是不是很香?!香得一批!以后谁再手动打包发包到服务器,统统打死!
“唉,每天提交完代码都得自己打包再部署到测试环境和开发环境,好麻烦啊!都快变成运维了”
“啊?哦!不慌,我配Jenkins随便改!”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值