zoukankan      html  css  js  c++  java
  • springBoot 项目 Jenkins+svn 集成部署

    持续集成工具Jenkins
    持续部署、持续集成、持续交付
    Jenkins 和 Hudson 都是一款持续集成及自动化部署工具。
    Jenkins 解决了什么问题:
    Jenkins 的主要目标是监控软件开发流程,快速显示问题。所以能保证开发人员以及相
    关人员省时省力提高开发效率。
    解决了传统的打包、部署枯燥过程。

    Jenkins 主要用于
    1.持续、自动地构建/测试软件项目
    2. 监控一些定时执行的任务

    Jenkins 历史
    Jenkins 和 Hudson 之间的关系,2009年,甲骨文收购了sun公司并集成了Hudson代码库。在2011年年初,甲骨文和开源社区之间关系破裂,该项目分为两个独立的项目。
    Jenkins: 由大部分原始开发人员组成
    Hudson:由甲骨文公司继续管理
    所以 Jenkins 和 Hudson 是两款非常相似的产品

    流程图

    Red hat 安装Jenkins
    jenkins下载 https://pkg.jenkins.io/redhat-stable/
    下载rpm包到本地
    sudo rpm -ih jenkins-2.222.3-1.1.noarch.rpm


    自动安装完成之后:
    /usr/lib/jenkins/jenkins.war WAR包
    /etc/sysconfig/jenkins 配置文件
    /var/lib/jenkins/ 默认的JENKINS_HOME目录
    /var/log/jenkins/jenkins.log Jenkins日志文件

    安装完成之后启动jenkins, 可能报这个错误,这是由于没有配置java环境,先检查一下java虚拟机有没有安装,如果没有就安装


    解决办法在 vim /etc/init.d/jenkins
    在第一行添加java环境,红色框中为自己的路径


    为了避免jenkins默认端口冲突,修改enkins默认端口
    执行 vi /etc/sysconfig/jenkins
    找到 JENKINS_PORT="8080" 此端口不冲突可以不修改
    修改jenkins默认的操作用户,linux下jenkins默认使用jenkins用户进行脚本和文件的操作,如果不修改,在部署项目时需要调整涉及到的文件和目录的操作权限,可以调整jenkins配置文件,将用户修改为root用户。
    将JENKINS_USER="jenkins"调整为JENKINS_USER="root"
    然后执行启动命令
    sudo service jenkins start


    然后访问:http://ip/8081
    如果访问不到,检查服务器的防火墙是否关闭。


    接着 :cd /var/lib/jenkins/secrets


    进入此页面后,需要配置一下允许用户注册,Configure Global Security ,勾选此处,保存。


    接着配置jdk 、maven、及setting.xml


    需要安装 Subversion 和 Deploy to container 插件,如果无法安装提示Update information obtained: 不可用 ago;
    其原因是无法上网,可检查 ping www.baidu.com 如果无法ping通,需要设置DNS
    命令: vim /etc/resolv.conf 修改文件中nameserver为 8.8.8.8 和 8.8.4.4 保存退出 :wq


    再次检查 ping www.baidu.com
    开始构建部署springboot的jar项目

    1. 回到jenkins主页面,点击新建Item


    -Dmaven.test.skip=true 忽略测试
    然后点击页面下方的应用,并保存。接着设置全局配置进入jekins 主页面,点击左侧 Manage Jenkins进入页面后点击Configure System 系统配置
    再次操作之前,需要安装 Publish over SSH 插件,


    点击高级 勾选


    以上配置完后,点击Test Configuretion 测试一下

    之后我们去job中配置一下ssh,



    此处的顺序需要注意一下,shell 脚本需要放在下面。
    shell 脚本内容:

    #!/bin/sh
    #Copy jar to target path
    BUILD_ID=DONTKILLME #后台执行
    pid=$(ps -ef|grep ene-center.jar|grep -v grep | awk '{print $2}')
    #copy jar 到启动目录
    #cp -r /var/lib/jenkins/workspace/ene-center/target/ene-center.jar  /data/test/em
    # 关闭已经启动的jar进程
    function stop(){
    if [ -n "$pid" ]
      then
            echo "pid进程 :$pid"
            kill -9 $pid
     else
        echo "进程没有启动"
    fi
    }
    stop
    sleep 5s
    #发布jar服务
    function start(){
      cd /data/test/em
      nohup java -jar ene-center.jar --server.port=5010 >center.log 2>&1 &
    }
    start
    

    然后,应用并保存,在jenkins 任务列表页面点击构建,

    前后端shell 脚本

    • 后端脚本
    #!/bin/bash
    
    root="/data/test/ene"
    for project in {"ene-center","ene-auth","ene-gateway","ene-basic","ene-sys"}
    do
    	echo
    	echo
    	echo
    	echo $project"开始部署..."
    
    
    
    	BUILD_ID=DONTKILLME
    	
    	pid=$(ps -ef|grep $project.jar|grep -v grep | awk '{print $2}')
    	
    	
    	
    	
    	function stop(){
    	if [ -n "$pid" ]
    	  then
    	        echo "关闭进程pid=:$pid"
    	        kill -9 $pid
    	
    	 else
    	    echo "未启动,不需要kill"
    	fi
    	}
    
    	file="${root}/$project/target/${project}.jar"
    	if [ -e $file ]
    	then 
    		echo "原始文件路径:${root}/$project/target/${project}.jar...已找到"
    	else 
    		echo "原始位置 ${root}/$project/target/${project}.jar...不存在,停止部署!"
    		continue
    	fi
    	echo "移动jar到 ${root}/_jar/$project.jar"
    	mv -f ${root}/$project/target/${project}.jar ${root}/_jar 
    
    
    	function start(){
    	  cd $root
    	  echo "开始启动..."
    	  nohup java -jar _jar/$project.jar > _jar/$project.log 2>&1 &
    	}
    	
    	stop
    	
    	sleep 3s
    	
    	
    	start
    
    
    done
    
    echo "脚本执行完毕!!!!!!"
    echo 
    echo 
    echo 
    
    
    • 前端脚本
    #!/bin/bash
    
    BUILD_ID=DONTKILLME
    cd /var/lib/jenkins/workspace/ene-vue/ene-vue
    npm install
    npm install script-ext-html-webpack-plugin
    npm run build:prod
    rm -rf /data/test/dist
    rm -rf /data/test/ene-vue
    mv /var/lib/jenkins/workspace/ene-vue/ene-vue/dist /data/test
    cd /data/test
    mv dist ene-vue
    
    
    
  • 相关阅读:
    ASP.NET Web API 2.0 统一响应格式
    [翻译]ASP.NET Web API 2 中的全局错误处理
    【WPF】UserControl 的 Load事件
    解决MS SQL Server 使用HashBytes函数乱码问题
    实例化MD5CryptoServiceProvider报错:此实现不是 Windows 平台 FIPS 验证的加密算法的一部分
    添加扩展方法,提示编译错误 “缺少编译器要求的成员”
    [调试]VS2013调试时提示“运行时当前拒绝计算表达式的值”
    jquery chosen 插件多选初始化
    Asp.net WebForm 中无法引用App_Code文件夹下的类
    文本非法字符过滤 简体转换繁体
  • 原文地址:https://www.cnblogs.com/1204it-ly/p/13877781.html
Copyright © 2011-2022 走看看