Jenkins的安装与部署

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

Jenkins安装

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

安装jdk1.8

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

# yum install -y java-1.8.0-openjdk        //安装jdk 1.8
# vi /etc/yum.repos.d/jenkins.repo         //配置yum源
添加如下内容
[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1
#yum clean all #清除缓存
#yum repolist #查看yum源是否成功
#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

 

jenkins iOS发布 jenkins 部署_Jenkins

 

 

 

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

 

自定义jenkins

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

安装插件

 

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

jenkins iOS发布 jenkins 部署_jenkins iOS发布_02

 

 

 

jenkins iOS发布 jenkins 部署_随机字符串_03

 

 

创建第一个管理员用户

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

jenkins iOS发布 jenkins 部署_Jenkins_04

 

 

jenkins iOS发布 jenkins 部署_Jenkins_05

 

 

Jenkins相关配置及代码发布

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

Jenkins发布php代码

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

安装插件

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

jenkins iOS发布 jenkins 部署_Jenkins_06

 

 

jenkins iOS发布 jenkins 部署_随机字符串_07

 

 

查看已经安装过的 Publish Over SSH 和 Git plugin。

 

jenkins iOS发布 jenkins 部署_Jenkins_08

 

 

jenkins iOS发布 jenkins 部署_服务器_09

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

#systemctl restart jenkins         //重启jenkins

配置Publish Over SSH

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

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

jenkins iOS发布 jenkins 部署_随机字符串_10

jenkins iOS发布 jenkins 部署_jenkins iOS发布_11

 

 

检查是否生成成功

# ls -al

jenkins iOS发布 jenkins 部署_jenkins iOS发布_12

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

查看key

#cat id_rsa

jenkins iOS发布 jenkins 部署_随机字符串_13

 

 

jenkins iOS发布 jenkins 部署_随机字符串_14

错误记录:提示 .ssh目录不存在

解决方案:创建~/.ssh目录,并把目录权限设置为700。

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

增加SSH Server

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

# cat id_rsa.pub

jenkins iOS发布 jenkins 部署_Jenkins_15

 

 

然后将复制的服务器公钥,添加到需要添加“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目录下。

jenkins iOS发布 jenkins 部署_服务器_16

 

 

# vi .ssh/authorized_keys

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

ssh 192.168.200.222

jenkins iOS发布 jenkins 部署_随机字符串_17

 

 

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

jenkins iOS发布 jenkins 部署_jenkins iOS发布_18

 

 

jenkins iOS发布 jenkins 部署_jenkins iOS发布_19

错误记录:.ssh目录下无authorized_keys文件

解决方案:创建名为authorized_keys的文件,并且把它的用户权限设成600。

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

构建新的任务

点击新建ltem

jenkins iOS发布 jenkins 部署_服务器_20

 

 

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

jenkins iOS发布 jenkins 部署_随机字符串_21

 

 

填写“描述”

jenkins iOS发布 jenkins 部署_随机字符串_22

 

 

 

 

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

https://gitee.com/  到gitee创建代码仓库,然后把代码仓库的地址填入“Repositories URL”中。

jenkins iOS发布 jenkins 部署_随机字符串_23

 

 

 

jenkins iOS发布 jenkins 部署_jenkins iOS发布_24

 

 

配置“构建触发器”“构建环境”,应实验要求此处保持默认即可

jenkins iOS发布 jenkins 部署_jenkins iOS发布_25

 

 

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

jenkins iOS发布 jenkins 部署_随机字符串_26

 

 

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

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

jenkins iOS发布 jenkins 部署_服务器_27

 

 

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

jenkins iOS发布 jenkins 部署_Jenkins_28

 

 

通常情况下我们需要添加多个机器来进行任务,点击左下角“Add Server”来添加多个机器。

jenkins iOS发布 jenkins 部署_Jenkins_29

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

将代码发布到对方机器

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

进入任务

jenkins iOS发布 jenkins 部署_服务器_30

 

 

jenkins iOS发布 jenkins 部署_服务器_31

 

jenkins iOS发布 jenkins 部署_Jenkins_32

jenkins iOS发布 jenkins 部署_jenkins iOS发布_33

Jenkins邮件配置

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

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

jenkins iOS发布 jenkins 部署_服务器_34

 

 

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

jenkins iOS发布 jenkins 部署_Jenkins_35

 

 

 

jenkins iOS发布 jenkins 部署_jenkins iOS发布_36

注意SMTP认证使用的密码是网易邮箱的授权码!!!

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

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

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

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

jenkins iOS发布 jenkins 部署_jenkins iOS发布_37

 

 

 

jenkins iOS发布 jenkins 部署_随机字符串_38

收到邮件

jenkins iOS发布 jenkins 部署_随机字符串_39

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

jenkins iOS发布 jenkins 部署_jenkins iOS发布_40

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

jenkins iOS发布 jenkins 部署_服务器_41

 

 

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

jenkins iOS发布 jenkins 部署_随机字符串_42

插件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) 去代替 “邮件通知”,所以我们需要先把“邮件通知”里设置的内容删掉

jenkins iOS发布 jenkins 部署_Jenkins_43

 

 

删除邮件通知的配置后,配置Extended E-mail Notification,“SMTP server”中填入“smtp.163.com”;“SMTP Port”中填入端口号为“25”;“SMTP Username”和“SMTP Password”中分别填入邮箱用户名与密码。

jenkins iOS发布 jenkins 部署_随机字符串_44

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

jenkins iOS发布 jenkins 部署_服务器_45

 

 

配置对应任务

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

jenkins iOS发布 jenkins 部署_随机字符串_46

 

 

jenkins iOS发布 jenkins 部署_jenkins iOS发布_47

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

jenkins iOS发布 jenkins 部署_服务器_48

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

jenkins iOS发布 jenkins 部署_随机字符串_49

手动设置随机字符串

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