centos7系统使用docker-compose安装部署jenkins
CentOS7系统使用docker-compose安装部署jenkins,并实现前后端自动构建
记录一次工作中部署jenkins的真实经历,总结了相关经验
1.准备环境
1.java
由于最新的jenkins需要jdk11以上才能支持,而系统里的jdk是1.8的,因此等jenkins安装好后使用jenkins容器里自带的jdk17
2.maven
centos7安装maven,步骤:
1.下载 apache-maven-3.6.3-bin.tar.gz
2.解压
3.配置环境变量
vim /etc/profile
4.刷新配置文件
source /etc/profile
5.验证
mvn -v
3.node
centos7 使用nvm 下载16以上版本的node可能会遇到如下的报错
这里直接采用jenkins自动安装node 18
2.准备docker-compose.yml文件
version : '3'
services:jenkins:user: rootrestart: alwaysimage: jenkins/jenkinscontainer_name: jenkinsenvironment:- TZ=Asia/Shanghaiports:- "10240:8080"- "10241:50000"expose:- "8080"- "50000"volumes:- /data/jenkins/jenkins_home/:/var/jenkins_home/- /data/nginx/html/:/data/nginx/html/- /data/nginx/htmldev/:/data/nginx/htmldev/- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /data/maven/apache-maven-3.6.3:/data/maven/apache-maven-3.6.3- /root/.ssh:/root/.ssh
- /var/jenkins_home/ 这个是容器里默认的jenkins工作目录,需要挂载出来
- /data/nginx/html/和/data/nginx/htmldev/ 分别对应后面前端项目pc端、移动端的dist存放目录,配置于nginx中,挂载出来是由于jenkins配置前端构建的时候需要配置nginx目录
- maven挂载刚刚安装的maven
3.执行docker-compose
# 跳转到docker-compose.yml文件目录
cd /data/jenkinsll#执行
docker-compose up -d#查看运行状态
docker ps
4.初始化jenkins
-
访问 ip:10240 jenkins后台
查找初始密码
-
安装插件
选择安装推荐的插件,这里如果安装失败,后续再手动切换源,安装必要的插件即可
源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
参考:
docker安装jenkins并配置国内插件镜像地址_jenkins国内镜像-CSDN博客
Jenkins必备安装插件 - 知乎 (zhihu.com)
-
创建管理员账号
一直下一步
- 切换中文(此时还有部分界面是英文)
安装locale插件即可
参考:
【jenkins】教你jenkins设置为中文_jenkins 中文插件,2024年最新这操作真香_jenkins设置中文-CSDN博客
5.系统配置
-
凭据管理
添加全局凭据
-
git账号密码(拉取代码)
-
gitlab token(用于监听git,自动构建)
安装gitlab插件
去gitlab生成token,复制
添加gitlab api token凭证
-
-
全局工具配置
-
JDK
使用jenkins容器自带jdk17
-
maven
使用本地安装的maven,刚刚已经挂载
-
nodejs
安装nodejs插件
勾选自动安装,node版本选择18
-
-
系统配置
-
远程部署配置
安装远程部署插件
配置publish over ssh - SSH Servers
-
远程部署客户测试环境
-
远程部署公司开发环境
-
-
gitlab连接配置
-
6.新建构建任务
1.后端(含备份、回滚)
1.本机部署
举例:构建测试服务器(本地),从git的develop分支拉取代码
-
选择自由风格
-
设置保留构建历史数量
-
配置参数化构建,为了实现回滚
-
配置源码管理
-
构建环境
-
增加构建步骤
maven
备份
#!/bin/bash case $Status indeploy)echo "Status:$Status"path="${WORKSPACE}/csms-admin/bak/${BUILD_NUMBER}" #创建每次要备份的目录if [ -d $path ];thenecho "The files is already exists "elsemkdir -p $pathfi\cp -f ${WORKSPACE}/csms-admin/target/*.jar $path #将打包好的jar包备份到相应目录,覆盖已存在的目标echo "bak ------------ Completing!";;rollback)echo "Status:$Status"echo "Version:$Version"echo "BUILD_NUMBER:$BUILD_NUMBER"v=$Versionif [ $Version -eq 0 ]; thenv=$(($BUILD_NUMBER - 2)) # 如果 $Version 是 0,则赋值为 $BUILD_NUMBER - 2fiecho "回滚到版本--v:${v}"cd ${WORKSPACE}/csms-admin/bak/${v} #进入备份目录\cp -f *.jar ${WORKSPACE}/csms-admin/target/ #将备份拷贝到程序打包目录中,并覆盖之前的jar包;;*)exit;; esac
构建新docker镜像并启动
cd ${WORKSPACE} docker stop csms-admin || true docker rm csms-admin || true docker rmi csms-admin || true docker build --build-arg profileActive=test --build-arg port=8889 -t csms-admin . docker run -d -p 192.168.100.53:8889:8889 --name csms-admin csms-admin
保留10个版本,删除以前的备份
#!/bin/bash #rm_file>14day ReservedNum=10 #保留文件数量 rm_file_dir=${WORKSPACE}/csms-admin/bak #需要删除文件的路径cd $rm_file_dir #进入文件夹 RootDir=$(pwd) #当前文件路径 FileNum=$(ls -l | grep '^d' | wc -l) #查找文件夹数量 OldFile=$(ls -rt | head -1) #找出最早文件夹 if [ $RootDir == $rm_file_dir ];then #判断所在目录是否正确echo $RootDir echo $rm_file_dirwhile (($FileNum>$ReservedNum)) #文件数超过设置变量才执行doecho "Delete File:"$RootDir'/'$OldFile #打印要删除的文件名称rm -rf $RootDir'/'$OldFile #删除文件let "FileNum--" #变量自减操作OldFile=$(ls -rt | head -1) #更新dmp最早文件done elseecho "error file path " #所在目录不对打印出路径错误 fi
-
构建触发器
配置gitlab监听,自动构建
打开gitlab
将
分别粘贴到gitlab-设置-集成
-
测试
git push自动触发jenkins构建
查看控制台
查看docker容器运行状态
docker ps
后端启动成功
2.远程部署
举例:构建开发服务器(另一台服务器),采用在本机打包、备份,然后通过ssh连接远程开发服务器,传送jar包并执行的方式
-
复制一个构建任务
-
修改所有的profile环境,注释docker步骤
-
git触发器配置
(同上)
-
增加Send files or execute commands over SSH 步骤
#!/bin/bashJAR_HOME='/data/jenkins/jenkins_home/workspace/csms-dev-develop/csms-admin/target' WEB_HOME='/data/csms/csms-admin'#停止原来的服务 ps -ef | grep csms-admin | grep -v grep | awk '{print $2}' | xargs kill -9#替换原来的jar包 cd ${JAR_HOME} mv csms-admin-dev.jar csms-admin.jar cp -f csms-admin.jar ${WEB_HOME}#重启服务 cd ${WEB_HOME} nohup sh startup.sh &
startup.sh
#!/bin/bash #1,获取myjar的进程号 PID=$(ps -ef|grep csms-admin| grep -v grep | awk '{print $2}') #2,启动myjar的函数 start(){nohup /data/java/jdk1.8.0_321/bin/java -Dspring.profiles.active=dev -jar -Xms1024m -Xms2048m csms-admin.jar & } #3,判断1中获取的PID是否存在,即判断myjar有没有启动if [ -z "$PID" ] then #4,日志echo "Start the csms-admin directly " #5,myjar之前没有启动的话,这里直接调用start函数start else #6,myjar之前启动过且进程依然存活,则kill掉,然后调用start函数echo "kill the existing csms-admin process firstly."kill -9 $PIDecho " $PID has been killed"start fi
2.前端
由于nginx部署在开发服务器(非jenkins所在服务器),所以前端部署都为远程部署
1.PC端远程部署
-
自由风格
同上
-
丢弃旧的构建
同上
-
源码管理
同上
-
构建触发器
同上
-
构建环境
-
构建步骤
npm install rm -rf ${WORKSPACE}/dist npm run build:dev #本机部署则去掉下面的ssh步骤,这里加上下面的语句 #rm -rf /data/csms/csms-web/html #mkdir -p /data/csms/csms-web/html #cp -rf ${WORKSPACE}/dist /data/csms/csms-web/html
-
增加Send files or execute commands over SSH 步骤
#!/bin/bashDIST_HOME='/data/jenkins/jenkins_home/workspace/csms-vue-test-dev-pc' HTML_HOME='/data/csms/csms-web/test/html'#覆盖原来的dist cp -rf ${DIST_HOME}/dist/* ${HTML_HOME}/dist
2.移动端远程部署
-
构建步骤
-
ssh
#!/bin/bashDIST_HOME='/data/jenkins/jenkins_home/workspace/csms-vue-test-dev' HTML_HOME='/data/csms/csms-app/test/html'#覆盖原来的dist cp -rf ${DIST_HOME}/mobiled_dist/* ${HTML_HOME}/mobiled_dist
-
其他步骤同PC
7.在jenkins上编写maven的setting文件
有的时候需要临时改下maven的setting文件,或者想编写多份setting文件给不同的构建任务去使用,可以在jenkins上直接进行配置
-
添加配置文件
参考:
PS:这里没有这个选项的,需要下载插件
Jenkins 配置文件管理插件 Config File Provider_jenkins config file provider-CSDN博客
-
全局配置
-
到构建任务里配置
8.后端项目Dockerfile示例
本文的后端项目对应的Dockerfile,可参考使用,一般放在项目的根目录下
# 基础镜像
FROM openjdk:8-jre# 维护者信息
MAINTAINER asusENV LANG=zh_CN.UTF8
ENV LC_ALL=zh_CN.UTF8# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD csms-admin/target/csms-admin-*.jar csms.jar# 动态参数
ARG profileActive=dev
ENV profileActive ${profileActive}ARG port=8881
ENV port ${port}# 容器启动执行命令
ENTRYPOINT ["java", "-Xms256M","-Xmx1224M","-Xmn256M","-Xss256K","-Duser.timezone=GMT+8", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=${profileActive}", "-jar", "/csms.jar"]# 声明容器提供服务端口
EXPOSE ${port}
PS:上面展示的自动构建是每次都删除原来的镜像和容器,重新构建镜像,其实也可以Dockerfile里不ADD jar包,然后将容器里放jar包的目录在 run 这个镜像容器的时候挂载出来,这样只需要构建一次镜像,创建一次容器,后面jar包更新了,只需要重启容器即可。
9.Jenkins新增用户并根据项目分配权限
参考:
jenkins增加用户,并配置权限,保姆式教学_jenkins创建用户并添加权限-CSDN博客
Jenkins—jenkins新增用户且配置权限-CSDN博客
10.踩坑记录
1.由于lombok版本过低导致Maven编译失败
在构建任务中,jdk指定的是jenkins里自带的jdk17,项目中maven编译指定的jdk是1.8,这里是下图报错的根本原因,但是之前其他构建任务也是这样配置的,还是正常编译,最终在网上查询相关博客,改了lombok版本才得以解决
参考:项目install的时候报错“module jdk.compiler does not “opens com.sun.tools.javac.processing“ to unnamed modul
修改lombok版本为最新版本(能支持jdk17)
相关文章:
centos7系统使用docker-compose安装部署jenkins
CentOS7系统使用docker-compose安装部署jenkins,并实现前后端自动构建 记录一次工作中部署jenkins的真实经历,总结了相关经验 1.准备环境 1.java 由于最新的jenkins需要jdk11以上才能支持,而系统里的jdk是1.8的,因此等jenkins安…...
传染病报卡内容——丙型
--丙型 select a.morbiditdate 发病日期, diagnosedate 诊断日期, a.deathdate 死亡日期, a.casetypequality 病例分类,a.hcvrna "HCR_RNA定量" from zl_sdmb.t_报卡记录 t, c1_infectiousv1_6 a where t.id a.fileid and t.卡片种类 传…...
本地快速部署大语言模型开发平台Dify并实现远程访问保姆级教程
文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署大语言模型应用开发平台Dify,并结合cpolar内网穿透工具实现公网环境远程访问…...
《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 02 Clos拓扑
本章回答以下问题: 什么是 Clos 拓扑,它与“接入 - 汇聚 - 核心”拓扑有何不同?Clos 拓扑的特征是什么?Clos 拓扑对数据中心网络的影响是什么? Clos拓扑 云原生数据中心基础设施的先行者们想要构建一种支持大规模水平扩展网络。 基本的Clos拓扑如图…...
VUE3版本新特性
VUE3版本新特性 VUE3和VUE2的区别路由的使用vite安装项目新特性使用 1.VUE3和VUE2的区别 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece 于 2022 年 2 月 7 日星期一成为新的默认版本! Vue3性能更高,初次渲染快55%, 更新渲染快133% 。…...
【Oracle篇】Oracle数据库坏块处理:rman修复坏块实践与案例分析(第七篇,总共八篇)
💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...
学懂C#编程:从一个简单的例子理解事件处理
在C#中,事件是一种特殊的委托类型,用于在对象上发生某些事情时通知订阅者。事件的处理通常包括定义事件,创建触发事件的条件,以及订阅该事件的事件处理程序。 以下是一个简单的C#事件处理示例: using System;// 定义…...
深入理解指针(2)
4. const 修饰指针 4.1 const修饰变量 变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制,不能被修改,怎么做呢?这就是const的作⽤。 …...
C#.Net筑基-集合知识全解
01、集合基础知识 .Net 中提供了一系列的管理对象集合的类型,数组、可变列表、字典等。从类型安全上集合分为两类,泛型集合 和 非泛型集合,传统的非泛型集合存储为Object,需要类型转。而泛型集合提供了更好的性能、编译时类型安全…...
AI PPT生成器,一键在线智能生成PPT工具
PPT作为商业沟通和教育培训中的重要工具,PPT制作对于我们来说并不陌生。但是传统的PPT制作不仅耗时,而且想要做出精美的PPT,需要具备一定的设计技能。下面小编就来和大家分享几款AI PPT工具,只要输入主题,内容就可以在…...
stm32学习笔记---零基础入门介绍2
目录 STM32介绍 STM32家族系列 ARM介绍 ARM内核型号种类 我们学习用的STM32 片上资源/外设(Peripheral) 命名规则 系统结构 引脚定义 STM32的启动配置 STM32最小系统电路和其他部分电路 最小系统板的实物图 附:安装软件准备 声明…...
搭建取图系统app源码开发,满足广泛应用需求
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 图片已成为信息传递的重要媒介,广泛应用于各个领域。为满足日益增长的图片需求,搭建一款高效的取图系统,可以为用户提供便捷、全面的…...
语音质量评价方法之MOS
引言 在语音增强、语音合成、语音转换、声音转换、语音克隆、语音修复等等领域,常常要对输出的语音进行评价。对语音的质量评价一般关注两个方面,即主观评价和客观评价。主观评价就是人凭借听觉感受对语音进行打分,客观评价比较广泛…...
gorm简介
【1】ORM: 即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。 【2】GORM gorm是go语言的一个orm…...
MySQL:SELECT list is not in GROUP BY clause 报错 解决方案
一、前言 一大早上测试环境,发现测试环境的MySQL报错了。 SELECT list is not in GROUP BY clause and contains nonaggregated column二、解决方案 官方文档中提到: 大致意思: 用于GROUP BY的SQL / 92标准要求满足以下条件: SE…...
IPython的使用技巧
1、解释说明 IPython是一个强大的Python交互式shell,它提供了丰富的功能,如自动补全、历史记录、内置帮助等。IPython使得在命令行下编写和测试Python代码变得更加方便和高效。 2、使用示例 安装IPython: pip install ipython启动IPython…...
Spring Boot 多线程例子
在Spring Boot中,多线程可以通过Java的并发工具来实现。以下是一些常见的多线程实现方法: 1. 使用Async注解和CompletableFuture: 首先,需要在Spring Boot应用的主类上添加EnableAsync注解,以启用异步支持。 java Spr…...
java干货 线程池的分析和使用
文章目录 一、了解线程池1.1 什么是线程池1.2 为什么需要线程池 二、四种线程池的使用2.1 newFixedThreadPool2.2 newCachedThreadPool2.3 newSingleThreadExecutor2.4 newScheduledThreadPool 三、自定义线程池3.1 线程池七大核心参数3.2 线程池内部处理逻辑 一、了解线程池 …...
文本张量入门
张量,英文为Tensor,是机器学习的基本构建模块,是以数字方式表示数据的形式。 张量的基本类型: 创建一个标量(0维张量),也就是一个单独的数字 scalar torch.tensor(7) scalar.ndim # 返回张量的维度 0 # …...
js文字如何轮播?
<div class"td-style"> <span class"td-text">内容1内容1内容1内容1内容1内容1</span> </div> css: <style> .td-style { width: 160px; height: 72px; overflow: hidden; white-…...
Linux 五种IO模型
注:还有一种信号驱动IO,使用较少暂不讨论; 一,区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比,说的太复杂了,其实没必要,两句话就能说清楚。 首先,对于读数据rec…...
深度解析响应式异步编程模型
上一篇文章中我们聊了一下线程池,基于线程池的多线程编程是我们在高并发场景下提升系统处理效率的有效手段,但却不是唯一的。今天我们来看一下另一种异步开发的常用手段-响应式编程模型 传统多线程模型的缺陷 多线程模型是目前应用最为广泛的并发编程手段,但凡遇到什么性能…...
一个软件是如何开发出来的呢?
一、前言 如今,AI大爆发的时代,作为一名IT从业者,你是否也想尝试开发一套自己的系统,实现那些看似有可能实现的天马行空的想法,变成一个优秀甚至伟大的产品,甚至带来某个行业的革新,那作为一名…...
宝塔板面有哪些优势
哈喽呀,大家好呀,淼淼又来和大家见面啦,在当今数字化时代,随着云计算和互联网技术的飞速发展,服务器管理成为了许多企业和个人开发者不可或缺的一部分。然而,传统服务器管理方式的复杂性和技术门槛往往令初…...
Mybatis中BaseEntity作用
新建各种对象的时候,一般来说,有几个属性是所有对象共有的,比如说id,is_del,is_enable这些,然后设置一个基础对象,以后新建所有对象的时候都继承它,就省的每次都要写这些共有的属性了...
IDEA2023中使用run Dashboard面板?实现批量运行微服务
1、直接点击Add service--->Run Configuration Type---->Spring Boot 2、这样就出现了run Dashboard面板,可同时运行多个工程模块,shift选中所有启动类组命名(Group Configurations) 3、启动所有的项目...
分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!
文章目录 引言一、专业解析二、名校效应分析三、好专业和好学校的权衡结论个人建议 引言 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,…...
CentOS 8.5 - 配置ssh的免密登录
文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具,并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…...
反转链表(java精简版)
反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…...
QPair使用详解
QPair使用详解 一、创建和初始化 QPair1.1 QPair默认构造1.2 使用值初始化1.3 QPair拷贝构造 二、访问 QPair 的值2.1 修改 QPair 的值2.2 比较 QPair2.3 使用 qMakePair 辅助函数2.4 使用 QPair 的场景 三、QPair自定结构体3.1 定义自定义结构体3.2 在 QPair 中使用自定义结构…...
微信小程序企业网站/域名注册网
http://www.lydsy.com/JudgeOnline/problem.php?id1061 (题目链接) 题意 给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l,r],花费为ci,求最小花费。 Solution 我用的是线性规划单纯形法。 首先要…...
犀牛云做网站费用/保定百度推广联系电话
工厂模式,无非可以用下面的代码来概括 public class GoodsFactory {public static void create() {return new Goods();} } 这是他最简洁的形式。但是看完这一章以后,我很疑惑,最简洁的形式都感觉很多余,因为这个工厂类和方法是不…...
上海有什么公司/南昌seo排名
(1)问题描述 给定几组数据,利用贪心算法的思想,将物品装入背包并使得其价值最大。 (2)实验步骤 ① 计算每种物品单位重量的价值 Vi/Wi. ② 依贪心选择策略,将尽可能多的单位重量价值最高的物品装…...
自己做短视频网站/磁力猫官网cilimao
matlab GUI 使用技巧 编写一个好的GUI界面注意事项控件命名规范设置控件位置注意查询控件属性其他 bug生成exe文件 matlab GUI 使用技巧 本文首先在Github上更新,同时也会在CSDN和知乎同步更新。 用户界面分成两种:TUI(文本交互界面&…...
淘客帝国 wordpress/爱站seo工具包官网
这是 利用Excel学习Python 系列的第8篇文章想用一个完整的案例讲解Python数据分析的整个流程和基础知识,实际上以一个数据集为例,数据集是天池上的一个短租数据集,后台回复:短租数据集,即可获得。先来想一下数据分析的…...
vr网站开发/网上引流推广怎么做
linux Windows的默认编码为GBK,Linux的默认编码为UTF-8。在Windows下编辑的中文,在Linux下显示为乱码。为了解决此问题,修改Linux的默认编码为GBK2)查看支持的字符集:# locale -a3) 安装英文版默认的字符集配置为:# c…...