Jenkins 持续集成部署——Jenkins实战与运维(1)

一、Jenkins 相关配置及代码发布

1. Jenkins 发布 php 代码

1.1 安装插件

先进入"系统管理",再进入"管理插件",在"已安装"中检查是否有"Git plugin"和"Publish Over SSH"两个插件,如果没有则需要安装,到"可选插件"中搜索并安装。

插件完成后,点击 "返回首页"回到服务器中重启 jenkins后,登录。

[root@jenkins ~]# systemctl restart jenkins

2. 配置 publish Over SSH

首先需要在服务器上/.ssh目录下生成一对密钥,命令如下:

[root@jenkins ~]# mkdir /root/.ssh
[root@jenkins ~]# cd ~/.ssh

检查是否生成成功,命令如下:

[root@jenkins .ssh]# ls -al
总用量 8
drwx------. 2 root root   38 12月 17 15:20 .
dr-xr-x---. 7 root root  256 12月 17 15:19 ..
-rw-------. 1 root root 1679 12月 17 15:20 id_rsa
-rw-r--r--. 1 root root  408 12月 17 15:20 id_rsa.pub

密钥生成成功后,登录Jenkins,点击"系统管理"然后点击"系统设置",下拉找到"Publish Over SSH"将刚才生成的服务器的私钥填入 "Publish over SSH" 中的"key",如下图:

[root@jenkins ~]# cat /root/.ssh/id_rsa

3. 添加 SSH Server

"Publish over SSH"配置完成后,为了实现代码的成功发布,我们需要先查看并复制服务器的公钥,命令如下:

[root@jenkins ~]# cat /root/.ssh/id_rsa.pub 

然后将复制的服务器公钥,添加到需要添加"SSH Servers"的远程机器的.ssh/authorized_keys目录下,若要增加服务器的"SSH Servers",则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:

然后将复制的服务器公钥,添加到需要添加"SSH Servers"的远程机器的.ssh/authorized_keys目录下,若要增加服务器的"SSH Servers",则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:

[root@test .ssh]# vi authorized_keys 

在服务器尝试登录远程机器,如下图所示:

[root@jenkins ~]# ssh 192.168.200.71

尝试登陆成功后,登录jenkins,进入"Manage Jenkins",点击"Configure System",下滑找到"SSH Servers",填写所需要连接机器的各项设置,然后点击"Test Configuration",显示"success",即成功。如下图所示:

4.构建新的任务

点击新建ltem。输入任务名称,并选择构建软件项目的风格,应实验要求这里选择自由风格,如下图:

填写"描述",如下图:

配置"源码管理",选择管理源码的方式(这里选择git),将代码仓库的地址填入"Repositories URL"中,若代码仓库是私有仓库,还需要点击"添加"来添加凭证,其他保持默认即可,如下图:

配置"构建触发器""构建环境",应实验要求此处保持默认即可,如下图:

配置"构建",此处用到了我们之前安装的 "publish over ssh" 插件,首先增加名为"Send files or exeute commands over SSH"的构建步骤,如下图:

然后在"Name"下选择机器名称(此处SSH Server个数由第3步中添加的数量决定);"Source files"表示要发布那些代码,在其下填写"**/**"(表示全部);

"Remote directory"表示把代码发送到远程机器的位置,填写"/tmp/Jenkins_test"(此处可自定义);"Exec command"下填写想要执行的命令,此处自定义可以为空,如下图:

点击"高级",出现如下页面,其中"Pattern separator" 设置模式分隔符,"Exec timeout(ms)" 设置超时时间,此处保持默认即可,如下图:

通常情况下我们需要添加多个机器来进行任务,点击左下角"Add Server"来添加多个机器,如下图:

完成以上设置后,应用保存即可。

5. 将代码发布到对方机器

首先进入任务,然后点击"立即构建",查看"控制台输出",最后登录各机器查看代码发布是否成功,如下图:

二、Jenkins 邮件配置

配置"邮件通知",对邮件进行配置,这样当项目构建失败时,我们能第一时间收到通知。

首先进入"Manage Jenkins",然后进入"Configure System",填写"Jenkins location", 设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致,如下图:

找到"邮件通知","SMTP服务器"中填写"smtp.163.com",接着勾选"使用SMTP认证",填写所使用邮箱的用户名及密码,"SMTP端口"使用25端口,接着勾选"通过发送测试邮件测试配置",向其中填写用于发送测试邮件的邮箱地址后,点击"Test configuration"进行测试,发送成功后,保存。如下图:

注意

1."使用SMTP认证"下的密码需要我们去相应的邮箱获取。

获取步骤如下(以163邮箱为例):

登录163邮箱,点击上方"设置",点击"POP3/SMTP/IMAP",开启"IMAP/SMTP服务"和"POP3/SMTP服务",找到"授权密码管理",点击"新增授权密码";接着按照提示步骤操作就可以了。

2."使用SMTP认证"下的用户名中所填邮箱地址,要与"系统管理员邮箱地址"相同,否则会发送错误。

完成以上邮件配置后,我们还需要进入已经构建过的job里去配置接收邮件的地址。在已经构建过的项目ipromise中,点击"配置",如下图:

然后在"增加构建后操作步骤"中,选择"E-mail Notification",最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",保存,如下图:

最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",应用保存,如下图:

三、插件 email-ext

1.配置 Extended E-mail Notification

我们要使用 Extended E-mail Notification(email-ext) 去代替 "邮件通知",所以我们需要先把"邮件通知"里设置的内容删掉,如下图:

删除邮件通知的配置后,配置Extended E-mail Notification,"SMTP server"中填入"smtp.163.com";"SMTP Port"中填入端口号为"25";添加Credentials,分别填入邮箱用户名和密码。如下图:

然后下滑找到"Default Tiggers",勾选"Always",其他保持默认,保存。如下图:

2. 配置对应任务

进入任务2.1所创建的项目ipromise,下拉找到"构建后操作",然后点击"增加构建后操作步骤",选择"Editable Email Notification",其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔。如下图:

如下图,点击右下角的"Advanced settings",找到"Triggers"(触发器,设置在什么情况下发送邮件),然后点击下方的"Add Trigger",增加发邮件的条件,保存。如下图:

3. 发送邮件测试

首先点击"立即构建",然后查看"控制器输出",如下图所示,可以看到发邮件的动作,最后收到邮件即为成功。

四、Jenkins 破解管理员密码

1. 破解管理员密码

[root@jenkins ~]# cd /var/lib/jenkins/users
[root@jenkins users]# ls -la
总用量 12
drwxr-xr-x.  3 root    root      57 12月 17 14:58 .
drwxr-xr-x. 11 jenkins jenkins 4096 12月 18 08:16 ..
drwx------.  2 root    root      24 12月 17 20:36 admin_13975910729098858436
-rw-r--r--.  1 root    root     301 12月 17 14:58 users.xml
[root@jenkins users]# cd admin_13975910729098858436
[root@jenkins admin_13975910729098858436]# vi config.xml 
搜索定位到 <passwordHash>那一行,修改为
<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash> 

[root@jenkins admin_13975910729098858436]# systemctl restart jenkins
新密码为 000000

2. 手动设置随机字符串

若不想使用上述的密码,我们也可以自己定义一个随机字符串,进入jenkins界面,点击右上角admin,点击设置,下拉找到"密码",自己定义一个随机字符串,将自己定义的随机字符串保存下来,位置自由,若以后忘记了密码,可在 /var/lib/jenkins/users/admin 文件中,将字符串修改成自己定义的字符串,这样密码就修改成功了。

五、Jenkins 部署 java项目

1. 准备工作

自己申请一个私有git仓库,生成密钥对,将公钥添加到git服务端

[root@jenkins ~]# ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
[root@jenkins ~]# cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJvm5NIavNB9Xpv3pdcSStS/hf47D2VK+SGKAGl4dnsZ 3193752631@qq.com

复制生成后的 ssh key,返回gitee个人主页,通过主页 「个人设置」->「安全设置」->「SSH 公钥」 ,将生成的"SSH密钥"添加到仓库中。如下图。

2. 连接代码仓库

[root@jenkins ~]# cd /home/
[root@jenkins home]# git config --global user.name "gitee-ipromise"
[root@jenkins home]# git config --global user.email "3193752631@qq.com"
[root@jenkins home]# mkdir perfect
[root@jenkins home]# cd perfect/
[root@jenkins perfect]# git init  
初始化空的 Git 版本库于 /home/perfect/.git/
[root@jenkins perfect]#  touch README.md
[root@jenkins perfect]# git add README.md
[root@jenkins perfect]# git commit -m "first commit"
[master(根提交) b7f5d97] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md
[root@jenkins perfect]# git remote add origin https://gitee.com/gitee-ipromise/perfect.git
[root@jenkins perfect]# git push -u origin master   
Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 211 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 084c23a7
To https://gitee.com/gitee-ipromise/perfect.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

完成以上操作后,访问代码仓库,就可以看到刚刚推送成功的README.md文件,在服务器上修改README.md文件里的内容,再次推送到代码仓库,测试是否能够推送更改的内容,操作如下:

[root@jenkins perfect]# vi README.md 
dshihihohsdoodou
[root@jenkins perfect]# git add README.md
[root@jenkins perfect]# git commit -m "first commit1"
[master 5742dd6] first commit1
 1 file changed, 1 insertion(+)
[root@jenkins perfect]# git push -u origin master
Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com': 
Counting objects: 5, done.
Writing objects: 100% (3/3), 258 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 8e4a2b83
To https://gitee.com/gitee-ipromise/perfect.git
   b7f5d97..5742dd6  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

以上操作执行完成后,再次访问代码仓库,就可以看到README.md文件的内容发生更改,推送成功,如下图所示:

3. 下载 zrlog

为了让我们的实验更加接近生产环境,我们需要一段Java的源代码,所以此处我们下载由Java编写的博客------ zrlog。

[root@jenkins home]#  wget https://codeload.github.com/94fzb/zrlog/zip/master
--2024-12-18 16:26:40--  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.1"

    [                                                                                         <=>                        ] 3,351,642    106KB/s 用时 32s    

2024-12-18 16:27:12 (103 KB/s) - "master.1" 已保存 [3351642]

[root@jenkins home]# du -sh master  
3.2M	master
[root@jenkins home]# unzip master 
[root@jenkins home]# mv zrlog-master/* perfect/

4. 提交代码

[root@jenkins home]# cd perfect/
[root@jenkins perfect]# git add .
[root@jenkins perfect]# git commit -m "add zrlog"
[root@jenkins perfect]#  git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com': 
Counting objects: 802, done.
Compressing objects: 100% (714/714), done.
Writing objects: 100% (800/800), 2.37 MiB | 1.57 MiB/s, done.
Total 800 (delta 111), reused 0 (delta 0)
remote: Resolving deltas: 100% (111/111), done.
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 26402e87
To https://gitee.com/gitee-ipromise/perfect.git
   5742dd6..f00fa55  master -> master

若我们可以在代码仓库中看到我们刚才提交的文件,说明提交成功。如下图:

5. 安装 jdk (在远程机器上)

(1)解压 jdk 包

将jdk-17.0.10_linux-x64_bin.tar.gz 上传到远程机器/usr/local下

[root@test ~]# cd /usr/local/
[root@test local]# mkdir java
[root@test local]# mv jdk-17.0.10_linux-x64_bin.tar.gz /usr/local/java/jdk-17.0.10_linux-x64_bin.tar.gz
[root@test local]# cd java/
[root@test java]# tar -zxvf jdk-17.0.10_linux-x64_bin.tar.gz 

(2)配置 java 的环境变量

[root@test java]# vi /etc/profile
添加如下内容:
export JAVA_HOME=/usr/local/java/jdk-17.0.10
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@test java]# source /etc/profile

(3)验证

[root@test java]# java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)
相关推荐
勤奋的凯尔森同学30 分钟前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
技术小齐5 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风5 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕5 小时前
C语言-进程
linux·运维·服务器
chenbin5206 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯6 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹6 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
sszdzq7 小时前
Docker
运维·docker·容器
book01217 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
bugtraq20218 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu