芝法酱学习笔记(0.5)——使用jenkins做自动打包

前言

上节讲了SpringBoot上的打包。但这些过程都是手动的,在实际的开发测试时,自动化的打包部署,可以大大提升团队开发的效率

一、去官网下载

1.1 官网安装命令

对于如何安装的问题,我向来推荐官网

wget -O /usr/share/keyrings/jenkins-keyring.asc \https://pkg.jenkins.io/debian-stable/jenkins.io-2023.keyecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \https://pkg.jenkins.io/debian-stable binary/ | sudo tee \/etc/apt/sources.list.d/jenkins.list > /dev/nullsudo apt-get updatesudo apt-get install fontconfigsudo apt-get install jenkins

1.2 错误解决

如果出现如下错误:

Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /lib/systemd/system/jenkins.service.
Could not execute systemctl:  at /usr/bin/deb-systemd-invoke line 148.

则键入:

journalctl -u jenkins
journalctl -xeu jenkins.service

查看到底错哪了,显示说:

jenkins: failed to find a valid Java installation
jenkins.service: Main process exited, code=exited, status=1/FAILU>
jenkins.service: Failed with result 'exit-code'.
Failed to start Jenkins Continuous Integration Server.

这说明jenkins没找到jre环境
用vim打开/lib/systemd/system/jenkins.service
我们可以看到,执行的脚本是/usr/bin/jenkins,用vim打开它

其实,应该是jenkins无法获取我在root中设置的环境,那就把jenkins改成root。
再次vim /lib/systemd/system/jenkins.service,更改如下配置

[Service]
...
#执行脚本前,运行一下设置环境变量
#这样做的好处是,即使在jenkins的pipline中,也可以使用linux的环境变量了
ExecStart=/bin/bash -c 'source /etc/profile &&  /usr/bin/jenkins'Environment="JENKINS_PORT=8888"
#让jenkin放到nginx后面
Environment="JENKINS_PREFIX=/jenkins"
User=root
Group=root
systemctl daemon-reload
systemctl start jenkins

1.3 配置nginx

location /jenkins {proxy_pass http://127.0.0.1:8888;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_read_timeout 90;
}

这样一来,我们就可以通过192.160.0.64/jenkins访问jenkins了

二、jenkins插件安装与设置

2.1 初始化

进入jenkins,首先页面如图所示
在这里插入图片描述

vim /var/lib/jenkins/secrets/initialAdminPassword

把密钥拷贝过来,进入jenkins,然后安装需要的插件。
尤其要安装的是SSH Pipeline Steps,用于远程访问

2.2 记得安装git

如果出现Failed to connect to repository : Error performing git command: git ls-remote -h https://gitee.com/**/*.git HEAD 这一类的错误时,说明宿主机没有装git,apt install git一下即可

2.3 git的账户密码设置

点击Credentials
在这里插入图片描述
添加一个凭证
在这里插入图片描述
在这里插入图片描述

三、流水线自动编译部署

3.1 目标

上节我们讲了SpringBoot下的打包,把lib,resource,config等分离了出去。所以我们这次的自动化编译,需要可以勾选是否更新lib,resource,config的选项。
同一个项目,可能被部署为多个实例,不同实例部署在不同端口。
编译好的项目,将被部署到/WORK/APP/study2024-class004/$appName,并调用startup.sh脚本启动项目

3.2 参数化

勾选This project is parameterized,添加如下参数

参数名默认值描述
profiletest环境
appNameapp001部署文件夹
port8081端口
version1.0.0版本
isUpdateCodetrue是否更新代码
isUpdateBinfalse是否更新bin
isUpdateConfigfalse是否更新配置文件
isUpdateLibfalse是否更新lib包
isUpdateStaticfalse是否更新静态资源
isUpdateMapperfalse是否更新mapper
gitTag*/mastergit分支

要值得注意的是,gitTag是Git parameter,Advance里,Branch Filter设置为origin/(.*)

3.3 jenkins文件

import java.text.SimpleDateFormatnode{def remote = [:]remote.name = '地下室主机'remote.host = '192.168.0.64'remote.user = 'root'remote.password = 'ilv0404@1314'remote.deploymentHome = "/WORK/APP/study2024-class003"remote.allowAnyHosts = truedef app = [:]app.module = "busy/general-test"app.name = "nbr"app.version = "${version}"app.cd = "${appName}"app.port = "${port}"def timestamp = currentBuild.getTimeInMillis()def formattedTimestamp = new SimpleDateFormat("yyyy-MM-dd-HH_mm_ss").format(timestamp)stage("拉取代码"){git branch: "${gitTag}", credentialsId: 'gitSec', url: 'https://gitee.com/hataksumo/study2024-class004.git'}stage("编译代码"){sh """cd codemvn cleanmvn package -pl busy/general-test -am -P${profile} -Dmaven.test.skip=true"""}stage("远程推送"){echo "停服"sshCommand remote: remote, failOnError:false, command: """cd ${remote.deploymentHome}/${app.cd}/bin./shutdown.sh --appName ${app.cd}"""if(isUpdateCode == "true"){echo "备份jar包"sshCommand remote: remote, failOnError:false, command: "mv ${remote.deploymentHome}/${app.cd}/${app.name}-${app.version}.jar ${remote.deploymentHome}/${app.cd}/${app.name}-${app.version}.jar.bac"echo "拷贝jar包"sshPut remote: remote, from: "code/${app.module}/target/${app.name}.jar", into: "${remote.deploymentHome}/${app.cd}/${app.name}-${app.version}.jar"echo "删除jar包"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/${app.name}-${app.version}.jar.bac"}if(isUpdateConfig == "true"){echo "删除config"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/config"echo "拷贝lib包"sshPut remote: remote, from: "code/${app.module}/target/config", into: "${remote.deploymentHome}/${app.cd}"}if(isUpdateLib == "true"){echo "删除lib包"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/lib"echo "拷贝lib包"sshPut remote: remote, from: "code/${app.module}/target/lib", into: "${remote.deploymentHome}/${app.cd}"}sshCommand remote: remote, failOnError:false, command: "mkdir ${remote.deploymentHome}/${app.cd}/resources"if(isUpdateStatic == "true"){echo "清除resources/static文件"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/resources/static"echo "拷贝static文件"sshPut remote: remote, from: "code/${app.module}/target/resources/static", into: "${remote.deploymentHome}/${app.cd}/resources"}if(isUpdateMapper == "true"){echo "清除resources/mybatis文件"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/resources/mybatis"echo "拷贝mybatis文件"sshPut remote: remote, from: "code/${app.module}/target/resources/mybatis", into: "${remote.deploymentHome}/${app.cd}/resources"}if(isUpdateBin == "true"){echo "清除bin文件"sshRemove remote: remote, failOnError:false, path: "${remote.deploymentHome}/${app.cd}/bin"echo "拷贝bin文件"sshPut remote: remote, from: "code/${app.module}/target/bin", into: "${remote.deploymentHome}/${app.cd}"echo "赋予可执行权限"sshCommand remote: remote, failOnError:false, command: """cd ${remote.deploymentHome}/${app.cd}/binchmod +x startup.shchmod +x shutdown.sh"""}echo "启服"sshCommand remote: remote, command: """source /etc/profileecho "path = $PATH"cd ${remote.deploymentHome}/${app.cd}/bin./startup.sh --version ${app.version} --appName ${app.cd} --port ${app.port}"""}}

3.4 启动

在这里插入图片描述
点击后,就可以自动的编译部署了。

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

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

相关文章

针对考研的C语言学习(定制化快速掌握重点2)

1.C语言中字符与字符串的比较方法 在C语言中&#xff0c;单字符可以用进行比较也可以用 > , < ,但是字符串却不能用直接比较&#xff0c;需要用strcmp函数。 strcmp 函数的原型定义在 <string.h> 头文件中&#xff0c;其定义如下&#xff1a; int strcmp(const …

ubuntu server 常用配置

这里写目录标题 0001 虚拟机静态IP0002 vim tab 4个空格0003 设置时区0004 网络端口查看端口开放端口 0005 修噶机主机名 0001 虚拟机静态IP win网络链接&#xff0c;IP地址&#xff1a;192.168.220.1 - NAT网关&#xff1a;192.168.220.2 - ubuntu静态IP设置&#xff1a; ca…

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c; 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问&#xff1a;当客户端向服务器发送请求时&#xff0c;服务器在处理的过程中&#xff0c;浏览器…

【韩顺平Java笔记】第5章:程序控制结构

文章目录 102. 回顾上一章节103. 顺序控制103.1 顺序控制 104. 单分支使用104.1 分支控制 if-else 介绍104.2 单分支 105. 单分支流程图106. 双分支使用107. 双分支流程图108. 双分支练习题109. 多分支使用109.1 多分支的流程图 110. 多分支练习1111. 多分支练习2112. 嵌套分支…

最大正方形 Python题解

最大正方形 题目描述 在一个 n m n\times m nm 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形&#xff0c;输出边长。 输入格式 输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100)&#xff0c;接…

ubuntu 开启root

sudo passwd root#输入以下命令来给root账户设置密码 sudo passwd -u root#启用root账户 su - root#要登录root账户 root 开启远程访问&#xff1a; 小心不要改到这里了&#xff1a;sudo nano /etc/ssh/ssh_config 而是&#xff1a;/etc/ssh/sshd_config sudo nano /etc/ssh…

828华为云征文|部署去中心化网络的 AI 照片管理应用 PhotoPrism

828华为云征文&#xff5c;部署去中心化网络的 AI 照片管理应用 PhotoPrism 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 PhotoPrism3.1 PhotoPrism 介绍3.2 PhotoPrism…

【Redis】如何在 Ubuntu 上安装 Redis 5

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍如何在 Ubuntu 上安装 Redis5 一些碎碎念&#xff1a; 本来这期内容介绍如何在 Centos 安装 Redis …

基于ScriptableObject设计游戏数据表

前言 本篇文章是针对之前对于ScriptableObject概念讲解的实际应用之一&#xff0c;在游戏开发中&#xff0c;我们可以使用该类来设计编辑器时的可读写数据表或者运行时的只读数据表。本文将针对运行时的只读数据表的应用进行探索&#xff0c;并且结合自定义的本地持久化存储方式…

cheese安卓版纯本地离线文字识别插件

目的 cheese自动化平台是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。可以采用Vscode、IDEA编写&#xff0c;支持Java、Python、nodejs、GO、Rust、Lua。cheese也包含图色功能&#xff0c;识别…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

location指令

无前缀,必须以”/“开头 前缀""精准匹配。 前缀”^~“ 普通url匹配。 前缀”~“基于正则表达式的匹配&#xff0c; 区分大小写 前缀”~*“ 匹配优先级 locationlocation^~和无前缀/location ~或~* 1.无任何前缀 不加任何规则&#xff0c;默认大小写敏感&#x…

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…

【Linux操作系统】进程的创建与替换

目录 前言&#xff1a;一、进程创建1.fork();1.1 fork基本介绍1.2 fork的原理1.3 写时拷贝1.4 fork的使用场景1.5 fork调用失败的原因 2.clone() 二、进程替换(exec)1.替换原理2.替换函数3.函数解释4.函数理解 前言&#xff1a; 学习了Linux操作系统我们可以知道&#xff0c;进…

基于php摄影门户网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Oracle架构之数据库备份和RAC介绍

文章目录 1 数据库备份1.1 数据库备份分类1.1.1 逻辑备份与物理备份1.1.2 完全备份/差异备份/增量备份 1.2 Oracle 逻辑备份1.2.1 EXP/IMP1.2.1.1 EXP导出1.2.1.2 EXP关键字说明1.2.1.3 导入1.2.1.4 IMP关键字说明 1.2.2 EXPDP/IMPDP1.2.2.1 数据泵介绍1.2.2.2 数据泵的使用 1.…

【STM32单片机_(HAL库)】4-3-2【定时器TIM】测量按键按下时间1——编程实现捕获功能

测量按键按下时长思路 测量按键按下时间实验目的 使用定时器 2 通道 2 来捕获按键 &#xff08;按键接PA0&#xff09;按下时间&#xff0c;并通过串口打印。 计一个数的时间&#xff1a;1us&#xff0c;PSC71&#xff0c;ARR65535 下降沿捕获、输入通道 2 映射在 TI2 上、不分…

华为-单臂路由

1、什么是单臂路由 单臂路由&#xff08;Single-Arm Routing&#xff09;是一种网络架构和配置技术&#xff0c;它允许路由器通过一个物理接口来管理多个虚拟局域网&#xff08;VLAN&#xff09;之间的通信。 这个物理接口被配置为Trunk模式&#xff0c;以便能够传输来自不同VL…

如何从huggingface下载

我尝试了一下若干步骤&#xff0c;莫名奇妙就成功了 命令行代理 如果有使用魔法上网&#xff0c;可以使用命令行代码&#xff0c;解决所有命令行连不上外网的问题&#xff1a; #配置http git config --global http.proxy 127.0.0.1:xxxx git config --global https.proxy 127…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——15.红黑树

1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;…