Linux Code

Jenkins捣鼓

Posted on 2021-12-16,6 min read
  • 最近准备和朋友搞一个小项目,需要用到Jenkins来做部署,这里记录一个Jenkins的配置。Jenkins官方文档
  • 由于方便起见,这里我使用War包下载。官网的war包下载比较慢,这里使用清华的源
  • 以下内容根据版本不同,可能汉化会有所不同,需要注意。

安装

  • 拉取并运行的命令:

    wget https://mirrors.jenkins.io/war-stable/latest/jenkins.war # 拉war文件
    
    java -jar -Xmx256m -Xms64m jenkins.war --httpPort=9000  >~/.jenkins/jenkins.log & # 后台运行,并记录日志
    
    nohup java -jar -Xmx256m -Xms64m jenkins.war --httpPort=9000 >> ~/.jenkins/logs/jenkins_$(date +%Y-%m-%d).log 2>&1 & # 后台运行,并重定向日志输出按天记录
    

相关配置

  • Jenkins的相关文件会放在:~/.jenkins目录下
  • 一开始进去的时候会让你输入密码,这个密码在:~/.jenkins/secrets/initialAdminPassword目录下

配置环境

  • 全局配置中配置Jdk和Maven路径,地址:http://address/configureTools/

    image
image

必须安装的插件

  • 插件安装地址:http://address/pluginManager/available
    • Maven Integration:安装了这个插件,才会显示 构建一个Maven项目 选项
    • Git Parameter:安装了这个插件,才能选择Git的某个分支进行打包

修改源

  • 因为Jenkins默认安装插件是走的国外的服务器,所以我们需要修改源:
    • 修改:~/.jenkins/updates/default.json
    • 替换 updates.jenkins-ci.org/downloadmirrors.tuna.tsinghua.edu.cn/jenkins
    • 然后把www.google.com修改成百度

其他配置

  • 关闭防跨域伪造保护(视情况关闭,有些时候出现403可以通过关闭解决),地址:http://address/configureSecurity/

    image

SpringBoot项目配置参考

配置过程

  • 这里演示一个SpringBoot多模块项目的配置过程。
image
image
  • 进入新创建的任务的配置里。
image
  • 为了让我们构建能够自定义,这里我们点击 参数化构建过程。注意:参数的名称那一栏不能随便填,这个会作为环境变量。在Jenkins的Shell脚本中可以通过${名称}来获取对应的变量。

    image
    • 我们添加如下几种参数:以下图片中的名称如果修改了的话,需要在脚本中做出相应的修改。

      • Git参数:可以让我们选择Git的某个分支打包。

        image
      • 字符串参数:用于启动时候指定JVM的额外参数:

        image
      • 文本参数:用于指定SpringBoot启动时候运行的配置文件

        image
      • 字符串参数:用于指定部署的路径

        image
      • 字符串参数:用于指定Jenkins打包后存放的位置。这个一般固定写就行。

        image
    • 上面我们一共添加了以下几个变量:branch、jvm_param、springboot_properties、deploy_path

  • 然后我们到源码管理,选择Git,然后输入对应的仓库地址,以及SSH Key

    image
  • 由于我们是多模块项目,所以我们需要额外指定以下构建选项:

    • 这里由于我们的项目最顶级的包是JobApply,然后下面有个JobApply-ALL模块,然后我想每次都构建JobApply-ALL并运行,那么应该填入:clean install -pl JobApply-ALL -am -amd -Pdev -Dmaven.test.skip=true
    image
  • 为了能让我们的项目自动部署,所以我们添加构建完成后执行Shell脚本:

    image
  • 在下面的框里输入Shell脚本,这里的脚本仅供参考:

    #!/bin/bash 
    
    #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
    # 需要在Jenkins中指定一下变量
    # - deploy_path:部署路径
    # - springboot_properties:SpringBoot启动配置文件
    # - jar_path:Jenkins打包后Jar路径
    # - jvm_param:JVM启动参数
    export BUILD_ID=dontKillMe
    
    echo "---------开始执行部署脚本---------"
    config_path=${deploy_path}/conf
    log_path=${deploy_path}/logs
    echo "配置文件路径为:${config_path}"
    echo "日志文件路径为:${log_path}"
    
    # 创建相关的文件夹路径
    if [ ! -d "${config_path}" ];then
        mkdir -p ${config_path}
    fi
    if [ ! -d "${log_path}" ];then
        mkdir -p ${log_path}
    fi
    
    # 写入配置文件
    echo "开始写入配置文件"
    echo -e "${springboot_properties}" > "${config_path}/application.properties"
    echo "写入配置文件完成,路径为:${config_path}/application.properties"
    
    # 获取Jar名称
    cd "${jar_path}"
    jar_name=$(ls *.jar)
    echo "获取到要部署的Jar包名为:${jar_name}"
    
    #将编译好的jar复制到部署路径
    cp  "${jar_path}/${jar_name}" "${deploy_path}"
    cd "${deploy_path}"
    
    #获取以前的pid,并且杀掉以前的进程
    pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
    if [ "${pid}" ];then
        echo "检测到以前未关闭的进程,开始执行关闭,pid:${pid}"
        kill -15 "${pid}"
        sleep 20
        pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
        if [ "${pid}" ];then
          echo "停止进程失败,开始强制停止"
          kill -9 "${pid}"
          sleep 10
        fi
    fi
    
    #启动Jar
    run_command="nohup java -jar ${jvm_param} -Dspring.config.location=${deploy_path}/conf/ ${jar_name} >> ${deploy_path}/logs/app_$(date +%Y-%m-%d).log 2>&1 &"
    echo "启动命令为:${run_command}"
    nohup java -jar ${jvm_param} -Dspring.config.location=${deploy_path}/conf/ ${jar_name} >> ${deploy_path}/logs/app_$(date +%Y-%m-%d).log 2>&1 &
    # 等待30秒再判断PID来检测是否启动成功
    sleep 30
    pid=`ps -ef | grep -n ${jar_name} | grep -v grep | awk '{print $2}'`
    if [ "${pid}" ];then
      echo "进程PID为:${pid},可能启动成功,如无法访问,请查看日志。"
    else
      echo "无法获取到PID,进程可能启动失败,请检查日志。"
    fi
    
    echo "---------结束部署---------"
    
    
    
  • 最后点击保存就行了。

使用过程

  • 点击参数构建
image
  • 输入参数,这些就是我们上面配置的:

    image
  • 然后点击构建,左下角就能出现构建进度。点进去,点控制台输出就能看到输出的控制台日志。

    image
  • 拉到最底下,就能看到我们自己搞的shell脚本的输出。

    image

下一篇: Java策略模式工具类→

loading...