jenkins|自动化代码发布jenkins及其发送邮件

一、持续集成、持续交付、持续部署

  1. 持续集成
    持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码变更经常反复地发生。
    持续集成意味着一个在家用笔记本编写代码的开发人员大衡和另一个在办公室编程的开发人员
    大林,可以为同样的产品分别地编写软件,将其改动整合在一个叫做源存储库的地方。他们可以从各自编写的部分构建出组合的软件,并且按照他们期望的方式来测试软件。
  2. 持续交付
    持续交付意味着每次大衡或大林修改、整合和
    构建代码时,也同时在类似于生产环境中自动测试了这段代码。我们通常将这个在不同环境发布和测试的过程叫做部署流水线。
    通常部署流水线有一个开发环境,一个测试环境,一个准生产环境,但是这些阶段会根据不同的团队、产品和组织而变化。例如,Mingle 团队有一个阶段叫做“纸杯蛋糕”的准
    生产环境,而 Etsy 的准生产环境叫做“公主”。
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    在不同的环境下,大衡和大林写的代码被分别进行测试。当代码部署到生产环境它就开始了工作,这给予了他们更多的信心。并且只有当代码通过前一个环境的测试才会进入到下一个部署流水线的环境当中去。通过这种方式,大衡和大林将会从每个环境中测试并得到新的反馈,如果有失败,他们也可以在代码被应用到生产环境之前更加容易地发现问题并且修正它。
  3. 持续部署
    大衡和大林所做的每个改动,都是通过测试环节,然后自动投入生产的实践过程。
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

二、 jenkins的相关概念
  1. jenkins是什么?
    Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这
    是一个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署
    技术。Jenkins 是一种软件允许持续集成。
  2. jenkins的目的
    • 持续、自动地构建/测试软件项目。
    • 监控软件开放流程,快速问题定位及处理,提示开放效率。
  3. jenkins特性
    • 开源的 java 语言开发持续集成工具,支持 CI,CD。
    • 易于安装部署配置:可通过 yum 安装,或下载 war 包以及通过 docker 容器等快速实现安装部署,可方便 web 界面配置管理。
    • 消息通知及测试报告:集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知,生成 JUnit/TestNG 测试报告。
    • 分布式构建:支持 Jenkins 能够让多台计算机一起构建/测试。
    • 文件识别:Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
    • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 git,svn,maven,docker
      等。
三、部署安装(yum安装) 环境预设:
最低配置:不少于256M内存,不低于1G磁盘,JDK版本>=1.8(使用openjdk-1.8以上也可以)
环境准备:
192.168.192.137
1.环境初始化
#查看CentOS版本和系统位数 [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux #关闭防火墙和SELinux [root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 #安装Git [root@localhost ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc-c++ perl-ExtUtils-MakeMaker wget autoconf -y [root@localhost ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz [root@localhost ~]# tar xzf git-2.7.3.tar.gz -C /usr/local/ [root@localhost ~]# cd /usr/local/git-2.7.3/ [root@localhost git-2.7.3]# make configure [root@localhost git-2.7.3]# ./configure --prefix=/usr/local/git [root@localhost git-2.7.3]# make profix=/usr/local/git [root@localhost git-2.7.3]# make install [root@localhost ~]# echo "export PATH=$PATH:/usr/local/git/bin" > /etc/profile.d/git.sh [root@localhost ~]# source/etc/profile.d/git.sh [root@localhost ~]# git --version git version 2.7.3#maven安装 [root@localhost ~]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz [root@localhost ~]# tar xzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/ [root@localhost ~]# cd /usr/local/ [root@localhost local]# mv apache-maven-3.5.4 maven [root@localhost ~]# echo "export PATH=$PATH:/usr/local/maven/bin" > /etc/profile.d/maven.sh [root@localhost ~]# source/etc/profile.d/maven.sh [root@localhost ~]# mvn -version Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00) Maven home: /usr/local/maven Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix" #JDK安装 [root@localhost ~]# tar -zxf jdk-8u161-linux-x64.tar.gz -C /usr/local [root@localhost ~]# cd /usr/local/ [root@localhost local]# mv jdk1.8.0_161 jdk1.8.0 [root@localhost ~]# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0 export JRE_HOME=/usr/local/jdk1.8.0/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin [root@localhost ~]# source /etc/profile [root@localhost ~]# java -version

2. 安装jenkins
[root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo [root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key [root@localhost ~]# yum clean all [root@localhost ~]# yum repolist [root@localhost ~]# yum install jenkins -y [root@localhost ~]# systemctl start jenkins [root@localhost ~]# systemctl status jenkins #查看初始密码 [root@localhost ~]# less /var/log/jenkins/jenkins.log

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

3. 打开浏览器,访问192.168.192.137:8080界面,并初始化jenkins jenkins|自动化代码发布jenkins及其发送邮件
文章图片
选择“安装推荐的插件”
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

等待全部插件都下载好,如下 jenkins|自动化代码发布jenkins及其发送邮件
文章图片
创建一个管理员,也可以使用默认的admin,密码查看:
cat /var/lib/jenkins/secrets/initialAdminPassword
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

4. 发布PHP任务
  • 查看插件
    系统管理–>插件管理,“可选插件”是未安装的插件,“已安装”是已经安装的插件,其中勾选为灰色的是不可卸载的插件。
    检查是否有“Git plugin”和“Publish over SSH”两个插件,如果没有,在“可选插件”中安装。发现“Publish over SSH”没有,安装它。
    我这里没有Publish over SSH jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

  • 配置插件
    系统管理–系统设置,找到刚刚安装的插件“Publish over SSH”
    #生成私钥 [root@localhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:s0Ys8wLdSVpQ+QmcS2UDutbDqRqhZKp7a3sqhU0DEN0 root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ |+o ..oo=+| |. . Eo*. .| | ...o+ .| |o. X.oo| | +o.o B S| |.+o. + * +| |... . o +| |o o .o o| |o=+=.| +----[SHA256]-----+#查看私钥并复制 [root@localhost ~]# cat .ssh/id_rsa

    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    然后新增“SSH Servers”,填入对应的hostname,这就是PHP代码要发布的机器
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    #接下来还需要把公钥拷贝到对应的hostname机器上 [root@localhost ~]# scp .ssh/id_rsa.pub 192.168.192.138:/root/.ssh/authorized_keys

    浏览器上测试连接有没有问题,点击Test Configuration,如果没问题,左侧会显示Success,如下图
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    这就说明我们前面的配置是没问题的。点击应用,出现“已保存”。
    如果有多台web server ,可以继续新增,重复以上操作,最后点击保存。
  • 全局工具配置,并应用
    系统管理–>全局工具配置
    1. JDK配置 jenkins|自动化代码发布jenkins及其发送邮件
      文章图片
    2. Git配置 jenkins|自动化代码发布jenkins及其发送邮件
      文章图片
    3. maven配置 jenkins|自动化代码发布jenkins及其发送邮件
      文章图片
  • 新建任务
    回到首页,点击“新建一个任务”,自定义任务名称,选择“构建一个自由风格的软件项目”
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    将 github 上的该包部署到我们目标服务器。
    https://github.com/baijunyao/thinkphp-bjyblog 或
    https://github.com/baijunyao/thinkphp-bjyblog.git
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    描述自定义;源码管理选择Git(如果使用SVN就选择Subversion);Repository URL选择自己公共仓库的地址,这里为了方便我使用别人的公共仓库;Branches to build默认为*/master,意思是发布代码的分支为master分支;构建触发器和构建环境留空;构建选择Send files or execute commands over SSH,Name选择对应的服务器,Source files填入**/**,表示要发布的代码为全部文件,Remote directory填入/var/www/html/PHP集成环境开发/(自定义一个存放PHP代码的文件夹名),Remove prefix和Exec command可以留空。我这里Exec command填chown apache:apache -R /var/www/html
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    点击Add Server可以增加更多台服务器,在生产环境下通常也是多台服务器一起发布代码。
    点击构建后操作:
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片
    点击保存
    点击左侧立即构建,会出现构建历史,其中 #数字 表示第几次构建
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    点击#17,点击控制台输出
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    可以查看构建成功,通常构建完,不管是成功还是失败都会有邮件通知。这里因为没有配置邮件,所以没办法接收到邮件。
    到192.168.192.138上查看
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    和我们发布的源是一致的
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    如果在源上面做了变更,继续点击立即构建,如果构建成功,那么在目标机器上也可以看到变更的内容。
5. Jenkins邮件配置 系统管理–>系统设置,找到“邮件通知”进行配置,这里我使用的是qq邮箱
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

点击Test configuration,如果显示为“Email was successfully sent",说明邮箱配置成功
到qq邮箱查看是否收到刚刚测试的邮件
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

收到了,邮件配置成功。点击保存,进入到之前的任务中,点击配置。
找到构建后操作,选择E-mail Notification,Recipients这里填入接收邮件的邮箱地址。
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

勾选保持默认即可,点击保存
现在来测试,故意让构建不成功,看是否能接收邮件。
  1. 首先更改目标目录的权限,使之无法写入:
    [root@localhost ~]# rm -rf /var/www/html/php集成开发/* [root@localhost ~]# chattr +i /var/www/html/php集成开发

  2. 回到浏览器,点击立即构建,查看控制台输出:
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片
  3. 到qq邮箱进行查看:
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    邮件收到,邮箱配置成功。
    但这样有一点不好,只有构建失败才会发邮件提示,我想让它不管构建成功还是失败都发邮件提示。
6. 使用插件email-ext配置邮件 想让它不管构建成功还是失败都发邮件来提示,就必须要安装一个插件,该插件名字是Email Extension Plugin。如果你是按照上面步骤来的,那么该插件就已经安装。
系统管理–>插件管理,查看是否安装此插件,没有就安装。
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

系统管理–>系统设置–>Extended E-mail Notification
填写SMTP server,勾选Use SMTP Authentication,再填写User Name和Password,Password这里填邮箱授权码,然后SMTP port这里填25
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

往下拉,定位到Default Triggers,选择always,表示不管什么情况都会发邮件提示。之后再清空之前设置的邮箱通知,应用、保存即可
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

打开任务–>配置,删掉构建后操作的 E-mail Notification,点击增加构建后操作步骤,选择Editable Email Notification,在Project Recipient List那里添加自己的邮箱,然后点击Advanced Setting,定位到Triggers,可以在Add Trigger处增加发邮件的条件
jenkins|自动化代码发布jenkins及其发送邮件
文章图片

jenkins|自动化代码发布jenkins及其发送邮件
文章图片

现在来测试,看是否能接收邮件。
  • 先要改回目标目录原来的权限:
    [root@localhost ~]# chattr -i /var/www/html/php集成开发/

  • 回到浏览器,点击立即构建,查看控制台输出: jenkins|自动化代码发布jenkins及其发送邮件
    文章图片
  • 到qq邮箱进行查看:
    jenkins|自动化代码发布jenkins及其发送邮件
    文章图片

    邮件收到,邮箱配置成功。
破解管理员密码 如果我们不小心忘记了管理员密码,我们如何去修改回来呢?
两种方法
  1. 第一种方法:
    • 编辑admin配置文件
      [root@localhost ~]# cd /var/lib/jenkins/users/jenkins_4628250588555232866/ [root@localhost jenkins_4628250588555232866]# ls config.xml [root@localhost jenkins_4628250588555232866]# vim config.xml #找到这行,用下面一行替换掉原来的 #这样你的密码就会被重置为123456#jbcrypt:$2a$10$eJAMBW3qb/ijrFsSxkJnDOB747e0mFWSR03UmLCn96E4N7vL5BYzC

    • 重启服务,进入浏览器界面修改新的管理员密码
      [root@localhost ~]# systemctl restart jenkins.service

      回到浏览器界面,使用123456去登录
      jenkins|自动化代码发布jenkins及其发送邮件
      文章图片

      系统管理–>管理用户–> admin右侧设置齿轮图标,设置新的管理员密码,应用、保存即可
      jenkins|自动化代码发布jenkins及其发送邮件
      文章图片

      jenkins|自动化代码发布jenkins及其发送邮件
      文章图片
  2. 第二种方法:
    • 编辑jenkins的配置文件
    [root@localhost ~]# vim /var/lib/jenkins/config.xml#删除以下几行 true true true false#重启服务 [root@localhost ~]# systemctl restart jenkins.service

    • 使用浏览器登录http://192.168.192.137:8080/,直接进入工作台
      jenkins|自动化代码发布jenkins及其发送邮件
      文章图片

      系统管理–>管理用户–> admin右侧设置齿轮图标,设置新的管理员密码,应用、保存即可
      【jenkins|自动化代码发布jenkins及其发送邮件】接下就是设置密码,同上。

    推荐阅读