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

news2024/11/17 9:29:35

前言

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

一、去官网下载

1.1 官网安装命令

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

wget -O /usr/share/keyrings/jenkins-keyring.asc \
    https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

  echo "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/null
 
 sudo apt-get update
 sudo apt-get install fontconfig
 sudo 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]
...
#执行脚本前,运行一下设置环境变量
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.SimpleDateFormat

node{

    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 = true

    def 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 code
            mvn clean
            mvn 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}/bin
            chmod +x startup.sh
            chmod +x shutdown.sh
            """
        }

        echo "启服"
        sshCommand remote: remote, command: """
        source /etc/profile
        echo "path = $PATH"
        cd ${remote.deploymentHome}/${app.cd}/bin
        ./startup.sh --version ${app.version} --appName ${app.cd} --port ${app.port}
        """
    }

}

3.4 启动

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

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

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

相关文章

论文阅读:LM-Cocktail: Resilient Tuning of Language Models via Model Merging

论文链接 代码链接 Abstract 预训练的语言模型不断进行微调,以更好地支持下游应用。然而,此操作可能会导致目标领域之外的通用任务的性能显著下降。为了克服这个问题,我们提出了LM Cocktail,它使微调后的模型在总体上保持弹性。…

解决Mac 默认设置 wps不能双面打印的问题

目录 问题描述: 问题解决: 问题描述: 使用mac电脑的时候,发现wps找不到双面打印的按钮,导致使用wps打开的所有文件都不能自动双面打印 问题解决: mac的wps也是有双面打印的选项,只是默认被关…

双指针算法【算法 18】

双指针算法 在算法设计与实现中,双指针算法是一种非常高效且常用的技术,尤其适用于处理数组和字符串相关的问题。通过维护两个指针(通常称为“快指针”和“慢指针”),双指针算法能够在对数组或字符串进行单次遍历的同时…

VSCode rust文件中的api点击无法跳转问题

如果配置了vscode的setting.json windows端的话 "settings": { "typescript.tsc.autoDetect": "off","rust-analyzer.linkedProjects": [".\\gui-btn\\Cargo.toml",".\\temp\\Cargo.toml", ],其他端类似 能不…

电脑怎么进行网页限制操作?

1、修改Hosts文件: 打开文件资源管理器,导航至C:\Windows\System32\drivers\etc\目录(注意,修改前最好备份原文件)。 找到并打开hosts文件,以管理员身份运行文本编辑器进行编辑。 在文件末尾添加一行&am…

基于Springboot投稿和稿件处理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

Java | Leetcode Java题解之第441题排列硬币

题目: 题解: class Solution {public int arrangeCoins(int n) {return (int) ((Math.sqrt((long) 8 * n 1) - 1) / 2);} }

【STM32开发环境搭建】-2-安装STM32CubeMX

目录 1 下载STM32CubeMX 2 使用STM32CubeMX 2.1 设置Embedded software Package存放路径 2.2 下载并安装STM32的Embedded software Package 结尾 1 下载STM32CubeMX 注册一个ST的账号,单击STM32CubeMX - STM32Cube初始化代码生成器 - 意法半导体STMicroelectr…

《 C++ 修炼全景指南:十三 》为什么你的代码不够快?全面掌控 unordered_set 和 unordered_map 的哈希性能飙升魔法

摘要 本文深入探讨了 C 标准库中的两大无序容器——unordered_set 和 unordered_map,从底层实现、核心操作、性能优化、实际应用等多个方面进行了全面分析。首先,文章介绍了这两种容器的基本概念,说明了它们基于哈希表实现的特点&#xff0c…

AMD ROCm™ 安装指南

AMD ROCm™ installation — ROCm Blogs 注意: 本文之前是 AMD 实验笔记博客系列的一部分。 AMD ROCm™ 是第一个面向 HPC/超大规模级 GPU 计算的开源软件开发平台。AMD ROCm™ 将 UNIX 的选择权、极简主义和模块化软件开发哲学引入 GPU 计算领域。有关更多信息,请参…

华为OD机试 - 小明的幸运数(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

modelsim仿真出现的问题

问题:仿真波形没有结果 解决 点击Optimization Options 选第二个 右键testbench,Add Wave,快速添加 如何更改字体大小 Tools Edit Preference

latex设置背景颜色

\documentclass{article} \usepackage{xcolor} % 定义颜色,将#FCF9EA转换为LaTeX的颜色定义 \definecolor{mycolor}{HTML}{FCF9EA} % 设置页面颜色 \pagecolor{mycolor} \begin{document} This is a test page with the background color set to \# FCF9E…

如何巧妙运用Shell变量:掌握脚本编程的核心技巧

目录 前言一、Shell变量——变量类型1、用户自定义变量2、环境变量用./ 启动脚本文件记得加权限哦 二、Shell变量——变量赋值和访问(一)变量定义(二)变量的使用(三)删除变量(四)添加环境变量(五)内部变量(六&#xff…

Karmada新版本发布,支持联邦应用跨集群滚动升级

摘要:本次升级支持联邦应用跨集群滚动升级,使用户版本发布流程更加灵活可控;透明同事karmadactl 新增了多项运维能力,提供独特的多集群运维体验。 本文分享自华为云社区 《Karmada v1.11 版本发布!新增应用跨集群滚动升…

cve 漏洞排查流程

1、打开CVE连接 确认漏洞jar包以及版本信息 https://gitee.com/opengauss/security/issues/IASNOA?fromproject-issue 2、通过命令导出对应jar包的依赖树 并导出到目标结果文件中 mvn dependency:tree -Dincludes:gson > gson.result.txt 3、过滤test引用…

Linux之实战命令17:nl应用实例(五十一)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

成都睿明智科技有限公司抖音电商服务靠谱吗?

在这个电商风起云涌的时代,抖音作为短视频直播的超级流量池,正深刻改变着人们的购物习惯。无数商家蜂拥而至,渴望在这片蓝海中找到属于自己的岛屿。而提及抖音电商服务,成都睿明智科技有限公司无疑是一个备受瞩目的名字。那么&…

2024年7月大众点评餐饮比较北上广深成渝

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时,大众点评的数据参考价值非常大,截至2024年7月,大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 分析研究的字段维度包括大众点评数字id、字母…

10分钟读懂,ITIL4为什么它是IT服务管理的未来?

点击进入ITIL资料库 在当今数字化时代,IT服务管理(ITSM)对于企业的重要性不言而喻。而作为ITSM领域最广泛采用的最佳实践框架,ITIL(Information Technology Infrastructure Library)一直在引领着行业的发展。2019年,AXELOS发布了ITIL 4&#…