一、CI/CD 的概念
CI/CD一般包含三个概念:
持续集成(Continuous Integration ,CI)
持续交付(Continuous Delivery)
持续部署(Continuous Deploy)
CI/CD 是现代软件开发的重要流程,旨在提升软件开发与交付的效率、可靠性和质量
1.1 持续集成 (CI)
在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后,所谓集成,可以理解为团队里的大家完成自己负责的模块后,将各个子模块集成为一个可以完成整体功能的完整模块。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。
为了实现持续集成,我们每个人都需要做 单元测试 (Unit Test),以确保各个子模块的正常工作
关键点
代码合并到主分支时触发构建
自动化运行单元测试和集成测试
提供反馈给开发者
典型工具:Jenkins、GitLab CI/CD、Travis CI、CircleCI
1.2 持续交付
持续交付是持续集成的延伸,将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。我们把代码部署到测试环境,预发布环境等等类生产环境成为交付。
关键点:
部署到预生产环境后进行验证
保持一致的部署流程
典型工具:Spinnaker、ArgoCD、FluxCD
1.3 持续部署
如果真的想获得持续交付的好处,应该尽早部署到生产环境,以确保可以小批次发布,在发生问题时可以轻松排除故障。于是有了持续部署。
我们通常将这个在不同环境发布和测试的过程叫做部署流水线
持续部署是在持续交付的基础上,把部署到生产环境的过程自动化
1.4 DevOps
DevOps 是一种文化和方法论,旨在通过 开发(Development)、测试(QA) 与 运维(Operations) 团队的协作,提升软件开发、交付和运维的效率。它不仅关注技术工具,也关注团队协作和流程优化
虽然名字里没有体现,但是 DevOps 仍包括测试
DevOps 的好处:
提升发布速度:更频繁地交付高质量的软件
增强稳定性:通过自动化测试和监控减少生产问题
更高的协作效率:开发与运维团队共同承担责任
快速响应市场需求:支持小步快跑式的开发模式
CI/CD 与 DevOps 的关系
CI/CD 是 DevOps 实现中的关键实践之一。DevOps 更加关注文化、流程和工具的整合,而 CI/CD 则是 通过自动化实现开发与运维目标的重要手段。两者结合能够显著提升软件开发与交付的效率和质量。
CI/CD 更关注的是整个开发,测试,部署的自动化的过程,当我们在本地单元测试通过后,我们提交到 git
上,触发相应的 webhook 或者类似的东西进行代码的构建,并打包部署到相应的机器上,自动化的完成这整
个过程
而 DevOps 更关注的是打通 用户、PMO、需求、设计、开发(Dev)、测试、运维(Ops) 等各上下游部门或不同
角色;打通业务、架构、代码、测试、部署、监控、安全、性能等各领域工具链;尤其是打通开发与运维之间
的 gap,因为两者实际上存在着很多的冲突。DevOps 是基于 CI/CD 的,自动化的流程是基础,DevOps 是
一个项目由 idea 到实际稳定运行的产品的一个最佳实践
DevOps 是 CI/CD 思想的延伸,CI/CD 是 DevOps 的基础核心,如果没有 CI/CD 自动化的工具和流程,DevOps 是没有意义的
二、安装配置Jenkins
|---------|-----------------|
| 服务器 | IP |
| Jenkins | 192.168.232.180 |
| Java | 192.168.232.181 |
外加一个Gitee.com 网站账号(仓库)
实验要用到的三个包,请自行下载好并传入虚拟机中
jdk21版本 (两台虚拟机都要传)
https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
maven-3.9.9 (Jenkins主机)
https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
tomcat-9.0.98 (Java主机)
https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/src/apache-tomcat-9.0.98-src.tar.gz
2.1 安装Jenkins
配置环境 和 Jenkins 官方的 yum 源之后进行安装
关闭防火墙
bash
[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
安装 EPEL 源
bash
yum install -y epel-release
安装 wget
bash
yum -y install wget
配置 Jenkins 官方 yum 源
bash
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
bash
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
安装所需要的环境
21.0.5版本包链接(先进行下载,将包传入虚拟机中)
https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
bash
[root@jenkins ~]# ls
anaconda-ks.cfg jdk-21_linux-x64_bin.rpm
![](https://i-blog.csdnimg.cn/direct/cdea5411752446a6a8d591aac710adc1.png)
安装jdk21版本(不要下载过低的版本最好和我一样,因为到最后一步版本太低会做不出来)
bash
yum install -y (你的包名)
yum install fontconfig daemonize -y
查看Java版本,是否被正确安装
bash
[root@jenkins ~]# java -version
java version "21.0.5" 2024-10-15 LTS
Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
安装Jenkins
bash
yum install jenkins -y
![](https://i-blog.csdnimg.cn/direct/7ab58c514a954e5ea7375391b18f85cf.png)
如果出现这种情况,那么就去修改你的Jenkins的yum源文件,将原来的1改为0
bash
[root@localhost ~]# vi /etc/yum.repos.d/jenkins.repo
[root@localhost ~]# cat /etc/yum.repos.d/jenkins.repo
[jenkins]
name=Jenkins-stable
baseurl=http://pkg.jenkins.io/redhat-stable
gpgcheck=0
最后启动Jenkins
bash
systemctl start jenkins
查看 Jenkins 是否启动(8080端口是否监听)
bash
yum -y install net-tools
netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1049/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1207/master
tcp6 0 0 :::8080 :::* LISTEN 10869/java
tcp6 0 0 :::22 :::* LISTEN 1049/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1207/master
然后访问:http://192.168.232.180:8080 来访问Jenkins
![](https://i-blog.csdnimg.cn/direct/e3888d33070847c7b5282eef22a22da0.png)
2.2 配置Jenkins
登陆进去后,先查看密码并登录
bash
cat /var/lib/jenkins/secrets/initialAdminPassword
ac3a95ba18b24f32b3868c3ec10ae66d
把密码复制进去后,右下角登录
进去后稍微等一小会,会出现以下界面
![](https://i-blog.csdnimg.cn/direct/98e5274843004b9d89074bb84deb554e.png)
这里我们选择左面的"安装推荐的插件"
![](https://i-blog.csdnimg.cn/direct/4792b7513b824d2cbd2f38ba87de19b8.png)
等待一会,让他全部安装完毕
安装完成后,会出现以下界面。 设置完成后,点击右下方"保存并完成"
![](https://i-blog.csdnimg.cn/direct/5862bc277e3649ca8a1379489f10501b.png)
下一张图片也是点击保存并完成即可
三、项目任务
3.1 Jenkins发布php代码
任务描述:
(1)了解如何安装插件。
(2)了解如何配置Publish Over SSH、添加公钥、增加SSH Server
(3)了解构建一个新的任务的流程。
任务实施:
1.安装插件
先进入"系统管理",再进入"管理插件",在"已安装"中检查是否有"Git plugin"和"Publish Over SSH"两个插件,如果没有则需要安装,到"可选插件"中搜索并安装。
![](https://i-blog.csdnimg.cn/direct/837d4ed3fbe54985a511352c92509c28.png)
![](https://i-blog.csdnimg.cn/direct/9802980badd4428ea065c3b0d5f05486.png)
![](https://i-blog.csdnimg.cn/direct/adc7759c7eb74a47bd4b47bc46f29638.png)
![](https://i-blog.csdnimg.cn/direct/1b650972a4414849883e266cc8f5a9a9.png)
设置安装后重启
![](https://i-blog.csdnimg.cn/direct/36a7ddbf2f59486faed0911fc8a2b4ca.png)
插件完成后,点击 "返回首页"回到服务器中重启 jenkins后,登录。
![](https://i-blog.csdnimg.cn/direct/d1a9eea8473044029751ba6f756ea239.png)
在本地机器上重启Jenkins服务
bash
[root@jenkins ~]# systemctl restart jenkins
2.配置Publish Over SSH
首先需要在服务器上/.ssh目录下生成一对密钥,命令如下:
bash
ssh-keygen -t rsa
后面按回车就行
![](https://i-blog.csdnimg.cn/direct/83248715049a41cea320c433c53c0bbf.png)
密钥生成成功后,登录Jenkins,点击"系统管理"然后点击"系统设置",下拉找到"Publish Over SSH"将刚才生成的服务器的私钥填入 "Publish over SSH" 中的"key",如下图:
![](https://i-blog.csdnimg.cn/direct/88c09d9ae80240d6bb2ec10ce7e77549.png)
查看私钥
bash
[root@jenkins ~]# cat ~/.ssh/id_rsa
将私钥内容复制进去
![](https://i-blog.csdnimg.cn/direct/7bb6e004e1e84e078a27ebea230a1fd8.png)
3.增加SSH Server
"Publish over SSH"配置完成后,为了实现代码的成功发布,我们需要先查看服务器的公钥是否存在,命令如下:
bash
cat .ssh/id_rsa.pub
然后将复制的服务器公钥,添加到需要添加"SSH Servers"的远程机器Java的.ssh/authorized_keys目录下,若要增加服务器的"SSH Servers",则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:
使用 ssh-copy-id 命令(推荐)
bash
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.232.180
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.232.181
这个命令会自动将你的公钥添加到远程主机的 ~/.ssh/authorized_keys 文件中。
在服务器上尝试登录远程机器,如下图所示:
![](https://i-blog.csdnimg.cn/direct/c719ec79155c4fb9aa68758648b5dfad.png)
登录测试:
![](https://i-blog.csdnimg.cn/direct/76e89d6d2e8e4840b9b53f7eeecf2432.png)
尝试登陆成功后,登录jenkins,进入"Manage Jenkins",点击"Configure System",下滑找到"SSH Servers",填写所需要连接两台机器的各项设置,然后点击"Test Configuration",显示"success",即成功。如下图所示:
![](https://i-blog.csdnimg.cn/direct/1fa60e4a05084ed69cbb43e7891f9dfb.png)
![](https://i-blog.csdnimg.cn/direct/ddadf629c45f4d2aabe2ec58e07ad574.png)
4.构建新的任务
点击新建ltem,如下图:
![](https://i-blog.csdnimg.cn/direct/0073b2f584eb4798b613a828512d33fd.png)
输入任务名称,并选择构建软件项目的风格,应实验要求这里选择自由风格,如下图:
![](https://i-blog.csdnimg.cn/direct/ce617232066545b98bbd078908a0281d.png)
添加描述
![](https://i-blog.csdnimg.cn/direct/ba89554cfa5c480996e3cc8915577aa3.png)
配置"源码管理",选择管理源码的方式(这里选择git),将代码仓库的地址填入"Repositories URL"中,若代码仓库是私有仓库,还需要点击"添加"来添加凭证,其他保持默认即可,如下图:
![](https://i-blog.csdnimg.cn/direct/61a081305cb84a7eb93726691d565152.png)
这里出现报错是因为我们还没有从gitee仓库里连接到Jenkins主机,所以我们先进行连接
首先我们先打开gitee网站进入设置,如下图:
![](https://i-blog.csdnimg.cn/direct/25eed32eebdc4b55b5dbe2157c4942f3.png)
进入之后将你的公钥复制在 SSH公钥的位置中,如下图:
在你的Jenkins主机上查询公钥
bash
cat ~/.ssh/id_rsa.pub
![](https://i-blog.csdnimg.cn/direct/31adb839b85540bcb767252733a1b64a.png)
![](https://i-blog.csdnimg.cn/direct/4365a2fef3284657897cecf20f219989.png)
![](https://i-blog.csdnimg.cn/direct/ba739a6f1fe14e429efa32869ee834af.png)
我们进入gitee网站,新建一个仓库
![](https://i-blog.csdnimg.cn/direct/d25e639859f14603845185b17761bc06.png)
这里我们先下载git
bash
yum -y install git
示例,添加gitee仓库
bash
[root@jenkins ~]# git config --global user.name "lifeng200577"
[root@jenkins ~]# git config --global user.email "15205053+lifeng200577@user.noreply.gitee.com"
[root@jenkins ~]# mkdir jenkins-05
[root@jenkins ~]# cd jenkins-05/
[root@jenkins jenkins-05]# git init
初始化空的 Git 版本库于 /root/jenkins-05/.git/
[root@jenkins jenkins-05]# git add README.md
[root@jenkins jenkins-05]# git commit -m "first commit"
[master(根提交) 4e0de82] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
[root@jenkins jenkins-05]# git remote add origin https://gitee.com/lifeng200577/jenkins-05.git
[root@jenkins jenkins-05]# git push -u origin "master"
Username for 'https://gitee.com': lifeng200577
Password for 'https://lifeng200577@gitee.com':
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 8641e3be
To https://gitee.com/lifeng200577/jenkins-05.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
![](https://i-blog.csdnimg.cn/direct/f4410118e922411fbc2dc1832cbe3ac9.png)
![](https://i-blog.csdnimg.cn/direct/af7c40b16e624330a06b1d30fbd767ae.png)
刷新一下Jenkins网站,重新登陆,将刚才复制的gitee仓库地址再次填进去,点击空白处,发现没有报错,代表成功。
![](https://i-blog.csdnimg.cn/direct/cb2ffce71ee14ebbb193158c58da98a2.png)
配置"构建触发器""构建环境",应实验要求此处保持默认即可,如下图:
![](https://i-blog.csdnimg.cn/direct/7fc6c55e30c94e55b3f2efca1974a735.png)
配置"构建",此处用到了我们之前安装的 "publish over ssh" 插件,首先增加名为"Send files or exeute commands over SSH"的构建步骤,如下图:
![](https://i-blog.csdnimg.cn/direct/c2d467d3e4574722a63c0a4b82c9ee51.png)
然后在"Name"下选择机器名称(此处SSH Server个数由第3步中添加的数量决定);"Source files"表示要发布那些代码,在其下填写"**/**"(表示全部);
"Remote directory"表示把代码发送到远程机器的位置,填写"/tmp/Jenkins_test"(此处可自定义);"Exec command"下填写想要执行的命令,此处自定义可以为空,如下图:
![](https://i-blog.csdnimg.cn/direct/1a5a0032fe424743a2212a020515d385.png)
![](https://i-blog.csdnimg.cn/direct/6fb31feee2fc464aa3753c4a32d2778e.png)
5.将代码发送到对方机器
首先进入任务,然后点击"立即构建",查看"控制台输出",最后登录各机器查看代码发布是否成功,如下图:
![](https://i-blog.csdnimg.cn/direct/0e20388f87de481c9b26cd8673b96a42.png)
我们返回到两个机器上查看是否真的发布到里面了
Jenkins主机
bash
[root@jenkins ~]# cd /tmp/Jenkins_test/
[root@jenkins Jenkins_test]# ls -al
总用量 4
drwxr-xr-x. 2 root root 23 12月 19 20:13 .
drwxrwxrwt. 12 root root 4096 12月 19 20:13 ..
-rw-r--r--. 1 root root 0 12月 19 20:13 README.md
![](https://i-blog.csdnimg.cn/direct/5f3ccd532946412ab707c7ebb4d3fd09.png)
Java被控机器
bash
[root@java ~]# cd /tmp/Java_test/
[root@java Java_test]# ls -al
总用量 0
drwxr-xr-x. 2 root root 23 12月 19 20:13 .
drwxrwxrwt. 10 root root 223 12月 19 20:13 ..
-rw-r--r--. 1 root root 0 12月 19 20:13 README.md
![](https://i-blog.csdnimg.cn/direct/0cf52dd6d91744a092bceffb9b46b3db.png)
测试成功
3.2Jenkins邮件配置
任务描述
配置"邮件通知",对邮件进行配置,这样当项目构建失败时,我们能第一时间收到通知。
项目实施
首先我们需要先配置一下"SMTP服务器",后面有需要
我们先登陆qq邮箱,
网址:登录QQ邮箱
用微信扫描二维码,之后发短信验证一下就OK,生成的授权码复制一下
xunjeznmdrmtchcf
如果忘记复制也没有关系
![](https://i-blog.csdnimg.cn/direct/d8fda230b44e4e35b3984a4a135c84e5.png)
首先进入"Manage Jenkins",然后进入"Configure System",填写"Jenkins location", 设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致,如下图:
![](https://i-blog.csdnimg.cn/direct/0ed5303bd6f84f5892262f02c1bd6213.png)
![](https://i-blog.csdnimg.cn/direct/858204c791b746e9928dbd5e9edc4ce0.png)
找到"邮件通知","SMTP服务器"中填写"smtp.163.com",接着勾选"使用SMTP认证",填写所使用邮箱的用户名及密码,"SMTP端口"使用25端口,接着勾选"通过发送测试邮件测试配置",向其中填写用于发送测试邮件的邮箱地址后,点击"Test configuration"进行测试,发送成功后,保存。如下图:
![](https://i-blog.csdnimg.cn/direct/9aa74d6e086741c0b0dede27da286d9e.png)
对于QQ邮箱,通常情况下,SMTP服务器地址为 smtp.qq.com,并且需要使用465端口(用于SSL/TLS加密连接),或者587端口(用于STARTTLS加密)。如果你使用的不是这两个端口之一,请更改为其中之一。我这里选择的是SSH协议。
"使用SMTP认证"下的用户名中所填邮箱地址,要与"系统管理员邮箱地址"相同,否则会发送错误。
![](https://i-blog.csdnimg.cn/direct/d7ef991045da4b7a83c47630ab90e2eb.png)
完成后点击应用,然后保存
完成以上邮件配置后,我们还需要进入已经构建过的job里去配置接收邮件的地址。在已经构建过的项目test1中,点击"配置",如下图:
![](https://i-blog.csdnimg.cn/direct/06fcfd36165347b3b425c229a1fb40f8.png)
然后在"增加构建后操作步骤"中,选择"E-mail Notification",最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",保存,如下图:
![](https://i-blog.csdnimg.cn/direct/a1c880195e9049f9aa74775b602d056c.png)
最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",应用保存,如下图:
![](https://i-blog.csdnimg.cn/direct/223e81befe054c3d942e596fc73f876f.png)
验证一下:
![](https://i-blog.csdnimg.cn/direct/b328141c1046482585735c8c3345b93a.png)
![](https://i-blog.csdnimg.cn/direct/39334d8dbbda4a10a0dd36dc73d0e956.png)
验证完成
3.3 插件Emile-ext
任务描述
安装并配置插件"Email Extension Plugin"
知识学习
插件"Email Extension Plugin"可以实现无论构建成功或失败,都会发送邮件通知构建结果。
任务实施
- 安装插件
进入"Manage Jenkins",然后进入 "Manage Plugins",找到并安装插件"Email Extension Plugin",插件安装成功后,重启jenkins。
![](https://i-blog.csdnimg.cn/direct/d1a8115193484fedbf96fc4186a79c99.png)
安装完成后,重启Jenkins
![](https://i-blog.csdnimg.cn/direct/7820e1b1a79d41e0a184d25727b4c7df.png)
2.配置Extended E-mail Notification
我们要使用 Extended E-mail Notification(email-ext) 去代替 "邮件通知",所以我们需要先把"邮件通知"里设置的内容删掉,如下图:
![](https://i-blog.csdnimg.cn/direct/67e4fa5d10ae4ba9ba2d75b7513111f9.png)
将里面的东西全部删掉,点击应用
删除邮件通知的配置后,配置Extended E-mail Notification,"SMTP server"中填入"smtp.qq.com";"SMTP Port"中填入端口号为"25";"SMTP Username"和"SMTP Password"中分别填入邮箱用户名与密码。如下图:
![](https://i-blog.csdnimg.cn/direct/c5aa218521b647c39f22255aa5406743.png)
![](https://i-blog.csdnimg.cn/direct/1fb337cff24d446795222698c3d0a68b.png)
设置完成后点击添加
然后下滑找到"Default Tiggers",勾选"Always",其他保持默认,保存。如下图:
![](https://i-blog.csdnimg.cn/direct/9860846eb6074557b9c61f30aa46bcfe.png)
3.配置对应任务
进入任务2.1所创建的项目test1,下拉找到"构建后操作",然后点击"增加构建后操作步骤",选择"Editable Email Notification",其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔。如下图:
![](https://i-blog.csdnimg.cn/direct/1304c23045c74309b02ab2e4068a8034.png)
![](https://i-blog.csdnimg.cn/direct/639214fb082f49bbb12494eaafdf4807.png)
如下图,点击右下角的"Advanced settings",找到"Triggers"(触发器,设置在什么情况下发送邮件),然后点击下方的"Add Trigger",增加发邮件的条件,保存。如下图:
![](https://i-blog.csdnimg.cn/direct/f4ef6e1af3374fb78662fbbdb02fe64b.png)
4.发送邮件测试
首先点击"立即构建",然后查看"控制器输出",如下图所示,可以看到发邮件的动作,最后收到邮件即为成功。
![](https://i-blog.csdnimg.cn/direct/68d4fb9e027c4b3ca90c5267ff671e33.png)
查看输出台
![](https://i-blog.csdnimg.cn/direct/2c0442f98e0c4f3a9280471051a651a0.png)
3.4 Jenkins破解管理员密码
任务描述:
(1)学会在服务端破解管理员密码
(2)可以手动设置随机字符串
任务实施:
- 破解管理员密码
bash
[root@jenkins ~]# cd /var/lib/jenkins/users/
[root@jenkins users]# ls
lifeng0577_1251339403352343384 users.xml
[root@jenkins users]# cd lifeng0577_1251339403352343384/
[root@jenkins lifeng0577_1251339403352343384]# ls
config.xml
[root@jenkins lifeng0577_1251339403352343384]# vi config.xml
搜索定位到 <passwordHash>那一行,修改为
<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash>
[root@jenkins lifeng0577_1251339403352343384]# systemctl restart jenkins
![](https://i-blog.csdnimg.cn/direct/7daf49ff2726428aac9f1387c8583974.png)
- 手动设置随机字符串
若不想使用上述的密码,我们也可以自己定义一个随机字符串,进入jenkins界面,点击右上角admin,点击设置,下拉找到"密码",自己定义一个随机字符串,将自己定义的随机字符串保存下来,位置自由,若以后忘记了密码,可在 /var/lib/jenkins/users/admin 文件中,将字符串修改成自己定义的字符串,这样密码就修改成功了
3.5 Jenkins部署Java项目
任务描述
本任务是完整的创建一个Java项目
任务实施
Git简易的命令行入门教程**(这里只是整理一下知识点,后续有实操)**
Git全局设置:
bash
git config --global user.name "lifeng200577"
git config --global user.email "15205053+lifeng200577@user.noreply.gitee.com"
创建git仓库
仓库名随便起的
bash
mkdir 2132123132
cd 2132123132
git init
touch README.md
git add README.md
git commit -m "first commit"git remote add origin https://gitee.com/lifeng200577/2132123132.git
git push -u origin "master"
已有仓库?
bash
cd existing_git_repo
git remote add origin https://gitee.com/lifeng200577/2132123132.git
git push -u origin "master"
已有仓库,如何更新?
步骤 1:初始化或进入现有仓库
如果你还没有在虚拟机上初始化 Git 仓库,请先这样做:
bash
cd /path/to/your/project
git init
如果项目已经是 Git 仓库,则直接进入该项目目录:
bash
cd /path/to/your/existing/repo
步骤 2:添加远程仓库(如果尚未添加)
如果你还没有设置远程仓库,请使用 git remote add 命令来添加它:
bash
git remote add origin git@gitee.com:username/repository.git
或者对于 HTTPS 方式:
bash
git remote add origin https://gitee.com/username/repository.git
步骤 3:拉取最新的远程分支
确保你的本地仓库是最新的,以避免冲突和不必要的复杂性:
bash
git pull origin master
这一步可能会要求你解决任何合并冲突。按照提示进行操作,直到所有的冲突都得到解决。
步骤 4:添加、提交本地更改
接下来,你需要将你想同步到 Gitee 的文件添加到暂存区并提交它们:
bash
git add .
git commit -m "同步虚拟机上的最新文件"
这里 -m 后面跟着的是提交信息,描述了此次提交的内容。
步骤 5:推送更改到 Gitee
最后,推送本地提交到 Gitee 远程仓库:
bash
git push -u origin master
-u 参数用于设置上游分支,这意味着以后你可以只用 git push 和 git pull 来简化命令。
接下来,让我们进行实操
1、连接代码到仓库
实操
bash
[root@jenkins ~]# ls
anaconda-ks.cfg jdk-21_linux-x64_bin.rpm jenkins-05
[root@jenkins ~]# cd jenkins-05/
[root@jenkins jenkins-05]# ls
README.md test02
[root@jenkins jenkins-05]#
[root@jenkins jenkins-05]# git init
重新初始化现存的 Git 版本库于 /root/jenkins-05/.git/
[root@jenkins jenkins-05]# mkdir test3
[root@jenkins jenkins-05]# cd test3
[root@jenkins test3]# ls
[root@jenkins test3]# touch README.md
[root@jenkins test3]# vi README.md
[root@jenkins test3]# cat README.md
akjdkljd238478923748
[root@jenkins test3]# git add README.md
[root@jenkins test3]# git commit -m "first commit"
[master a8f911c] first commit
1 file changed, 1 insertion(+)
create mode 100644 test3/README.md
[root@jenkins test3]# git push -u origin master
Username for 'https://gitee.com': lifeng200577
Password for 'https://lifeng200577@gitee.com':
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 365 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 7948b0ad
To https://gitee.com/lifeng200577/jenkins-05.git
f600051..a8f911c master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
查看是否同步
登录gitee网站,进入你的仓库内就可以看到了
![](https://i-blog.csdnimg.cn/direct/51aa3e40ed784d33bd187a6724408357.png)
完成以上操作后,访问代码仓库,就可以看到刚刚推送成功的README.md文件,在服务器上修改README.md文件里的内容,再次推送到代码仓库,测试是否能够推送更改的内容,操作如下:
bash
[root@jenkins jenkins-05]# cd test3
[root@jenkins test3]# vi README.md
[root@jenkins test3]# cat README.md
12345678zaqwsxedc
[root@jenkins test3]# git add README.md
[root@jenkins test3]# git commit -m "first commit1"
[master b80ab54] first commit1
1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test3]# git push -u origin master
Username for 'https://gitee.com': lifeng200577
Password for 'https://lifeng200577@gitee.com':
Counting objects: 7, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 312 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b84e1985
To https://gitee.com/lifeng200577/jenkins-05.git
a8f911c..b80ab54 master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
以上操作执行完成后,刷新网站后再次访问代码仓库,就可以看到README.md文件的内容发生更改,推送成功,如下图所示
![](https://i-blog.csdnimg.cn/direct/ad60385f273b4d75b3ce56174924b339.png)
2、下载zrlog
为了让我们的实验更加接近生产环境,我们需要一段Java的源代码,所以此处我们下载由Java编写的博客------ zrlog
bash
[root@jenkins test3]# wget https://codeload.github.com/94fzb/zrlog/zip/master
--2024-12-23 10:27:47-- https://codeload.github.com/94fzb/zrlog/zip/master
正在解析主机 codeload.github.com (codeload.github.com)... 20.205.243.165
正在连接 codeload.github.com (codeload.github.com)|20.205.243.165|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [application/zip]
正在保存至: "master"
[ <=> ] 3,351,642 41.7KB/s 用时 30s
2024-12-23 10:28:18 (110 KB/s) - "master" 已保存 [3351642]
下载unzip,用于后续解压
bash
yum -y install unzip
查看master包大小
bash
du -sh master
解压master
bash
unzip master
将zrlog-master下的文件全部移动到test3中(如果不是在test3中解压)
bash
mv zrlog-master/* test3/
3、提交代码
bash
[root@jenkins test3]# ls
master README.md zrlog-master
[root@jenkins test3]# git add zrlog-master/
[root@jenkins test3]# git commit -m "add zrlog"
[root@jenkins test3]# git push
Username for 'https://gitee.com': lifeng200577
Password for 'https://lifeng200577@gitee.com':
Counting objects: 824, done.
Compressing objects: 100% (736/736), done.
Writing objects: 100% (822/822), 2.42 MiB | 823.00 KiB/s, done.
Total 822 (delta 122), reused 0 (delta 0)
remote: Resolving deltas: 100% (122/122), completed with 1 local object.
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 56412083
To https://gitee.com/lifeng200577/jenkins-05.git
b80ab54..0ecf6e2 master -> master
若我们可以在代码仓库中看到我们刚才提交的文件,说明提交成功。如下图:
![](https://i-blog.csdnimg.cn/direct/04a0dab1b7bd49d4b301e052e645a09d.png)
1.安装部署JDK(在Java主机上)
安装JDK软件包
https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
bash
[root@java ~]# ls
anaconda-ks.cfg apache-maven-3.9.9-bin.tar.gz apache-tomcat-9.0.98.tar.gz jdk-21_linux-x64_bin.rpm
[root@java ~]# yum -y install jdk-21_linux-x64_bin.rpm
查看是否被正确安装
bash
[root@java ~]# java -version
java version "21.0.5" 2024-10-15 LTS
Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
由于我们是yum直接安装的rpm包,所以不用配置环境变量也能直接使用;
使用别的方法安装jdk的话,必须要进行解压并且配置环境变量,要不然不好使。
2.安装配置Tomcat(Java主机)
1.作用
Tomcat是用来运行zrlog的容器
2.下载解压,存放在/usr/local/目录中
bash
[root@java ~]# ls
anaconda-ks.cfg apache-maven-3.9.9-bin.tar.gz apache-tomcat-9.0.98.tar.gz jdk-21_linux-x64_bin.rpm
[root@java ~]# tar -zxvf apache-tomcat-9.0.98.tar.gz -C /usr/local/
![](https://i-blog.csdnimg.cn/direct/27984518e48e4566b96883e30d4268cf.png)
3.修改配置文件
配置管理员用户
修改配置文件之前,我们最好先进行备份,避免改错
bash
[root@java ~]# cd /usr/local/tomcat/conf/
[root@java conf]# cp -r tomcat-users.xml tomcat-users.xml.bak
![](https://i-blog.csdnimg.cn/direct/f087ebeadc204c7b971e0e15b01d1592.png)
修改管理员用户配置文件
bash
vi /usr/local/tomcat/conf/tomcat-users.xml
-->
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user name="admin" password="jenkins.com" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />
</tomcat-users>
![](https://i-blog.csdnimg.cn/direct/64dae3e3442f4e8ab9b292b40886c249.png)
然后再看下一部分:
还是老样子,先进行备份
bash
[root@java bin]# cd /usr/local/tomcat/webapps/manager/META-INF/
[root@java META-INF]# ls
context.xml
[root@java META-INF]# cp -r context.xml context.xml.bak
![](https://i-blog.csdnimg.cn/direct/e791d3e5b8584e9ba97137e74a53113a.png)
进行编辑
bash
vi /usr/local/tomcat/webapps/manager/META-INF/context.xml
找到 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
向其中加入我们要使用的网段,修改如下:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.232.*" />
![](https://i-blog.csdnimg.cn/direct/4c9b2e348cc84922ab1aa6e5eb95276b.png)
配置全部完成后,我们进入到bin目录中进行启动
bash
[root@java ~]# cd /usr/local/tomcat/bin/
[root@java bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
4.启动
访问:http://192.168.232.181:8080
![](https://i-blog.csdnimg.cn/direct/abe1c7a6e2514497a482d3dda88db7f7.png)
首先,找到"Managing Tomcat",点击"manager webapp",如下图所示:
![](https://i-blog.csdnimg.cn/direct/d2e140ac7ffd44bd86ee6080f825c844.png)
然后输入tomcat的用户名与密码完成验证,如下图所示:
![](https://i-blog.csdnimg.cn/direct/81d0dc84a035494ea2e1f2d9430aa4ce.png)
完成验证后,成功进入manager平台,说明tomcat各项配置均配置成功。如下图所示:
![](https://i-blog.csdnimg.cn/direct/8b603849d8ad4268982505872b1200e4.png)
3.安装maven(在本地机器里安装)
1.作用
Maven编译java的源码并打包
2.下载解压,放到/usr/local目录下
bash
tar -zxvf apache-maven-3.9.9-bin.tar.gz -C /usr/local/
改名
bash
mv /usr/local/apache-maven-3.9.9/ /usr/local/maven
查看是否安装成功
进入/bin目录下进行查看
bash
[root@jenkins ~]# cd /usr/local/maven/bin/
[root@jenkins bin]# ls
m2.conf mvn mvn.cmd mvnDebug mvnDebug.cmd mvnyjp
[root@jenkins bin]# ./mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/local/maven
Java version: 21.0.5, vendor: Oracle Corporation, runtime: /usr/lib/jvm/jdk-21.0.5-oracle-x64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
在Jenkins上配置maven:
点击"Manage Jenkins",点击"Global Tool Configuration",找到"Maven配置",填写Maven相关的文件路径。如下图:
![](https://i-blog.csdnimg.cn/direct/bf2a6d358b354ff5beba929f72a48e50.png)
下滑找到 Maven ,点击"新增Maven",按照安装的Maven版本号来填写 Name,此处建议不要自动安装,所以不要勾选"自动安装",然后在 服务器端获取Maven的路径填入MAVEN_HOME ,应用保存即可。如下图:
![](https://i-blog.csdnimg.cn/direct/2287e69649d949a780c15d15360e569a.png)
配置完成后,点击应用保存
4.安装插件
1、安装
Maven Integration plugin //用来创建一个maven的项目
Deploy to container Plugin //用来将war包,发布到远程去
![](https://i-blog.csdnimg.cn/direct/887b3609231946d9b3ae4e85e085b6dc.png)
2、重启Jenkins(安装完插件后)
bash
systemctl restart jenkins
重新进行登录
3、验证
![](https://i-blog.csdnimg.cn/direct/6b517bf425bf4e8e8bab8bcfb54388a0.png)
出现 "构建一个maven项目" ,说明安装成功!
5.创建maven项目
将任务名称填入"输入一个任务名称"下,并选择想要构建的项目类型,这里我们选择"构建一个maven项目",如下图:
![](https://i-blog.csdnimg.cn/direct/ba0a3dcf8df14d2a82fd90efcd758a46.png)
配置"源码管理":选择"git"来进行源码管理;将私有的代码仓库的地址填入"Repository URL"。如下图:
![](https://i-blog.csdnimg.cn/direct/9202ffadd66649f7962f637771f1a1b6.png)
下滑找到"Build"(其功能实质就是使用maven去编译我们的源码并生成包),"Root POM"为"pom.xml";"Goals and options"下填写maven在编译时用到的选项,可留空,但在这里我们填写"-DskipTests=true package"这条命令表示在编译之前先清理,跳过测试。如下图:
![](https://i-blog.csdnimg.cn/direct/c098aec562e447dca873539a9fd542ce.png)
下滑点击"增加构建后操作步骤"选择"Editable Email Notification",在"Project Recipient List"下添加一个额外的邮箱,注意前后需要使用英文逗号隔开,如下图所示,应用,保存。如下图:
![](https://i-blog.csdnimg.cn/direct/8546b6eb239b4820ab87653c6b71be85.png)
![](https://i-blog.csdnimg.cn/direct/dee63340cfb742af9768d01ab1b86a95.png)
完成配置后,点击应用保存。
![](https://i-blog.csdnimg.cn/direct/a7bebdd0aebc44c7bebe1aa678655462.png)