Jenkins基础教程

ops/2024/12/28 3:24:56/

Jenkins介绍

Jenkins 是一款开源的持续集成(CI)和持续交付(CD)工具,在软件开发和自动化部署流程中发挥着关键作用。

1.背景和起源

它最初是由 Sun Microsystems 公司的一名工程师开发的 Hudson 项目,后来由于商标问题,这个项目的分支被命名为 Jenkins。随着软件开发流程的不断演变,对于自动化构建、测试和部署的需求日益增长,Jenkins 应运而生并得到了广泛的应用。

2.核心功能

持续集成(CI)

Jenkins 能够自动化软件构建过程。例如,当开发团队成员将代码提交到版本控制系统(如 Git)时,Jenkins 可以自动检测到代码的变更,并触发构建任务。它会按照预先配置的步骤,如编译代码、运行单元测试等。如果构建过程中出现错误,开发人员会立即收到通知,这样可以快速定位和解决问题,确保代码的质量。

假设一个 Java 项目,开发人员每次提交代码后,Jenkins 可以自动从代码仓库拉取最新代码,使用 Maven 或 Gradle 等构建工具进行编译,生成可执行的 JAR 文件。同时运行 JUnit 测试用例来检查代码功能是否正确。

持续交付 / 部署(CD)

除了构建,Jenkins 还支持将软件部署到不同的环境。它可以将经过测试的软件部署到测试服务器、预生产服务器,甚至是生产环境。通过自动化部署流程,减少了人工操作可能带来的错误,提高了部署的速度和可靠性。

比如,对于一个 Web 应用程序,Jenkins 可以将构建好的 WAR 文件自动部署到 Tomcat 服务器上。在部署到生产环境之前,它还可以先部署到一个模拟生产环境的测试环境中进行最后的验证。

插件系统

Jenkins 拥有丰富的插件生态系统。这些插件可以扩展 Jenkins 的功能,以满足不同用户和项目的需求。例如,有用于与各种版本控制系统集成的插件(如 Git、Subversion 等),用于代码质量检查的插件(如 SonarQube),以及用于自动化测试的插件(如 Selenium)等。

如果要对代码进行静态代码分析,就可以安装和配置 SonarQube 插件。这个插件可以在构建过程中对代码进行扫描,检查代码是否符合编码规范、是否存在潜在的安全漏洞等,并生成详细的报告。

3.工作原理

主从架构

Jenkins 可以采用主从架构。主节点负责调度和管理构建任务,从节点则执行实际的构建工作。这种架构在处理大量构建任务或者构建任务比较复杂、资源消耗大的情况下非常有用。例如,一个大型的软件开发项目,可能有多个不同的模块需要构建,主节点可以将这些构建任务分配到多个从节点上同时进行,提高构建效率。

构建触发机制

构建任务可以通过多种方式触发。除了前面提到的代码提交触发外,还可以通过定时触发(例如每天晚上自动构建项目,进行全量测试)、远程触发(通过 API 调用,在其他系统需要的时候触发构建)等方式。

假设一个项目需要每天晚上对当天开发的所有功能进行一次集成测试,就可以在 Jenkins 中设置定时任务,在指定的时间触发构建,运行所有的测试用例。

4.使用场景

软件开发项目

在各种规模的软件开发团队中,Jenkins 可以帮助实现高效的开发流程。无论是小型的创业公司开发移动应用,还是大型企业开发复杂的企业级软件,都可以利用 Jenkins 进行持续集成和交付。

DevOps 实践

它是 DevOps 文化的重要工具。通过自动化软件的构建、测试和部署流程,促进开发团队和运维团队之间的协作,打破传统的开发和运维之间的壁垒。

Jenkins安装和配置

安装:

Jenkins基于java环境开发的,所以需要配置java环境

直接使用wget工具下载jdk的rpm包,然后使用yum命令安装

wget https://download.oracle.com/java/17/archive/jdk-17.0.6_linux-x64_bin.rpm
yum install -y jdk-17.0.6_linux-x64_bin.rpm

使用命令查看当前jdk的版本

java -version

版本如图所示

接下来进行yum仓库配置

使用wget工具下载yum仓库
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
导入密钥
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
接下来安装Jenkins
yum install -y Jenkins

注:导入密钥时可能会出现报错,可能是CA证书版本过低,更新CA证书即可

yum install -y ca-certificates

此时Jenkins安装完成,使用命令启动Jenkins

systemctl start jenkins

查看此时Jenkins的状态

可以看到启动成功。

注:若是启动失败,查看是否是jdk版本过低。

此时关闭防火墙,然后再浏览器输入: 当前服务器ip:8080  即可打开Jenkins

配置:

打开浏览器,首先看到如图所示

根据提示,再服务器上查看密码

 cat /var/lib/jenkins/secrets/initialAdminPassword

将查询到的密码输入进去,点击右下角的继续

点击安装推荐的插件即可

然后就会自动进行插件的安装,过程较慢,需要耐心等待

部署完成就是以下的界面

此处全部自定义,完成后点击右下角保存并完成

点击保存并完成

如图所示就是配置完成的界面。

Jenkins远程部署

安装插件:

首先确保Publish Over SSH插件和Git plugin插件存在,可以按照如下操作寻找插件

首先点开Manage Jenkins

找到插件

在此处搜索

安装好插件重启Jenkins服务,再次登录即可

测试连通:

准备另外一台机器用作测试

点击此处的系统

将页面翻到最下方,可以看到如下

此处进行配置

配置成如图所示

名字可以自定义

主机名就是被远程部署的机器

远程目录就是需要部署的目录

点击右下角的测试配置,查看是否可以连通

这里显示成功,代表着可以连通

案例部署:

点击此处的“新建Item”

选择自由项目

在此处选择git,git的内容用作示范

https://gitee.com/g1395310898/jenkins_test

git的分支为master

在构建步骤中选择“通过SSH发送文件或执行命令”

配置如图所示

名字的地方就是测试连通时定义的远程服务器

源文件“ **/** ”表示全部代码都要进行发送

远程目录表示把代码发送到远程机器的位置

其余设置默认即可

设置完成后即可保存退出

点击“ Build Now ”对项目进行运行操作

可以看到运行成功

在远程服务器上查看是否部署成功

可以看到部署成功。

Jenkins邮件配置

安装插件:

确保“Email Extension Plugin”插件存在,可以去插件内查看是否已经安装,如下

配置邮箱:

此处使用网易邮箱进行演示,可以自行注册

点开如图所示  POP3/SMTP/IMAP

此处默认关闭,打开服务,获取授权码

获取之后打开Jenkins,找到如下配置

由于此处是网易邮箱,所以设置成如下

用户名填写自己的网易邮箱

密码则是授权码

测试是否可以使用,点击测试

可以看到邮件发送成功

此处用到远程部署的案例,再次对上面的案例进行配置

在构建后操作中添加“ 电子邮件通知 ”

保存

现在运行案例

这种邮件发送方式只能收到部署失败的邮件,所以将我将git的分支进行了修改,此处发送的邮件就是报错的邮件。

若是想要无论成功还是失败都发送邮件,那么上面安装的插件就起到了作用

现在将配置的邮件通知内容全部删掉

找到“ 扩展电子邮件通知 ”

进行如下设置

由于最新的Jenkins版本不能在这直接输入用户和密码,所以需要设置凭证

找到凭证

点击system

在此处添加凭证“ Add credentials ”

对以下内容进行设置

用户名就是邮箱的地址

密码就是邮箱的授权码

触发器进行如下设置

再次对案例进行配置

点击“ 可编辑的电子邮件通知 ”

一切进行默认配置即可

此时运行案例,在邮箱中查看

可以看到成功的邮件发了过来。

Jenkins管理员密码修改

进入如下目录

cd /var/lib/jenkins/users

可以看到如下

进入第一个目录,这是管理员目录,再其中找到config.xml文件,进入编辑,找到如下

<passwordHash>#jbcrypt:$2a$10$cINXWkeT2FFPlecnk5rsteLonjc44PR7jWdC6oIRsqqBpc/SuDZfq</passwordHash>

找到该行,Jenkins 的密码是使用 Java 加密工具 jBCrypt 生成的,所以可以随便生成一个密码来替换掉之前的密码,例如使用加密后的 123456 来替换,123456 加密后为:

$2a$10$SRqhubr8eaDYxjgTcNjlOeJQJBpIVEYaJmMK2v5dgTqYpD09hMaAi (生成的加密字符串并不是唯一的,但是都可用)

此时就可用123456这个密码登录Jenkins。

也可手动设置其他密码,可自行编辑。

Jenkins部署java服务

下载jdk

远程机器上下载:

由于部署的是java服务,所以需要再远程机器上面安装java环境,使用21版本的jdk

 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

下载之后解压至/usr/local/目录中

tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local

解压之后配置环境变量

再/etc/profile文件的最后一行添加如下内容

export JAVA_HOME=/usr/local/jdk-21.0.5
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

使环境变量立刻生效

source /etc/profile

查看jdk版本,看看是否配置完成

在本地服务器上下载jdk

此处也使用21版本

 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz

解压

tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local

此处不需要配置环境变量

进入Jenkins网页,找到工具

配置jdk如下

路径填写解压到的目录

远程机下载tomcat

下载tomcat

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.91/bin/apache-tomcat-9.0.91.tar.gz

解压至/usr/local目录下

tar -zxvf apache-tomcat-9.0.98.tar.gz -C /usr/local

将文件名修改为tomcat

mv apache-tomcat-9.0.98 tomcat

启动tomcat

进入bin目录

cd /usr/local/tomcat/bin
./startup.sh

关闭防火墙打开网页,网页地址为

Ip地址/8080

如图表示安装完成

点击manager webapp,出现如下界面

进入该服务器的如下目录进行修改

在context.xml文件中添加如下内容

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />

进入如下目录进行配置

在tomcat-users.xml文件中的最后添加如下内容

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-script"/>
<role rolename="manager-status"/>
<user username="admin" password="123456" roles="admin-gui,manager-gui,manager-jmx, manager-script,manager-status"/>

此时就可以在网页中进行登录,账号是admin,密码是123456

登录之后显示如下

本地服务器在线Maven

下载Maven

Wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.8/binaries/apache-maven-3.9.8-bin.tar.gz

解压至/usr/local目录中

 tar -zxvf apache-maven-3.9.8-bin.tar.gz -C /usr/local

将文件名修改为maven398

mv apache-maven-3.9.8 maven398

进入Jenkins网页,找到工具,对maven进行配置

此时配置完成。

获取gitee仓库

进入gitee官网注册一个账号,发布一个仓库,在本地服务器中创建一个test目录,将其作为远程仓库

在本地服务器下载zrlog

 wget https://codeload.github.com/94fzb/zrlog/zip/master

解压

unzip master 

将解压的内容全部移动至test目录中

mv zrlog-master/* test/

将文件内容上传至gitee仓库

git push -u origin master

在gitee上面查看是否上传成功

可以看到上传成功。

部署项目

安装插件:

打开Jenkins,确保Maven Integration(用来创建一个maven的项目)和Deploy to container(用来将war包,发布到远程去)插件存在

不存在则进行安装

创建maven项目:

配置git仓库

使用maven编译源码生成的包,pom.xml文件需要自己仔细寻找

clean install –D maven.test.skip=true 表示在编译之前先清理,跳过测试

邮件插件可自行选择

验证:

运行项目,如下表示运行成功


http://www.ppmy.cn/ops/145557.html

相关文章

电商数据的安全与隐私保护:API接口的角色

在电子商务领域&#xff0c;数据安全与隐私保护是企业运营和消费者信任的核心。随着电商平台的日益复杂化和互联网技术的快速发展&#xff0c;API&#xff08;应用程序接口&#xff09;作为系统间通信的桥梁&#xff0c;在数据安全与隐私保护中扮演着至关重要的角色。本文将从A…

IP属地和所在地不一致什么意思?怎么换成另外一个地方的

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。然而&#xff0c;有时我们会发现&#xff0c;社交媒体或网络平台上显示的IP属地与用户的实际所在地并不一致。这种不一致现象引发了诸…

乐乐音乐Flutter版

简介 乐乐音乐Flutter版主要是基于Flutter Desktop框架开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词、trc歌词、zrce歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 编译环境 Flutter:ideaIU-2024.1.4 参考地址 多…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手&#xff0c;比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力&#xff0c;那么最核心的就是基于LLM进行意图识别分发能力&#xff0c;意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

prim-acwing

题目&#xff1a;Prim算法求最小生成树 858. Prim算法求最小生成树 - AcWing题库 代码&#xff1a;&#xff08;邻接矩阵dt数组存最短路写法&#xff09; 感觉跟最短路径是一样的&#xff0c;只是多了个最小生成树概念 dt 存的其实是&#xff0c; 编号 权值&#xff0c; 例…

“电找车“ | 助力移动充电机器人快速落地

近些年&#xff0c;随着新能源汽车保有量的提升&#xff0c;给车充电经常成为困扰车主的一大问题。 据中国电动汽车充电基础设施促进联盟发布的数据显示&#xff0c;2024年上半年&#xff0c;充电基础设施增量为164.7万台&#xff0c;同比上升14.2%&#xff1b;桩车增量比为1:3…

使用 Docker 在 Ubuntu 下部署 Cloudflared Tunnel 服务器

在现代互联网中&#xff0c;安全和隐私是至关重要的。Cloudflared Tunnel 是 Cloudflare 提供的一种安全隧道解决方案&#xff0c;可以帮助你安全地将本地服务暴露到互联网&#xff0c;而无需暴露你的服务器 IP 地址。通过 Docker 部署 Cloudflared Tunnel&#xff0c;不仅简化…

深度学习camp-第J5周:DenseNet+SE-Net实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f4cc; 本周任务&#xff08;自己改进一下&#xff09;&#xff1a; ●1. 在DenseNet系列算法中插入SE-Net通道注意力机制&#xff0c;并完成乳腺癌数据…