Jenkins创建多分支流水线

news2024/11/24 2:42:21

Jenkins创建多分支流水线

    • 一、准备工作
    • 二、安装插件
      • 1、安装Docker和Docker Pipeline
      • 2、安装Blue Ocean
      • 3、安装Publish Over SSH
    • 三、创建多分支流水线
    • 四、配置以及脚本
    • 四、构建项目

        在我们的实际开发过程中,我们势必会存在多个分支进行不同的研发需要,这个时候如果不同分支就要我们去jenkins创建对应的任务就比较麻烦,这个时候就可以使用jenkins的多分支流水线,我们只需要配置好,各个分支的流水线就都帮我们创建好了。

一、准备工作

我们本次实践中需要用到maven进行打包,所以我们首先配置好maven,让其可以正常使用

在“系统管理”->“系统配置”->“全局属性”中,我们选择“环境变量”,这里的maven相关环境变量配置正确即可,注意路径需要更换成自己的路径

在这里插入图片描述
在这里插入图片描述
注:单词不要写错,“PATH+EXTRA”中间是“+”,千万不要配置错了

PATH+EXTRA
$MAVEN_HOME/bin

在“全局工具配置”中,设置自己的setting.xml文件
在这里插入图片描述
jenkins安装以及一些基础配置可以参考一下文章
Docker安装Jenkins
Jenkins部署Git中的Springboot项目(一)
Jenkins部署Git中的Springboot项目(二)

二、安装插件

1、安装Docker和Docker Pipeline

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

2、安装Blue Ocean

在这里插入图片描述

3、安装Publish Over SSH

在这里插入图片描述
具体配置参数如下文章
Jenkins部署Git中的Springboot项目(二)

三、创建多分支流水线

在jenkins主页点击“打开Blue Ocean”
在这里插入图片描述
进入Blue Ocean创建新的流水线
在这里插入图片描述
选择Git仓库
在这里插入图片描述
配置自己要部署的Git仓库信息,然后创建证书和流水线
在这里插入图片描述
创建完成之后进入首页就可以看到我们刚才创建的流水线了

在这里插入图片描述
点击进入该流水线,我们可以对相关配置进行完善在这里插入图片描述
名称与描述信息自己随便写就行
在这里插入图片描述
Git仓库信息必须配置正确,否则会创建失败,并且获取不到分支信息
在这里插入图片描述
这个可以简单理解为就是之前没有的构建保留多久,根据自己要求配置即可
在这里插入图片描述
配置完成之后就会自动扫描该仓库的所有分支并创建好对应的流水线
在这里插入图片描述
接下来就能看到我们的多分支流水线项目了
在这里插入图片描述
我们也可以手动扫描仓库分支
在这里插入图片描述
此时我们每个分支的流水线就都自动创建好了
在这里插入图片描述

配置完成后,进入Blue Ocean,也可以看到我们的两个分支流水线
在这里插入图片描述
无论在jenkins页面或者Blue Ocean页面,都可以启动多分支流水线任务,Blue Ocean的页面效果会更好一些。

四、配置以及脚本

代码中我们找到Jenkinsfile,操作比较简单,自己可以根据自己需要做更多的功能,这个必须放到项目的根目录下
大致就是先使用maven进行打包,然后将jar包发送到我们部署的机器上,调用脚本执行即可完成

pipeline {
  agent any
  stages {
    stage('Check Mvn') {
      parallel {
        stage('first mvn version') {
          steps {
            sh 'mvn --version'
          }
        }

        stage('Mvn Package') {
          steps {
            sh 'mvn clean package'
          }
        }

      }
    }

    stage('Send') {
    	steps {
    		sshPublisher(
    			continueOnError: false,
    					failOnError: true,
    					publishers: [
    					sshPublisherDesc(
                            configName: "vm-128",
                            transfers: [sshTransfer(sourceFiles: 'target/button_swagger.jar',
                            removePrefix: 'target/', remoteDirectory: '/')],
                            verbose: true
    				)
    			]
    		)
    	}
    }
    stage('Start') {
        steps {
            sshPublisher(
                continueOnError: false,
                    failOnError: true,
                        publishers: [
                            sshPublisherDesc(
                            configName: "vm-128",
                            transfers: [sshTransfer(execCommand : '/home/button.sh')],
                            verbose: true
                        )
                    ]
            )
        }
    }
  }
}

说明:
configName: “vm-128” ,这个配置必须与Publish over SSH中的Name保持一致,否则会执行失败
在这里插入图片描述

jenkins打包完成之后,就会使用Publish over SSH插件将jar包发送到对应的部署服务器中,在部署服务器上我写了一个简单的脚本,大概就是将jar包通过docker构建成镜像,然后启动镜像即可完成jar包的启动,如下是执行脚本与Dockerfile文件的内容
在这里插入图片描述

/home/button.sh文件内容

#!/bin/bash
imagesname=button_swagger
container=button_swagger
# 停止项目
if [[ "$(docker inspect button_swagger 2> /dev/null | grep '"Name": "/button_swagger"')" != "" ]]; 
then 
  echo $container "存在,停止并删除"
  docker stop button_swagger
  docker rm button_swagger
else 
  echo $container "不存在"
fi
# 删除镜像
if [[ "$(docker images -q $imagesname 2> /dev/null)" != "" ]]; 
then 
  echo $imagesname '镜像存在,删除它'
  docker rmi $(docker images -q $imagesname 2> /dev/null)
else 
  echo $imagesname '不存在'
fi
cd /home
# docker rmi button_swagger:V1
echo "开始构建镜像"
docker build -t button_swagger:V1 .
echo "构建镜像完成"
# 启动项目
echo "开始启动镜像"
docker run -d --net=host \
--name button_swagger -p 8099:8099 button_swagger:V1
echo "启动镜像完成"

/home/Dockerfile

FROM java:8
MAINTAINER zhanghang
VOLUME /tmp
ADD ./button_swagger.jar button_swagger.jar
RUN bash -c 'touch /button_swagger.jar'
EXPOSE 8099
ENTRYPOINT ["java", "-jar", "/button_swagger.jar"]

四、构建项目

1、jenkins主页面构建
进入我们对应的多分支流水线,选择对应的分支,点击立即构建即可
在这里插入图片描述
通过Console Output可以查看构建的log
在这里插入图片描述

2、Blue Ocean中构建
在这里插入图片描述
点击即可查看具体的执行过程,Blue Ocean中查看会更直观一下
在这里插入图片描述

构建完成之后即可在部署服务器上进行查看
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LoRa 与 LoRaWAN】知识点汇总

本文主要记录【LoRa 与 LoRaWAN】知识点汇总,知识均来源于网络,纯属资料汇总与搬运 涉及到lora基本知识点,lora芯片的工作分析,专业名词解释 【LoRa 与 LoRaWAN】知识点汇总1.Lora和LoraWAN的区别2. lora 相关知识点汇总2.1 Lora调…

MG996R舵机介绍

舵机简介舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。舵机主要是由外壳、电路板、驱动马达、减速器与位置…

C语言入门教程||C语言 循环||C语言 函数

C语言 循环有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执…

蓝桥杯刷题021——填字母游戏(DFS)

2017国赛 题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战 K 大师,不料 K 大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩 LOL 了"。 K 大师在纸上画了一行 n 个格子,要小明和…

go语言的并发编程

并发编程是 Go语言的一个重要特性,而 go语言也是基于此而设计出来的。 本文将会介绍如何使用go-gc中的“runtime”方法实现 go语言中的并发编程。 在之前的文章中,我们已经对 runtime方法进行了详细介绍,这次文章将对 runtime方法进行深入分析,并讲解如何在go-gc中使用该方…

Java NIO学习(二):Channel通道

2.1 Channel 概述Java NIO 的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。2.2 Ch…

PrimoBurner SDK for .NET

PrimoBurner SDK for .NET PrimoBurnerSDK是一个CD、DVD和蓝光刻录工具开发工具包。PrimoBurner是跨平台的,它还提供了一个全面灵活的API,用于快速轻松地实现各种燃烧/翻录替代方案。现在PrimoBurner迫使许多卫生、国防、执法、娱乐和其他部门。 PrimoBu…

面试复习题--性能检测原理

1、布局性能检测 Systrace,内存优化工具中也用到了 Systrace,这里关注 Systrace 中的 Frames 页面,正常情况下圆点为绿色,当出现黄色或者红色的圆点时,表现出现了丢帧。 Layout Inspector,是 AndroidStudio 自带工具…

Python环境搭建、Idea整合

1、学python先要下载什么? 2、python官网 3、idea配置Python 4、idea新建python 学python先要下载什么? python是一种语言,首先你需要下载python,有了python环境,你才可以在你的电脑上使用python。现在大多使用的是pyt…

this指针

目录 一、关于this指针的一个经典问题 二、this指针的特点 (一)本质 (二)应用 1. 不使用this指针 2. 使用this指针 3. 两者代码对比 三、代码举例 1. 举例1 2. 举例2 一、关于this指针的一个经典问题 当你进入一个房子…

MySQL面试题:SQL语句的基本语法

MySQL目录一、数据库入门1. 数据管理技术的三个阶段2. 关系型数据库与非关系型数据库3. 四大非关系型数据库a. 基于列的数据库(column-oriented)b. 键值对存储(Key-Value Stores)c. 文档存储(Document Stores&#xff…

In Context Learning 相关分享

个人知乎详见 https://zhuanlan.zhihu.com/p/603650082/edit 1. 前言 随着大模型(GPT3,Instruction GPT,ChatGPT)的横空出世,如何更高效地提示大模型也成了学术界与工业界的关注,因此In-context learning…

ArcGIS API for JavaScript 4.15系列(3)——Dojo中的css样式操作

1、前言 前一篇博客介绍了Dojo中基础的dom操作方法,主要是针对html中的常用标签和属性进行操作。而一个优秀的线上网站自然也离不开css样式的从旁辅助。在实际开发过程中,我们经常会遇到需要动态修改css样式的问题,本文就来介绍一下如何在Do…

大数据框架之Hadoop:入门(一)大数据概论

第1章 大数据概论 1.1大数据概念 大数据(Big Data):指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 主要解决&#xff…

【java基础】集合

集合 集合类位于java.util 包下,集合类又被称为容器 与数组的区别 数组的长度是固定的,集合的长度是可变的数组可以用来存放基本数据类型,集合存放引用类型,不能存放基本数据类型 如何选择 collection map 黄色的是接口&…

1.计算机基础-操作系统面试题—计算机系统概述、进程管理

本文目录如下:计算机基础-操作系统 面试题一、计算机系统概述CPU 内核态 和 用户态 的区别?从 用户态 切换到 内核态 的常见方法:二、进程管理线程 和 进程 的区别?协程 (goroutine) 和 线程的区别?进程有哪些状态?进…

day11_类中成员之变量

通过以前的学习,我们知道了成员变量是类的重要组成部分。对象的属性以变量形式存在,下面我们就来详解的学习一下类中的变量 成员变量 成员变量的分类 实例变量:没有static修饰,也叫对象属性,属于某个对象的&#xf…

Transformer位置编码图解

在语言中,单词的顺序及其在句子中的位置非常重要。 如果重新排列单词,整个句子的意思可能会发生变化。 在实施 NLP 解决方案时,循环神经网络具有处理序列顺序的内置机制。 然而,transformer 模型不使用递归或卷积,而是…

面试(七)为什么一般希望将析构函数定义为虚函数

class B { public:~B() // 基类析构函数不为虚函数{cout << "B::~B()" << endl;} };class D : public B { public:~D(){cout << "D::~D()" << endl;} };void Test(B* t) {delete t;t nullptr; }int main() {B *pb new B;Test…

TCP/IP网络编程——I/O 复用

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 12 章 I/O 复用12.1 基于 I/O 复用的服务器端12.1.1 多进程服务端的缺点和解决方法12.1.2 理解复用12.1.3 复用技术在服务器端的应用12.2 理解 select 函数并实现服务端12.2.1 select 函数的功能和调用顺序1…