Jenkins+Docker+Maven+gitlab实现自动构建、远程发布
前言
一个项目完整的生命周期是从开发的coding阶段和coding阶段的质量测试,再到多次发布投入使用。目前大部分的测试阶段并不是从coding结束后开始的,而是和coding同步进行的。可能今天早上coding完成一个功能,下午就要投入测试。在这期间,我们可能会因为需求发生变化
、功能需要改进
、缺陷需要修复
等问题要更新服务。这个过程是重复而且是复杂的,也容易出现部署、更新失误的情况。因此我们有了自动构建的需求,和CI/CD(持续构建/持续发布)差不多类似。
愿景
我们最后要实现的像图片中这样,可以选择要构建的分支
、要发布到哪一台服务器
以及要更新的服务
,之后点击构建,完成指定的服务构建以及发布到指定的服务器上。
Jenkins环境搭建
前提环境
Docker
环境- 可以使用
docker-compose
,建议版本为:Docker Compose version v2.1.1
,不然可能会出现docker-compose: not found
的情况 - 拉取
jenkinsci/blueocean:1.25.7-bcc31d32159f
镜像 - 拉取
maven:3-alpine
镜像
启动Jenkins
docker run \-e TZ=Asia/Shanghai \--network host \-d \-u root \--name jenkins \-v jenkins-data:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v "$HOME":/home \-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose \jenkinsci/blueocean:1.25.7-bcc31d32159f
-v jenkins-data:/var/jenkins_home:
将jenkins容器里面的/var/jenkins_home(jenkins配置信息)映射到Docker volume,并将其命名成jenkins-data
-v /var/run/docker.sock:/var/run/docker.sock:
允许jenkins使用docker环境
-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose:
允许jenkins使用docker-compose
解锁jenkins
第一次访问jenkins地址:http://ip:8080
密码在jenkins启动日志里
自定义Jenkins
选择安装推荐的插件
如果遇到安装部分插件失败,可以去找到系统管理
——插件管理
——已安装
,先卸载掉失败的插件,再去可选插件中搜索并下载.
ps:卸载和下载完需要重启才能生效,但是博主经常遇到点重启,它只关闭不重启,可以手动启动。
创建第一个管理员用户
实例配置
插件下载
Git Parameter Plug-In
,git参数化构建,构建时可以指定构建分支Publish Over SSH
插件,远程发布Extended Choice Parameter Plugin
,选择参数添加扩展功能Docker
,集成dockerDocker Pipeline
,通过流水线构建和使用Docker容器Docker Compose Buid Step Plugin
,集成docker-compose
全局凭据配置
配置gitlab的账号密码
系统配置
点击系统管理
——系统配置
Publish over SSH配置
SSH Servers新增
创建任务
创建一个流水线任务
参数化构建
Git参数
服务器参数配置
服务名配置
流水线配置
代码仓库配置
关闭轻量级检出
示例项目内容
项目结构
docker-compose.dev.yml
version: "3.0"
services:holiday-management:build:context: holiday-managementargs:APP: target/holiday-management.jarplan-scheduler:build:context: plan-schedulerargs:APP: target/plan-scheduler.jar
docker-compose.yml
version: "3.0"
services:holiday-management:restart: alwaysimage: holiday/management:latestenv_file: ./config/.envports:- 10018:10010plan-scheduler:restart: alwaysimage: plan/scheduler:latestenv_file: ./config/.envports:- 10028:10020
Jenkinsfile
pipeline {agent anyenvironment {def remoteId = "${PUBLISH_SSH_SERVER}" def service_names = "${SERVICE_NAMES}".replace(",", " ")def half_finished_images = "${service_names}".replace("-", "/").replace(" ", ":latest ")def images = "${half_finished_images}" + ":latest"def deploy = "deploy"}stages {stage('项目构建') {agent {docker {image 'maven:3-alpine'args '-v /home/.m2:/root/.m2'}}steps {echo "打包项目"sh 'mvn clean install -DskipTests=true'echo "构建镜像"sh "docker-compose -f docker-compose.yml -f docker-compose.dev.yml build ${service_names}"}}stage('下载镜像') {agent anysteps {echo "下载镜像"sh "docker save ${images} -o images.tar"}}stage('发往远程'){steps {sshPublisher(publishers: [sshPublisherDesc(configName: """$remoteId""", transfers: [sshTransfer(cleanRemote: false, excludes: '',execCommand: """echo '准备解压发布文件并部署'cd /home/deploy/cpmc#解压到当前目录,并去除一级目录docker load < images.tardocker-compose up -d ${service_names}echo '镜像加载成功'""",execTimeout: 120000,flatten: false,makeEmptyDirs: false,noDefaultExcludes: false,patternSeparator: '[, ]+',remoteDirectory: "cpmc",remoteDirectorySDF: false,removePrefix: '',sourceFiles: "images.tar, config/.env, docker-compose.yml")],usePromotionTimestamp: false,useWorkspaceInPromotion: false,verbose: true)])}}}
}
构建发布
在配置好以上的内容之后,在Dashboard
-cpmc
-Build with Parameters
构建、发布远程
查看发布日志
点击构建历史下的最新一次构建
——Console Output
构建成功~
ps:如果构建失败可以根据错误提示去解决。博主写这篇博客的时候也是构建了10余次才最后构建成功。。
最后
到这里,整一套自动构建远程发布就实现啦~欢迎留言讨论!
相关文章:
Jenkins+Docker+Maven+gitlab实现自动构建、远程发布
前言 一个项目完整的生命周期是从开发的coding阶段和coding阶段的质量测试,再到多次发布投入使用。目前大部分的测试阶段并不是从coding结束后开始的,而是和coding同步进行的。可能今天早上coding完成一个功能,下午就要投入测试。在这期间&a…...
centos7克隆虚拟机完成后的的一些配置介绍
系列文章目录 centos7配置静态网络常见问题归纳_张小鱼༒的博客-CSDN博客 文章目录 目录 系列文章目录 前言 一、配置Hadoop要下载的压缩包 1、下载对应版本的Hadoop压缩包 2、我们如何查看自己电脑的端口号 3、下载jdk对应的版本 二、虚拟机centos7克隆虚拟机完成后的一些基本…...
C语言/动态内存管理函数
C程序运行时,内存将被划分为三个区域,而动态开辟的内存区间位于堆区。 文章目录 前言 一、内存划分 二、malloc函数 三、calloc函数 四、realloc函数 五、free函数 总结 前言 在使用C语言编写程序时,使用动态内存是不可避免的&#x…...
华为OD机试题,用 Java 解【任务调度】问题
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不要…...
河南农业大学2023春蓝桥杯赛前训练第一场
A 滑板上楼梯 贪心 要求最少次数,尽量多跳三阶的,不能连续跳三阶,三阶后面一定要跟着一个一阶,相当于直接跳四阶 每次跳四阶都是两步(3、1),如果 % 4 之后,正好剩下 3 ,…...
docker-dockerfile
1.常用保留字指令 FROM : 基础镜像MAINTAINER: 维护者姓名和邮箱RUN : Run ["可执行文件",参数1]; Run [shell命令]EXPOSE: 暴露出的端口号WORKDIR: 登录后的位置USER: 执行用户,默认是rootENV: 构建过程的环境变量ADD: 将宿主机的文件拷贝到…...
【JavaEE】浅识进程
一、什么是进程1.1 操作系统学习进程之前首先要了解我们的操作系统(OS),我们的操作系统实际上也是一款软件,属于系统软件的范畴,操作系统早期采用命令提示框与用户交互,我们启动某个软件,打开某…...
Java_Spring:1. Spring 概述
目录 1 spring 是什么 2 Spring 的发展历程 3 spring 的优势 4 spring 的体系结构 1 spring 是什么 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspec…...
使用Maven实现第一个Servlet程序
目录 前言: Maven 什么是Maven 创建Maven项目 Mevan目录介绍 Servlet程序 引入Servlet依赖 创建目录结构 编写代码 打包程序 部署程序 验证程序 idea集成Tomcat 下载Tomcat插件 配置Tomcat的路径 Smart Tomcat工作原理 小结: 前言&#…...
【MySQL】MySQL的优化(一)
目录 查看SQL执行频率 定位低效率执行SQL 定位低效率执行SQL-慢查询日志 定位低效率执行SQL-show processlist 查看SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以查看服务器状态信息。通 过查看状态信息可以查看对当…...
win kubernetes dashbord部署springboot服务
文章目录前言一、新建springboot工程二、制作镜像1.编写dockerfile2.使用阿里云镜像仓库3.使用dashbord部署服务总结前言 使用win版docker desktop安装的k8s,kubenetes dashbord。 一、新建springboot工程 就是简单一个接口。没什么说的 二、制作镜像 1.编写dock…...
Linux之进程终止
本节目录1.进程终止2.exit与_exit函数1.进程终止 进程终止时,操作系统做了什么? 释放进程中申请的相关内核数据结构和对应的数据和代码。本质就是释放系统资源。 进程终止的常见方式 a.代码跑完,结果正确 b.代码跑完,结果不正确…...
全网独家首发|极致版YOLOv7改进大提升(推荐)网络配置文件仅24层!更清晰更方便更快的改进YOLOv7网络模型
有不少小伙伴和我交流YOLO改进的时候,都说YOLOv7的网络配置文件长达104层,改起来很费力,数层数都要数很久,还很容易出错,而且基于YOLOv5代码架构,Debug起来也确实比较费时,所以博主对YOLOv7网络…...
C++入门 谁都能看懂的类和对象
类 C语言结构体中只能定义变量. 在C中,结构体内不仅可以定义变量,也可以定义函数。 //c语言 typedef struct ListNode {int val;struct ListNode* next; }LTN; //c struct ListNode {int val;//c中可以直接用这个,不用加structListNode* next…...
C++ STL:string类的模拟实现
目录 前置说明 一. 构造函数和析构函数的模拟实现 1.1 构造函数 1.2 析构函数 二. string类对象容量及成员相关的函数 2.1 获取字符串有效字符数、容量及_str成员变量获取相关函数 2.2 扩容及变长相关函数 2.3 字符串清空和判空函数 三. 运算符重载函数 3.1 赋值运算…...
并发编程---线程池(六)
阻塞队列的应⽤——线程池一 线程池基本概念二 线程池三种常⽤创建⽅式2.1.newFixedThreadPool线程池:2.2.newSingleThreadExecutor线程池:2.3.newCachedThreadPool线程池:2.4. 线程池代码演示三 线程池创建的七个参数四 线程池底层原理理解&…...
【Java实战】不会还有人用if else进行参数校验吧
当请求参数很多,几乎每一个参数都需要后端去兜底校验时,你还在写if else去判断参数是否为空吗??要校验为空的参数三四个还好,要是十几个,业务逻辑还没开始就写二三十行代码开始堆山了嘛,教给大家…...
深度学习部署(十六): CUDA RunTime API _vector-add 使用cuda核函数实现向量加法
1. 知识点 nthreads的取值,不能大于block能取值的最大值。一般可以直接给512、256,性能就是比较不错的 (input_size block_size - 1) / block_size;是向上取整 对于一维数组时,采用只定义layout的x维度,若处理的是二维ÿ…...
堆结构的两个应用
堆排序 堆结构很大的一个用处,就是用于堆排序了,堆排序的时间复杂度是O(n∗log2n)O(n*log_2n)O(n∗log2n)量级的,在众多排序算法中所处的地位也是高手级别的了。 但很多人在使用堆排序的时候,首先认为我必须得有一个堆数据结构…...
Java中的 static
1 static 静态变量 1.1 静态变量的使用 static变量也称作静态变量,也叫做类变量 静态变量被所有的对象所共享,在内存中只有一个副本 当且仅当在类初次加载时会被初始化 静态变量属于类 通过类名就可以直接调用静态变量 也可以通过对象名.静态变量…...
基于Vision Transformer的图像去雾算法研究与实现(附源码)
基于Vision Transformer的图像去雾算法研究与实现 0. 服务器性能简单监控 \LOG_USE_CPU_MEMORY\文件夹下的use_memory.py文件可以实时输出CPU使用率以及内存使用率,配合nvidia-smi监控GPU使用率 可以了解服务器性能是否足够;运行时在哪一步使用率突然…...
服务器相关常用的命令
cshell语法 https://www.doc88.com/p-4985161471426.html domainname命令 1)查看当前系统域名 domainname2)设置并查看当前系统域名 domainname example.com3)显示主机ip地址 domainname -Iwhich命令 which 系统命令在 PATH 变量指定的…...
今天是国际数学日,既是爱因斯坦的生日又是霍金的忌日
目录 一、库函数计算 π 二、近似值计算 π 三、无穷级数计算 π 四、割圆术计算 π 五、蒙特卡罗法计算 π 六、计算800位精确值 从2020年开始,每年的3月14日又被定为国际数学日,是2019年11月26日联合国教科文组织第四十届大会上正式宣布…...
Qt Quick - StackLayout 堆布局
StackLayout 堆布局一、概述二、attached 属性三、例子1. 按钮切换 StackLayout 页面一、概述 StackLayout 其实就是说,在同一个时刻里面,只有一个页面是展示出来的,类似QStackWidget 的功能,主要就是切换界面的功能。这个类型我…...
C/C++网络编程笔记Socket
https://www.bilibili.com/video/BV11Z4y157RY/?vd_sourced0030c72c95e04a14c5614c1c0e6159b上面链接是B站的博主教程,源代码来自上面视频,侵删,这里只是做笔记,以供复习和分享。上一篇博客我记录了配置环境并且跑通了࿰…...
RK3568平台开发系列讲解(网络篇)什么是Socket套接字
🚀返回专栏总目录 文章目录 一、什么是socket ?二、socket 理解为电话机三、socket 的发展历史四、套接字地址格式4.1、通用套接字地址格式4.2、IPv4 套接字格式地址4.3、IPv6 套接字地址格式4.4、几种套接字地址格式比较沉淀、分享、成长,让自己和他人都能有所收获!😄 …...
2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——渗透测试解析(详细)
渗透测试 任务环境说明: 服务器场景:Server9服务器场景操作系统:未知(关闭连接)系统用户名:administrator密码:123456通过本地PC中渗透测试平台Kali对靶机场景进行系统服务及版本扫描渗透测试,以xml格式向指定文件输出信息(使用工具Nmap),将以xml格式向指定文件输出…...
尚融宝03-mybatis-plus基本CRUD和常用注解
目录 一、通用Mapper 1、Create 2、Retrieve 3、Update 4、Delete 二、通用Service 1、创建Service接口 2、创建Service实现类 3、创建测试类 4、测试记录数 5、测试批量插入 三、自定义Mapper 1、接口方法定义 2、创建xml文件 3、测试条件查询 四、自定义Serv…...
vue多行显示文字展开
这几天项目里面有一个需求,多行需要进行展开文字,类似实现这种效果 难点就在于页面布局 一开始就跟无头苍蝇似的,到处百度 ,后面发现网上的都不适合自己,最终想到了解决方案 下面是思路: 需求是超过3行&a…...
SpringBoot:SpringBoot 的底层运行原理解析
声明原文出处:狂神说 文章目录1. pom.xml1 . 父依赖2 . 启动器 spring-boot-starter2. 主启动类的注解1. 默认的主启动类2. SpringBootApplication3. ComponentScan4. SpringBootConfiguration5. SpringBootApplication 注解6. spring.factories7. 结论8. 简单图解3…...
Asp.net 手机网站制作/淘宝推广哪种方式最好
1.算术运算符 注意: % 取余数 (1)自增 ()前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式; 后自增,先运算完整个表达式(分号前面的都是表达式)&#x…...
饰品网站建设/网站关键词怎么添加
目录 搜索内容中包含learning或者Hadoop的文档 搜索标题中包含learning和Hadoop的bolg 搜索标题中包含java,Hadoop,spark,elasticsearch,4个关键字中至少三个的bolg 用bool组合多个搜索条件java,Hadoop,spark,elasticsearch,来搜索title 使用should如何搜索java,Hadoop,sp…...
商丘网站制作推广/嘉兴网站建设
一、解决什么问题1、html中img引入的图片地址没有被替换,找不到图片2、html公共部分复用问题,如头部、底部、浮动层等二、html中img引入图片问题解决1、在index.html插入img,引用图片2、npm run dev运行结果如下:因为图片地址没有…...
福州做网站的公/青岛网站推广企业
计算机配置内存12G,显存4G,运行有10分钟左右就提醒说内存不够用然后退出运行,直觉是程序bug问题 终于找到靠谱解决方案: http://cherishlc.iteye.com/blog/2324796 这个博客的第二个给了大致的讲解,在给出的附录中&…...
网站建设手机端管网/腾讯广告推广平台入口
题目描述: 一个 n 行 n 列的蛇形矩阵可由如下方法生成: 从矩阵的左上角(第 1 行第 1 列)出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操…...
上海头条新闻最新消息/山西seo基础教程
摘要:课程学习:零基础入门学习Python - 阿里云大学 上图中T恤上印着“人生苦短,我用Python”的大牛就是Python的创始人Guido van Rossum。其实这句话来自Bruce Ecke(C标准委员会成员,《Thinking in Java》作者…...