Bootstrap

持续集成工具Jenkins(一)

持续集成工具Jenkins

一、持续集成工具jenkins介绍

1.1Jenkins介绍:

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成

1.2Jenkins特性

1.3什么是CI CD

CI CD一般包括三个概念:持续集成、持续交付、持续部署

(1)持续集成

在传统的软件开发过程中,集成通常发生在每个人都完成了各自的工作之后,集成也可以理解为团队里的大家完成自己负责的模块后,将各个子模块集成为一个可以完成整体功能的完整模块。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生,为了实现持续集成,我们每个人都要单元测试,保证各个子模块的正常工作。

(2)持续交付

持续交付是持续集成的延伸,将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。我们把代码部署到测试环境,预发布环境等等类生产环境成为交付。

(3)持续部署

通常将这个在不同环境发布和测试的过程叫做部署流水线

持续部署是在持续交付的基础上,把部署到生产环境的环境自动化

1.4什么是DevOps

DevOps就是开发、测试、运维这三个领域的合并

1.5CICD与DevOps的区别和联系

CICD更关注的是整个开发、测试、部署的自动化过程,当我们在本地测试通过后,我们提交到git上,触发相应的webhook或者类似的东西进行代码的构建,并打包部署到相应的的机器上,自动化的完成这整个过程。

DevOps更关注的是打通用户、PMO、需求、设计、开发、测试、运维等各上下游部门或不同角色;打通业务、架构、代码、测试、部署、监控、安全、性能等各领域工具链;尤其是打通开发与运维之间的gap,两者实际上存在着很多的冲突。DevOps是基于CICD的,自动化的流程是基础,DevOps是一个项目有idea到实际稳定运行的产品的最佳时间

DevOps是CICD思想的延伸,CICD是DevOps的基础核心,如果没有CICD自动化的工具和流程,DevOps是没有意义的。

二、Jenkins的安装与部署

2.1 安装Jenkins

导入密钥:

[root@server ~]# wget -O /etc/yum.repos.d/jenkins.repo \

    https://pkg.jenkins.io/redhat-stable/jenkins.repo

[root@server ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

更新yum源

[root@server ~]# yum upgrade

安装JDK

[root@server ~]# yum install -y fontconfig java-21-openstack-devel

安装jenkins

[root@server ~]# yum install -y jenkins

启动并设置开机自启

[root@server ~]# systemctl start jenkins

[root@server ~]# systemctl enable jenkins

关闭防火墙和SELINUX

[root@server ~]# systemctl stop firewalld

[root@server ~]# setenforce 0

查询admin密码

[root@server ~]# less /var/log/jenkins/jenkins.log

浏览器访问jenkins(http://ip.8080)

2.2自定义Jenkins

登陆后,会出现如下页面,这里涉及到jenkins的插件安装,建议选择“安装推荐的插件”,点击“安装推荐的插件”后,进入“新手入门”页面,等待全部插件安装成功即可。  

       

插件安装完成后,会出现“创建第一个管理员用户”页面,填写正确信息后,点击“保存并完成”,这样第一个管理员用户就创建完毕了。如下图:

2.3jenkins发布PHP代码

任务描述

(1)了解如何安装插件。

(2)了解如何配置Publish Over SSH、添加公钥、增加SSH Server

(3)了解构建一个新的任务的流程。

任务实施

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

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

重启jenkins:

[root@server ~]# systemctl restart jenkins

2.4配置Publish Over SSH

首先在服务器上/.ssh目录下生成一对密钥

[root@server ~]# cd ~/.ssh

[root@server .ssh]# ssh-keygen -t rsa

[root@server .ssh]# ls -al

总用量 8

drwx------. 2 root root   38 12月 18 08:49 .

dr-xr-x---. 3 root root  165 12月 17 18:41 ..

-rw-------. 1 root root 2602 12月 18 08:49 id_rsa

-rw-r--r--. 1 root root  565 12月 18 08:49 id_rsa.pub

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

2.5增加SSH Server

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

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

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

[root@server ~]# vi .ssh/authorized_keys     

在服务器上尝试登录远程机器:

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


2.6构建新的任务

点击新建item,如下图:

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

填写“描述”,如下图:

配置“源码管理”,选择管理源码的方式(这里选择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”来添加多个机器,如下图:

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

2.7将代码发布到对方机器

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

2.8Jenkins邮件配置

项目实施

首先进入“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里去配置接收邮件的地址。在已经构建过的项目中,点击“配置”

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

 

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

收件:

2.9插件email-ext

插件“Email Extension Plugin”可以实现无论构建成功或失败,都会发送邮件通知构建结果。

进入“Manage Jenkins”,然后进入 “Manage Plugins”,找到并安装插件“Email Extension Plugin”,插件安装成功后,重启jenkins。

配置Extended E-mail Notification

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

      

删除邮件通知的配置后,配置Extended E-mail Notification,“SMTP server”中填入“smtp.163.com”;“SMTP Port”中填入端口号为“25”;“SMTP Username”和“SMTP Password”中分别填入邮箱用户名与密码,然后下滑找到”Default Tiggers”,勾选”Always”,其他保持默认,保存。如下图:

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

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

发送邮件测试

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

2.10Jenkins破解管理员密码

[root@server 12345]# cd /var/lib/jenkins/users/

[root@server users]# ls -al

总用量 12

drwxr-xr-x.  3 jenkins jenkins   57 12月 17 17:59 .

drwxr-xr-x. 14 jenkins jenkins 4096 12月 18 14:25 ..

drwx------.  2 jenkins jenkins   24 12月 18 08:16 admin_11228694364098259215

-rw-r--r--.  1 jenkins jenkins  301 12月 17 17:59 users.xml

[root@server users]# cd admin_11228694364098259215/

[root@server admin_11228694364098259215]# ls

config.xml

[root@server admin_11228694364098259215]# vi config.xml

搜索定位到 <passwordHash>那一行,修改为

<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash>

[root@server admin_11228694364098259215]# systemctl restart jenkins

重启jenkins,新密码为000000

手动设置随机字符串

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

;