一、持续集成、持续交付、持续部署
- 持续集成
持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码变更经常反复地发生。
持续集成意味着一个在家用笔记本编写代码的开发人员大衡和另一个在办公室编程的开发人员
大林,可以为同样的产品分别地编写软件,将其改动整合在一个叫做源存储库的地方。他们可以从各自编写的部分构建出组合的软件,并且按照他们期望的方式来测试软件。
- 持续交付
持续交付意味着每次大衡或大林修改、整合和
构建代码时,也同时在类似于生产环境中自动测试了这段代码。我们通常将这个在不同环境发布和测试的过程叫做部署流水线。
通常部署流水线有一个开发环境,一个测试环境,一个准生产环境,但是这些阶段会根据不同的团队、产品和组织而变化。例如,Mingle 团队有一个阶段叫做“纸杯蛋糕”的准
生产环境,而 Etsy 的准生产环境叫做“公主”。
文章图片
在不同的环境下,大衡和大林写的代码被分别进行测试。当代码部署到生产环境它就开始了工作,这给予了他们更多的信心。并且只有当代码通过前一个环境的测试才会进入到下一个部署流水线的环境当中去。通过这种方式,大衡和大林将会从每个环境中测试并得到新的反馈,如果有失败,他们也可以在代码被应用到生产环境之前更加容易地发现问题并且修正它。
- 持续部署
大衡和大林所做的每个改动,都是通过测试环节,然后自动投入生产的实践过程。
文章图片
- jenkins是什么?
Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这
是一个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署
技术。Jenkins 是一种软件允许持续集成。
- jenkins的目的
- 持续、自动地构建/测试软件项目。
- 监控软件开放流程,快速问题定位及处理,提示开放效率。
- jenkins特性
- 开源的 java 语言开发持续集成工具,支持 CI,CD。
- 易于安装部署配置:可通过 yum 安装,或下载 war 包以及通过 docker 容器等快速实现安装部署,可方便 web 界面配置管理。
- 消息通知及测试报告:集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知,生成 JUnit/TestNG 测试报告。
- 分布式构建:支持 Jenkins 能够让多台计算机一起构建/测试。
- 文件识别:Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
- 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 git,svn,maven,docker
等。
最低配置:不少于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
文章图片
3. 打开浏览器,访问192.168.192.137:8080界面,并初始化jenkins
文章图片
选择“安装推荐的插件”
文章图片
等待全部插件都下载好,如下
文章图片
创建一个管理员,也可以使用默认的admin,密码查看:
cat /var/lib/jenkins/secrets/initialAdminPassword
文章图片
文章图片
文章图片
4. 发布PHP任务
- 查看插件
系统管理–>插件管理,“可选插件”是未安装的插件,“已安装”是已经安装的插件,其中勾选为灰色的是不可卸载的插件。
检查是否有“Git plugin”和“Publish over SSH”两个插件,如果没有,在“可选插件”中安装。发现“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 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
文章图片
然后新增“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 ,可以继续新增,重复以上操作,最后点击保存。
- 全局工具配置,并应用
系统管理–>全局工具配置
- JDK配置
文章图片
- Git配置
文章图片
- maven配置
文章图片
- JDK配置
- 新建任务
回到首页,点击“新建一个任务”,自定义任务名称,选择“构建一个自由风格的软件项目”
文章图片
文章图片
将 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上查看
文章图片
和我们发布的源是一致的
文章图片
如果在源上面做了变更,继续点击立即构建,如果构建成功,那么在目标机器上也可以看到变更的内容。
文章图片
文章图片
点击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集成开发
- 回到浏览器,点击立即构建,查看控制台输出:
文章图片
- 到qq邮箱进行查看:
文章图片
邮件收到,邮箱配置成功。
但这样有一点不好,只有构建失败才会发邮件提示,我想让它不管构建成功还是失败都发邮件提示。
系统管理–>插件管理,查看是否安装此插件,没有就安装。
文章图片
系统管理–>系统设置–>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集成开发/
- 回到浏览器,点击立即构建,查看控制台输出:
文章图片
- 到qq邮箱进行查看:
文章图片
邮件收到,邮箱配置成功。
两种方法
- 第一种方法:
- 编辑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去登录
文章图片
系统管理–>管理用户–> admin右侧设置齿轮图标,设置新的管理员密码,应用、保存即可
文章图片
文章图片
- 编辑admin配置文件
- 第二种方法:
- 编辑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/,直接进入工作台
文章图片
系统管理–>管理用户–> admin右侧设置齿轮图标,设置新的管理员密码,应用、保存即可
【jenkins|自动化代码发布jenkins及其发送邮件】接下就是设置密码,同上。
推荐阅读
- Jenkins|Jenkins-定时任务自动执行脚本并发送邮件
- 接口自动化|【0】Yapi与Jenkins持续集成基础汇总
- 持续集成|持续集成(Jenkins在Windows安装部署)
- jenkins|Jenkins持续集成部署详解
- tomcat|jenkins定时执行jmeter脚本文件发送邮箱生成测试报告
- #|docker-jenkins使用npm报错npm: command not found
- Jenkins自由风格项目构建
- docker|docker+gitlab+jenkins+sonarqube实现代码持续集成持续更新中。。。。。。
- java项目部署|Jenkins+Docker+Maven部署springboot项目