jenkins部署手册

文章目录

  • 一、环境配置
    • 资源配置
      • 操作系统
      • 资源配置
        • 服务器
  • 二、jenkins软件部署
    • 2.1 下载软件包
    • 2.2 启动jenkins
      • 2.2.1 准备jdk环境
      • 2.2.2 准备maven环境
      • 2.2.3 编写jenkins.service
    • 2.3 配置jenkins
      • 2.3.1 修改插件源(非必要不修改)
      • 2.3.2 配置环境变量
      • 2.3.3 配置Publish over SSH
      • 2.3.4 配置邮箱
    • 2.4 创建job
      • 2.4.1 新建job
      • 2.4.2 参数化构建
      • 2.4.3 源码管理
      • 2.4.4 build steps
      • 2.4.5 构建后操作

一、环境配置

资源配置

操作系统

18.04.6 LTS (Bionic Beaver)

资源配置

服务器

CPU: 8核

内存: 16 GB

磁盘: 300 GB sda[系统盘] 100GB, 默认分区

sdc[数据盘] 200GB 挂载点 /data

备注:数据盘需支持扩展

备注:无。

二、jenkins软件部署

2.1 下载软件包

jenkins官网下载地址

https://get.jenkins.io/war-stable/2.426.2/jenkins.war

2.2 启动jenkins

2.2.1 准备jdk环境

详细安装可参考: 离线部署jdk8,jdk17, jdk21

由于最新的jenkins都是基于java17,而我们项目还是用的Java8进行编译,所以需要下载两个jdk。

下载地址:

https://adoptium.net/zh-CN/temurin/archive/?version=17

在这里插入图片描述

分别下载java17 和 java8 ,传入服务器

解压java17,java8

mkdir -p /software/java/jdk8 && mkdir -p /software/java/jdk17

tar -xvf OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz

tar -xvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.9_9.tar.gz

mv jdk8u392-b08/\* /software/java/jdk8

mv jdk-17.0.9+9/\* /software/java/jdk17

2.2.2 准备maven环境

版本:maven-3.6.3

# 解压 
tar -xvf apache-maven-3.6.3-bin.tar.gz

mv apache-maven-3.6.3 /software

# 配置环境变量

vim /etc/profile

export JAVA_HOME=/software/java/jdk8

export MAVEN_HOME=/software/apache-maven-3.6.3

export PATH=\$PATH:\$MAVEN_HOME/bin:\$JAVA_HOME/bin

source /etc/profile

备注: 最开始选用的是3.9.9最新版本,但由于项目在maven打包的时候报错,所以降版本选用了3.6.3

创建软连接

root@guoqing:\~\# ln -s /software/apache-maven-3.6.0/bin/mvn /usr/bin/mvn

root@guoqing:\~\# ln -s /software/apache-maven-3.6.0/bin/mvn /usr/local/bin/mvn

因为Jenkins 通过shell脚本调用 mvn 命令的时候,是从/usr/bin 文件夹中找命令的;所以要建立这样的软链接

2.2.3 编写jenkins.service

vim /etc/systemd/system/jenkins.service

[Unit]
Description=Jenkins
After=network.target

[Service]
ExecStart=/software/java/jdk17/bin/java -jar -DJENKINS_HOME=/data/jenkins -Xmx2g  /software/jenkins/jenkins.war -Djava.awt.headless=true --httpPort=80 
User=root
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=default.target

写入以上内容,保存

创建文件夹

mkdir -p /software/jenkins && mkdir -p /data/jenkins

对应的war包放入/software/jenkins文件夹中

systemctl daemon-reload

systemctl start jenkins

2.3 配置jenkins

由于使用root账号启动,所以可以用80端口,不需要nginx进行端口转发了。

访问 http://10.0.99.11 回车;会让你输入临时密码.

cat /data/jenkins/secrets/initialAdminPassword

安装必要插件

其中有两个插件需要额外的安装下

Git Parameter, Publish Over SSH

建议安装插件

Extended Choice Parameter Plugin(多选框)、Material Theme (好看的主题插件)

2.3.1 修改插件源(非必要不修改)

没有必要修改,如果你访问官网环境很差,可参考修改。

  1. 修改url为:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

  1. 修改default文件

把里面的连接修改下

sed -i 's/http:\/\/updates.jenkins.ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

重启jenkins使其生效

systemctl restart jenkins

2.3.2 配置环境变量

配置jdk

配置maven

注意修改maven的配置文件settings.xml。

配置使用私有nexus库;

需要先配置用户名密码

</servers>
   <server>
      <id>ccdc-dev</id>
      <username>dev-normal-01</username>
      <password>******</password>  
    </server>
  </servers>

再配置镜像源,注意id需要对应上

<mirrors>
	<mirror>
          <id>ccdc-dev</id>
          <mirrorOf>*</mirrorOf>
          <name>ccdc-私有镜像仓库</name>
          <url>http://10.0.99.187:1****/repository/maven-public/</url>
    </mirror>
 </mirrors>

上述的地址和密码均做了模糊处理,在配置时改为自己的;

2.3.3 配置Publish over SSH

将生成的公钥内容复制到对应服务器的/root/.ssh/authorized_keys文件中

image-20241030184529756

即可连接上对应的服务器;ssh免密登录。

比如10.0.99.124上已经配置了公钥。

提示连接成功

2.3.4 配置邮箱

QQ邮箱授权码:smnhssleav****

jenkins邮件提醒

2.4 创建job

先看最终效果

可做到打包指定微服务,选择分支,发往哪台服务器中;做到更加灵活的配置。

2.4.1 新建job

坑:这里没有用构建一个maven项目。我没有安装maven的插件,因为此插件在近年发布的jenkins版本中已经不支持java8 了。至少需要java11的版本,而我们项目是基于java8的。会导致mvn打包的时候一直报错。

2.4.2 参数化构建

新建字符参数

service_name

新建字符参数

新建git参数

在这里插入图片描述

新建选项参数

这个选项参数可结合下方的Send files or execute commands over SSH

做到选择部署到哪台服务器。

2.4.3 源码管理

添加凭证即可,注意URL不能写错。

2.4.4 build steps

1. 先创建shell脚本

#!/bin/bash
echo `pwd`
echo "${git_branch}当前的git分支"
if [ "$service_name" = "numen-gateway" ]; then
    /software/apache-maven-3.6.3/bin/mvn clean package -P ${mvn_profile} -pl ./numen-component/${service_name} -am -U -Dmaven.test.skip=true
else
    /software/apache-maven-3.6.3/bin/mvn clean package -P ${mvn_profile} -pl ./numen-modules/${service_name} -am -U -Dmaven.test.skip=true
fi

if (( $? ))
then
        echo "mvn package failed"
        exit 1
else
        echo "mvn package success"
        echo '$service_name build start...'
        local_path=`pwd`
        target_local="${local_path}/images/"
        mkdir -p $target_local
             
        echo 'build image start'
        _IID=$(docker images | grep "$service_name" | awk '{print $3}')
        if [ -n "$_IID" ]; then
            docker rmi "$_IID"
        fi
        if [ "$service_name" = "numen-gateway" ]; then
        	cd "${local_path}"/numen-component/"${service_name}" || exit
        else
        	cd "${local_path}"/numen-modules/"${service_name}" || exit
        fi
        docker build -t "$service_name" .
        echo "images目录为:${target_local}${service_name}.tar"
        docker save -o "${target_local}${service_name}".tar "$service_name":latest
        echo '部署完成'
        
fi

因为项目最终打包成docker镜像,所以服务器中也需要安装docker;

有关安装docker的教程可参考:

docker部署手册(离线)

2. Send files or execute commands over

  1. 配置参数与上述的选项参数关联

注意:这个插件的参数Source files 是针对工作空间来说的,并不支持绝对路径

把选项中的四台服务器均配置上去。

2.4.5 构建后操作

完全是为了节省磁盘空间.

至此部署配置完成;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程 UDP编程 Linux环境 C语言实现

UDP编程 1. 一般UDP编程 UDP传输特点&#xff1a;非面向连接、不可靠的、无序的 报式传输 支持组播和广播 UDP应用数据最大长度建议&#xff1a;MTU(以太网分组数据的最大长度)1500 - 20(IP头) - 8(UDP头) 1472Bytes 客户端&#xff1a;支持两种形式的代码编写: 1. 不定向…

【Python爬虫实战】深入理解Python异步编程:从协程基础到高效爬虫实现

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、异步 &#xff08;一&#xff09;核心概念 &#xff08;二&#xff09;…

Flutter InkWell组件去掉灰色遮罩

当InkerWell组件内部获取到焦点时&#xff0c;会展示一层灰色遮罩 将focusColor属性设置为透明即可 Flutter InkWell焦点效果源码分析 问题描述 当 InkWell 组件获得焦点时&#xff0c;会显示一层灰色遮罩效果。需要找出这个效果是由哪些组件控制的&#xff0c;以及具体的…

每天一题:洛谷P2041分裂游戏

题目描述 有一个无限大的棋盘&#xff0c;棋盘左下角有一个大小为 n 的阶梯形区域&#xff0c;其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子&#xff0c;分别放在原位置的上边一格和右边一格。&#xff08;但如果目标位置已有棋子&#xff0c…

频率限制:WAF保护网站免受恶意攻击的关键功能

频率限制&#xff08;Rate Limiting&#xff09;是一项有效的安全措施&#xff0c;用于控制每个 IP 地址的访问速率&#xff0c;以防止恶意用户利用大量请求对网站进行攻击&#xff0c;例如防止 CC 攻击等。频率限制不仅能保护网站资源&#xff0c;还能提升服务的稳定性。 下面…

植物源UDP-糖基转移酶及其分子改造-文献精读75

植物源UDP-糖基转移酶及其分子改造 摘要 糖基化能够增加化合物的结构多样性,有效改善水溶性、药理活性和生物利用度,对植物天然产物的药物开发至关重要。UDP-糖基转移酶(UGTs)能够催化糖基从活化的核苷酸糖供体转移到受体形成糖苷键,植物中天然产物的糖基化修饰主要通过UGTs实…

搜维尔科技:Xsens动作捕捉、Manus数据手套和Faceware面部捕捉技术集成,应用于元宇宙数字人制作解决方案

Xsens动作捕捉、Manus数据手套和Faceware面部捕捉技术集成&#xff0c;能够实现非常逼真且高效的数字人动作和表情捕捉&#xff01; 硬件连接与数据传输方面&#xff1a; 1.Xsens与Manus的集成&#xff1a;Xsens惯性动作捕捉系统通常可以与Manus的数据手套直接集成。Xsens主要…

基于SpringBoot的汽车票网上预订系统

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

块设备驱动的基本概念

块设备与字符设备 块设备只能以块为单位接收输入和返回输出&#xff0c;而字符设备则以字节为单位。大多数设备是字符设备&#xff0c;因为它们不需要缓冲而且不以固定块大小进行操作&#xff1b;字符设备只能被顺序读写&#xff0c;而块设备可以随机访问。 块设备对于I/O请求…

python 使用进程池并发执行 SQL 语句

这段代码使用了 Python 的 multiprocessing 模块来实现真正的并行处理&#xff0c;绕过 Python 的全局解释器锁&#xff08;GIL&#xff09;限制&#xff0c;从而在多核 CPU 上并发执行多个 SQL 语句。 from pyhive import hive import multiprocessing# 建立连接 conn hive.…

Ajax:请求 响应

Ajax&#xff1a;请求 & 响应 AjaxjQuery的Ajax接口$.get$.post$.ajax PostMan 接口测试getpost Ajax 浏览器中看到的数据&#xff0c;并不是保存在浏览器本地的&#xff0c;而是实时向服务器进行请求的。当服务器接收到请求&#xff0c;就会发回一个响应&#xff0c;此时浏…

ALIGN_ Tuning Multi-mode Token-level Prompt Alignment across Modalities

文章汇总 当前的问题 目前的工作集中于单模提示发现&#xff0c;即一种模态只有一个提示&#xff0c;这可能不足以代表一个类[17]。这个问题在多模态提示学习中更为严重&#xff0c;因为视觉和文本概念及其对齐都需要推断。此外&#xff0c;仅用全局特征来表示图像和标记是不…

Linux-计算机网络-epoll的LT,ET模式

一.epoll的LT和ET模式介绍 epol 对文件描述符有两种操作模式:LT(Level Trigger&#xff0c;电平触发)模式和 ET(EdgeTrigger&#xff0c;边沿触发)模式。LT模式是默认的工作模式。当往epol 内核事件表中注册一个文件描述符上的 EPOLLET 事件时&#xff0c;epoll将以高效的 ET …

新160个crackme - 087-d4ph1-crackme2

运行分析 需破解Name和Serial PE分析 ASM程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找到关键字符串 INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) {HICON IconA; // eaxint v5; // ediunsigned int v6; // ebxchar v7; // a…

leetcode 303.区域和检索-数组不可变

1.题目要求: 2.题目代码: class NumArray { public:vector<int> array;NumArray(vector<int>& nums) {array nums;}int sumRange(int left, int right) {int sum 0;while(left < right){sum array[left];left;}return sum;} };/*** Your NumArray obje…

【SVM手把手推导】对偶问题应用之支持向量机SVM(Hard Margin)

1. 对偶问题应用之支持向量机SVM 1.1 SVM 设给定数据集&#xff1a; { ( s i , y i ) : y i ∈ { 1 , − 1 } , i 1 , ⋯ , m } \{(\mathbf{s}^i,y^i):y^i\in\{1,-1\},i1,\cdots,m\} {(si,yi):yi∈{1,−1},i1,⋯,m}&#xff0c;我们想要找到一个决策超平面&#xff08;decis…

大数据技术的前景如何?

在当今数字化迅猛发展的时代&#xff0c;大数据技术的前景显得尤为广阔。随着数据量的激增&#xff0c;如何有效利用这些数据成为了各行各业关注的焦点。未来五年&#xff0c;大数据技术的发展趋势可以从市场规模、技术融合、行业应用和政策支持等多个方面进行深入分析。 1. 市…

【STM32】单片机ADC原理详解及应用编程

本篇文章主要详细讲述单片机的ADC原理和编程应用&#xff0c;希望我的分享对你有所帮助&#xff01; 目录 一、STM32ADC概述 1、ADC&#xff08;Analog-to-Digital Converter&#xff0c;模数转换器&#xff09; 2、STM32工作原理 二、STM32ADC编程实战 &#xff08;一&am…

推荐一款全新的视频编辑软件:CapCut剪映国际版

CapCut是一款全新的视频编辑应用程序&#xff0c;提供了各种功能和工具&#xff0c;让用户可以轻松地创建专业级别的视频。这款应用程序非常易于使用&#xff0c;功能强大&#xff0c;可供任何水平的用户使用。 CapCut包含了各种视频编辑工具&#xff0c;可以添加各种特效、滤镜…

提升用户体验优化全攻略

内容概要 用户体验&#xff08;UX&#xff09;在当今数字化时代扮演着举足轻重的角色。良好的用户体验不仅决定了用户对产品的满意度&#xff0c;还有助于提高转化率与客户忠诚度。因此&#xff0c;深入理解用户体验的重要性是每一个设计师和产品经理必须掌握的基础。在这一部…