当前位置: 首页 > news >正文

jenkins结合gitlable企业集成部署实战

简介
Jenkins是一个开源软件项目,起源于Hudson(Hudson是商用的),是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

1.0 搭建jenkins

下载war包

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

启动方式一

war包直接启动
cat start.sh 
#!/bin/bash
#
cd /home/jenkins
. /etc/profile.d/java11.sh
java -version
java  -Xmx2048m -Xms2048m -XX:MaxPermSize=256M  -jar  jenkins.war  --httpPort=80  >> jenkins.log  2>&1  &

停止服务

cat stop.sh 
#!/bin/bash
#
kill -9 `ps -ef | grep jenkins |grep -v grep  | awk '{print $2}'`

启动方式二
将war包直接丢在tomcat下 用tomcat管理启动
在这里插入图片描述

2.0 安装jenkins插件

参考我之前的jenkins插件解决办法

https://blog.csdn.net/weixin_43546282/article/details/128572426?spm=1001.2014.3001.5501

3.0 发布方式一(根据commit_id进行部署发布)

3.1 创建视图,一般一个项目创建一个视图,当部署项目比较多的时候方便查找。
在这里插入图片描述
在这里插入图片描述

3.2 创建自由风格的任务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编写部署脚本

pwd
if [ $confirm = true ];then
pwd

dir="/home/dingding/saas5-xx"
project="yuxin-xx"
pro="saas5-xx"
jar_name="xxx-xx.jar"
server_name="yuxin-job"
echo "$project 项目编译"
.     /etc/profile.d/java11.sh 
.	  /etc/profile.d/maven.sh 
cd ${WORKSPACE}/yuxin-service/yuxin-service-job
mvn -s "/usr/local/maven/conf/settings-s5.xml"   clean  package  -Dmaven.test.skip=true -Plockin-prod

for  ip  in 192.168.2.xx 192.168.3.xx
do
echo "$ip  流量下线"
/data/jenkins/jenkinsenv/env3.9/bin/python /production/jenkins/conf/scripts/lockinNacos.py saas5 ${server_name} ${ip} del
sleep 2

echo "停止$project 服务"
ssh   root@$ip  "systemctl  stop  $project.service "
echo "copy $project 项目"
ssh   dingding@$ip  "if [ ! -e ${pro} ]; then mkdir ${pro};fi"
ssh   dingding@$ip  "cd ${pro} && if [ -f ${jar_name} ];then rsync -r --delete ${jar_name} ${jar_name}.bak;fi "
rsync  -avz target/${jar_name}  dingding@$ip:$dir
echo "启动$project 服务"
ssh   root@$ip  "systemctl  start $project.service "

echo "检测$project 服务"

sleep 2
echo "$ip  流量上线"
/data/jenkins/jenkinsenv/env3.9/bin/python /production/jenkins/conf/scripts/lockinNacos.py saas5 ${server_name} ${ip} add
done
else
	echo "no"
fi]

这是一个比较典型的服务部署脚本

1.拉去代码
2.项目编译
3.流量下线
4.停止服务
5.部署服务
6.检查服务
7.流量上线

在这里插入图片描述
在这里插入图片描述

部署发布的服务会在这边看到,红色表示失败,蓝色表示成功。
如果同一个仓库下有多个服务类似于微服务这种可以选择集合部署脚本(同一个commit_id)

pipeline {
    agent {
    	#项目标签
        label 'xxxxxx_jenkins'
    }
    environment {
    	#项目仓库地址
        GITURL = 'git@xxxx.xxx.net:xxx/xxxx-xxxx.git'
    }
    #job01
         stage('prod-saas5-yx-oa') {
            steps{
                build job: 'prod-saas5-yx-oa', parameters: [
                    [$class: 'BooleanParameterValue', name: 'confirm', value: true],
                    [$class: 'StringParameterValue', name: 'commit_id', value: "${commit_id}"]
                ]
            }
        }
    #job02
         stage('prod-saas5-yx-log-manager') {
            steps{
                build job: 'prod-saas5-yx-log-manager', parameters: [
                    [$class: 'BooleanParameterValue', name: 'confirm', value: true],
                    [$class: 'StringParameterValue', name: 'commit_id', value: "${commit_id}"]
                ]
            }
        } 

    }
}

在这里插入图片描述
如图所示多个项目继续写下去即可,最终的效果如图所示
在这里插入图片描述
在这里插入图片描述

4.0 发布方式二(根据分支发布)

前面创建任务的模式不变,配置参数有细微的变化
在这里插入图片描述
配置高级
在这里插入图片描述
在这里插入图片描述
其他配置保持不变
在这里插入图片描述
分支模式集合部署
选择流水线任务模式
在这里插入图片描述
在这里插入图片描述
批量部署脚本参考,多个任务写多个stage

pipeline {
    agent any
    
    environment {
        GITURL = 'git@xxxxxx.xxxxx.net:xxxxx/xxxxx-xxxxx.git'
    }

    stages {
        stage('dev-saas5-web') {
            steps {
                build job: 'dev-xx-web', parameters: [
                    [$class: 'BooleanParameterValue', name: 'confirm', value: 'true'],
                    [$class: 'GitParameterValue', name: 'commit_id', value: "${commit_id}"]
                ]
            }
        }
        stage('dev-saas5-xx-xxx') {
            steps {
                build job: 'dev-xxx-web-xxx', parameters: [
                    [$class: 'BooleanParameterValue', name: 'confirm', value: 'true'],
                    [$class: 'GitParameterValue', name: 'commit_id', value: "${commit_id}"]
                ]
            }
        }

    }
}

在这里插入图片描述
在这里插入图片描述
两种方式都能实现任务的批量部署与发布,但是需要注意的是分支与commit_id相同才能用

相关文章:

  • 前端面试题——React重点
  • 超级详细的PMP复习方法,3A拿下考试不发愁!
  • C语言进阶——通讯录
  • C#语言实例源码系列-实现停车场系统项目-下
  • 我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT
  • 【云原生进阶之容器】第四章Operator原理4.2节--CRD
  • 牛客竞赛每日俩题 - Day14
  • Three.js一学就会系列:05 加载3D模型
  • Python2.x和3.x主要差异总结
  • Vue中引入react组件
  • python的8大核心语句,你确定不来看看嘛,那格局就小啦
  • windows排查问题常用命令
  • 2023年网络安全比赛--跨站脚本攻击中职组(超详细)
  • SkyEye:针对飞行模拟器的仿真解决方案
  • 基于Python + Django 的密码自助平台项目(完整代码)
  • [译]前端离线指南(上)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【知识碎片】第三方登录弹窗效果
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Docker: 容器互访的三种方式
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • express如何解决request entity too large问题
  • FastReport在线报表设计器工作原理
  • HTTP--网络协议分层,http历史(二)
  • React+TypeScript入门
  • Swift 中的尾递归和蹦床
  • 前端面试题总结
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 我感觉这是史上最牛的防sql注入方法类
  • 学习ES6 变量的解构赋值
  • 译有关态射的一切
  • 由插件封装引出的一丢丢思考
  • ​MySQL主从复制一致性检测
  • $.ajax()参数及用法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (NSDate) 时间 (time )比较
  • (动态规划)5. 最长回文子串 java解决
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (南京观海微电子)——COF介绍
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Unity3DUnity3D在android下调试
  • (转)编辑寄语:因为爱心,所以美丽
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net Web窗口页属性
  • .net web项目 调用webService
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET开源快速、强大、免费的电子表格组件
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)