持续集成
持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码变更经常反复地发生。
持续集成意味着一个在家用笔记本编写代码的开发人员大衡和另一个在办公室编程的开发人员
大林,可以为同样的产品分别地编写软件,将其改动整合在一个叫做源存储库的地方。他们可以从各自编写的部分构建出组合的软件,并且按照他们期望的方式来测试软件。
持续交付
持续交付意味着每次大衡或大林修改、整合和
构建代码时,也同时在类似于生产环境中自动测试了这段代码。我们通常将这个在不同环境发布和测试的过程叫做部署流水线。
通常部署流水线有一个开发环境,一个测试环境,一个准生产环境,但是这些阶段会根据不同的团队、产品和组织而变化。例如,Mingle 团队有一个阶段叫做“纸杯蛋糕”的准
生产环境,而 Etsy 的准生产环境叫做“公主”。
在不同的环境下,大衡和大林写的代码被分别进行测试。当代码部署到生产环境它就开始了工作,这给予了他们更多的信心。并且只有当代码通过前一个环境的测试才会进入到下一个部署流水线的环境当中去。通过这种方式,大衡和大林将会从每个环境中测试并得到新的反馈,如果有失败,他们也可以在代码被应用到生产环境之前更加容易地发现问题并且修正它。
jenkins是什么?
Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这
是一个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署
技术。Jenkins 是一种软件允许持续集成。
jenkins的目的
jenkins特性
环境预设:
最低配置:不少于256M内存,不低于1G磁盘,JDK版本>=1.8(使用openjdk-1.8以上也可以)
环境准备:
192.168.192.137
#查看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
[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
选择“安装推荐的插件”
等待全部插件都下载好,如下 创建一个管理员,也可以使用默认的admin,密码查看:
cat /var/lib/jenkins/secrets/initialAdminPassword
查看插件
系统管理–>插件管理,“可选插件”是未安装的插件,“已安装”是已经安装的插件,其中勾选为灰色的是不可卸载的插件。
检查是否有“Git plugin”和“Publish over SSH”两个插件,如果没有,在“可选插件”中安装。发现“Publish over SSH”没有,安装它。
配置插件
系统管理–系统设置,找到刚刚安装的插件“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 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+o . .oo=+ |
|. . E o*. . |
| . ..o+ . |
| o . X.oo |
| +o.o B S |
|.+o. + * + |
|... . o + |
|o o .o o |
|o=+=. |
+----[SHA256]-----+
#查看私钥并复制
[root@localhost ~]# cat .ssh/id_rsa
然后新增“SSH Servers”,填入对应的hostname,这就是PHP代码要发布的机器
#接下来还需要把公钥拷贝到对应的hostname机器上
[root@localhost ~]# scp .ssh/id_rsa.pub 192.168.192.138:/root/.ssh/authorized_keys
浏览器上测试连接有没有问题,点击Test Configuration,如果没问题,左侧会显示Success,如下图
这就说明我们前面的配置是没问题的。点击应用,出现“已保存”。
如果有多台web server ,可以继续新增,重复以上操作,最后点击保存。
全局工具配置,并应用
系统管理–>全局工具配置
新建任务
回到首页,点击“新建一个任务”,自定义任务名称,选择“构建一个自由风格的软件项目”
将 github 上的该包部署到我们目标服务器。
https://github.com/baijunyao/thinkphp-bjyblog 或
https://github.com/baijunyao/thinkphp-bjyblog.git
描述自定义;源码管理选择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
点击Add Server可以增加更多台服务器,在生产环境下通常也是多台服务器一起发布代码。
点击构建后操作:
点击保存
点击左侧立即构建,会出现构建历史,其中 #数字 表示第几次构建
点击#17,点击控制台输出
可以查看构建成功,通常构建完,不管是成功还是失败都会有邮件通知。这里因为没有配置邮件,所以没办法接收到邮件。
到192.168.192.138上查看
和我们发布的源是一致的
如果在源上面做了变更,继续点击立即构建,如果构建成功,那么在目标机器上也可以看到变更的内容。
系统管理–>系统设置,找到“邮件通知”进行配置,这里我使用的是qq邮箱
点击Test configuration,如果显示为“Email was successfully sent",说明邮箱配置成功
到qq邮箱查看是否收到刚刚测试的邮件
收到了,邮件配置成功。点击保存,进入到之前的任务中,点击配置。
找到构建后操作,选择E-mail Notification,Recipients这里填入接收邮件的邮箱地址。
勾选保持默认即可,点击保存
现在来测试,故意让构建不成功,看是否能接收邮件。
[root@localhost ~]# rm -rf /var/www/html/php集成开发/*
[root@localhost ~]# chattr +i /var/www/html/php集成开发
想让它不管构建成功还是失败都发邮件来提示,就必须要安装一个插件,该插件名字是Email Extension Plugin。如果你是按照上面步骤来的,那么该插件就已经安装。
系统管理–>插件管理,查看是否安装此插件,没有就安装。
系统管理–>系统设置–>Extended E-mail Notification
填写SMTP server,勾选Use SMTP Authentication,再填写User Name和Password,Password这里填邮箱授权码,然后SMTP port这里填25
往下拉,定位到Default Triggers,选择always,表示不管什么情况都会发邮件提示。之后再清空之前设置的邮箱通知,应用、保存即可
打开任务–>配置,删掉构建后操作的 E-mail Notification,点击增加构建后操作步骤,选择Editable Email Notification,在Project Recipient List那里添加自己的邮箱,然后点击Advanced Setting,定位到Triggers,可以在Add Trigger处增加发邮件的条件
现在来测试,看是否能接收邮件。
[root@localhost ~]# chattr -i /var/www/html/php集成开发/
如果我们不小心忘记了管理员密码,我们如何去修改回来呢?
两种方法
第一种方法:
[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去登录第二种方法:
[root@localhost ~]# vim /var/lib/jenkins/config.xml #删除以下几行
true
true
true
false
#重启服务
[root@localhost ~]# systemctl restart jenkins.service