Jenkins的安装与部署

当我们在实施一个项目时,从新代码中获得反馈的速度越快,问题越早得到解决。获得反馈的一种常见方法是在新代码之后运行测试,但这就导致了当代码正在编译并且正在运行测试时,开发人员无法在测试完成之前继续工作,从而使生产效率大大降低。Jenkins 通过提供持续集成功能解决了该问题。合并新代码后,Jenkins 可以自动进行构建,运行测试和部署应用程序。这篇文章会向大家介绍Jenkins的安装方式和使用方法。

Jenkins安装

  • 安装jdk1.8
  • 安装jenkins
  • 了解jenkins 的初始化过程

安装jdk1.8
Jenkins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境,及安装jdk 1.8

  1. # yum install -y java-1.8.0-openjdk //安装jdk 1.8
  2. # vi /etc/yum.repos.d/jenkins.repo //配置yum源
  3. 添加如下内容
  4. [jenkins]
  5. name=Jenkins
  6. baseurl=http://pkg.jenkins.io/redhat
  7. gpgcheck=1
  8. #yum clean all #清除缓存
  9. #yum repolist #查看yum源是否成功
  10. #rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key #导入密钥

Jenkins是什么?

Jenkins是一个独立的开源软件项目,是基于Java开发的一种可扩展的持续集成(CI)工具,用于监控持续重复的工作,自动的构建和测试软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

持续集成(CI)是什么?

持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。

# yum  -y install epel-release
# yum -y install daemonize
# yum install -y jenkins        //安装jenkins
# systemctl start jenkins        //启动jenkins
# netstat –ltnp            //查看Jenkins是否启动(8080端口是否监听)
# systemctl stop firewalld       //关闭防火墙

输入ip加端口进入jenkins
image.png

# less /var/lib/jenkins/secrets/initialAdminPassword #查看管理员密码

自定义jenkins

  • 安装基础插件
  • 创建第一个管理员用户

安装插件

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

image.png

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

Jenkins相关配置及代码发布

了解jenkins各配置及插件的作用,学会发布代码。
Jenkins发布php代码

  • 解如何安装插件。
  • 了解如何配置Publish Over SSH、添加公钥、增加SSH Server
  • 了解构建一个新的任务的流程。

    安装插件

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

image.png

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

#systemctl restart jenkins         //重启jenkins

配置Publish Over SSH

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

# cd ~/.ssh
# ssh-keygen -t rsa

image.png
image.png
检查是否生成成功

# ls -al

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

#cat id_rsa

image.png
image.png
错误记录:提示 .ssh目录不存在
解决方案:创建~/.ssh目录,并把目录权限设置为700。

# mkdir ~/.ssh
#chmod 700 ~/.ssh

增加SSH Server

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

# cat id_rsa.pub

image.png
然后将复制的服务器公钥,添加到需要添加“SSH Servers”的远程机器的.ssh/authorized_keys目录下,若要增加服务器的“SSH Servers”,则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。
再新加一台主机jenkins2,在新主机上生成密钥,进行以下操作

# mkdir ~/.ssh         #创建文件
# cd ~/.ssh/        #进入.ssh
# chmod 700 ~/.ssh    #权限设置为700    
# ssh-keygen -t rsa    #生成密钥
# ls -al    #查看是否生成成功
# touch authorized_keys    
# chmod 600 authorized_keys #权限设置为600

然后把localhost主机上的生成的公钥添加到jenkins2的.ssh/authorized_keys目录下。
image.png

# vi .ssh/authorized_keys

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

ssh 192.168.200.222

image.png
试登陆成功后,登录jenkins,进入“Manage Jenkins”,点击“Configure System”,下滑找到“SSH Servers”,填写所需要连接机器的各项设置,然后点击“Test Configuration”,显示“success”,即成功。
image.png
image.png
错误记录:.ssh目录下无authorized_keys文件
解决方案:创建名为authorized_keys的文件,并且把它的用户权限设成600。

# cd ~/.ssh
# touch authorized_keys
# chmod 600 authorized_keys
# ls –al

构建新的任务

点击新建ltem
image.png
输入任务名称,并选择构建软件项目的风格,应实验要求这里选择自由风格
image.png
填写“描述”
image.png

配置“源码管理”,选择管理源码的方式(这里选择git),将代码仓库的地址填入“Repositories URL”中,若代码仓库是私有仓库,还需要点击“添加”来添加凭证,其他保持默认即可。
https://gitee.com/ 到gitee创建代码仓库,然后把代码仓库的地址填入“Repositories URL”中。
image.png

image.png
配置“构建触发器”“构建环境”,应实验要求此处保持默认即可
image.png
配置“构建”,此处用到了我们之前安装的 “publish over ssh” 插件,首先增加名为“Send files or exeute commands over SSH”的构建步骤
image.png
然后在“Name”下选择机器名称(此处SSH Server个数由第3步中添加的数量决定);“Source files”表示要发布那些代码,在其下填写“/”(表示全部);
“Remote directory”表示把代码发送到远程机器的位置,填写“/tmp/Jenkins2”(此处可自定义);“Exec command”下填写想要执行的命令,此处自定义可以为空
image.png
点击“高级”,出现如下页面,其中“Pattern separator” 设置模式分隔符,“Exec timeout(ms)” 设置超时时间,此处保持默认即可
image.png
通常情况下我们需要添加多个机器来进行任务,点击左下角“Add Server”来添加多个机器。
image.png
完成以上设置后,应用保存即可。

将代码发布到对方机器

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

Jenkins邮件配置

配置“邮件通知”,对邮件进行配置,这样当项目构建失败时,我们能第一时间收到通知。
首先进入“Manage Jenkins”,然后进入“Configure System”,填写“Jenkins location”, 设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致。
image.png
找到“邮件通知”,“SMTP服务器”中填写“smtp.163.com”,接着勾选“使用SMTP认证”,填写所使用邮箱的用户名及密码,“SMTP端口”使用25端口,接着勾选“通过发送测试邮件测试配置”,向其中填写用于发送测试邮件的邮箱地址后,点击“Test configuration”进行测试,发送成功后,保存。
image.png

image.png

注意SMTP认证使用的密码是网易邮箱的授权码!!!
1.“使用SMTP认证”下的密码需要我们去相应的邮箱获取。
获取步骤如下(以163邮箱为例):
登录163邮箱,点击上方“设置”,点击“POP3/SMTP/IMAP”,开启“IMAP/SMTP服务”和“POP3/SMTP服务”,找到“授权密码管理”,点击“新增授权密码”;接着按照提示步骤操作就可以了。
2.“使用SMTP认证”下的用户名中所填邮箱地址,要与“系统管理员邮箱地址”相同,否则会发送错误
image.png
image.png
收到邮件
image.png
完成以上邮件配置后,我们还需要进入已经构建过的job里去配置接收邮件的地址。在已经构建过的项目test中,点击“配置”
image.png
然后在“增加构建后操作步骤”中,选择“E-mail Notification”,最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,保存。
image.png
最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,应用保存。
image.png

插件email-ext

安装并配置插件“Email Extension Plugin”
插件“Email Extension Plugin”可以实现无论构建成功或失败,都会发送邮件通知构建结果。
安装插件
进入“Manage Jenkins”,然后进入 “Manage Plugins”,找到并安装插件“Email Extension Plugin”,插件安装成功后,重启jenkins。
配置 Extended E-mail Notification
我们要使用 Extended E-mail Notification(email-ext) 去代替 “邮件通知”,所以我们需要先把“邮件通知”里设置的内容删掉
image.png
删除邮件通知的配置后,配置Extended E-mail Notification,“SMTP server”中填入“smtp.163.com”;“SMTP Port”中填入端口号为“25”;“SMTP Username”和“SMTP Password”中分别填入邮箱用户名与密码。
image.png

然后下滑找到”Default Tiggers”,勾选”Always”,其他保持默认,保存。
image.png
配置对应任务
进入任务2.1所创建的项目test,下拉找到“构建后操作”,然后点击“增加构建后操作步骤”,选择“Editable Email Notification”,其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔。
image.png
image.png
如下图,点击右下角的“Advanced settings”,找到“Triggers”(触发器,设置在什么情况下发送邮件),然后点击下方的“Add Trigger”,增加发邮件的条件,保存。
image.png

Jenkins破解管理员密码

学会在服务端破解管理员密码
可以手动设置随机字符串
破解管理员密码

# cd /var/lib/jenkins/users/
# ls -la
# cd admin_3069767462100961470/
# vim config.xml 
搜索定位到 <passwordHash>那一行,修改为
<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash>
# systemctl restart jenkins  //重启jenkins
新密码为000000

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