八、持续集成
今天周天,还想着跟室友一起去东门逛街买衣服呢,奈何这雨越下越大,趁这个等雨停的间隙做做笔记,那也是极好的
当然这个间隙是无法全部完成的啦,今天一整天都在下雨,但是不怕,形象更重要,为了能和美女一起约会,我也是拼啦,顶着大风大雨和室友穿梭在东门繁华的街道,这感觉简直啦哈哈哈,好啦不瞎扯啦
本节主要是按照我实际配置的步骤截图的方式来进行讲解的,所以有必要提前告知亲们:
前方多图预警,请做好充足流量的准备!!!
rain.gif连贯上一章末提到的,本章将会介绍几种在工作中使用到的持续集成工具,以及如何通过它们来实现项目的自动部署与持续集成
使用hudson进行持续集成
持续集成简单的说就是快速高效地自动进行项目构建,并为项目成员提供丰富的反馈信息
现如今比较热门的持续集成工具有hudson
与jenkins
,这小节主要对hudson
进行讲解
hudson与jenkins的恩恩怨怨
这里出于好奇,去百度了一下它们俩儿,结果发现它们之间还有些故事呢,Hudson
与jenkins
最开始两者本来是一家,之后由于某些原因弟兄间不合啦,于是jenkins
从hudson
中脱离出来形成开源独立的项目,hudson
有oracle
和sonatype corporate
的支持和hudson
的注册商标所以jenkins
独立出来之后不可能再叫hudson
啦,最后改名为jenkins
,而jenkins
拥有的是大多数的核心开发者、社区和后续更多的commit
,个人推荐的话还是用jenkins
,毕竟核心开发人员都在jenkins
这边,而且jenkins
保持持续更新,还有庞大的社区支持,有什么理由拒绝呢,但这里我还是从hudson
开始入门,后续会给出jenkins
的配置方式,其实他们两者都相差不大
安装hudson
Hudson
官网提供了多种系统的安装方式,这里我们通过war
包直接部署的方式安装hudson
,可以在官方网站:http://hudson-ci.org/
获取相关war
包
启动hudson
Hudson
提供的war
包有两种启动方式
直接命令启动war
可以通过java -jar hudson.war --httpPort=8083
命令启动,在hudson.war
内部提供了服务器支持
通过tomcat容器启动(推荐)
需要下载tomcat
,将war
放入tomcat/webapps
目录按照常规方式启动tomcat
即可,启动成功之后,可以在浏览器访问:http://localhost:8083/hudson
开始进入hudson
的天堂,这里的8083
是我配置的tomcat
运行的端口,具体在tomcat
根目录conf/server.xml
中配置
安装插件
我们想让hudson
能通过运行hudson
的tomcat7
自动构建war
和使用ssh
服务将项目部署到远程服务器,要实现这两种方式的部署,这需要我们为hudson
安装一些插件,下面是我安装的一些插件,其中最主要的是:
hudson git plugin
:用于向github
仓库获取项目源码
deploy container plugin
:发布项目到tomcat
publish over ssh
: 通过ssh
远程部署项目
hudson ssh plugin
: 使用ssh执行一些shell脚本
系统配置
在系统配置中我们需要完成jdk
,maven
,git
,gitplugin
,邮件通知,publish over ssh`` post-build actions[e-mail notification, send build artifacts over ssh]
下面我将逐一进行讲解
首先进入系统配置
jdk
jdk.pnggit
git.pngmaven
maven.png maven2.pnggitplugin
gitplugin.png邮件配置
email.png这里需要强调几句:
这里使用的密码是qq
邮箱提供的第三方客户端授权码,需要到qq
邮箱中获取,具体在qq
邮箱->设置->账户
端口为465
,不是22
,配置完成后点击右下角的测试按钮测试邮件配置正确性,如果正确将会受到一封测试邮件,如果配置失败,那悲剧了,你需要仔细检查你的配置,必须要确保可以成功发送一封测试邮件为止
Publish over ssh
配置ssh服务器.png这里要求远程主机安装ssh服务,我这里是ubuntu
系统,所以需要执行以下操作安装一个ssh server
apt-get install ssh-server
设置ssh server
可以使用root
用户登录(这里的root
用户其实就是ubuntu
系统的登录root
用户)
可以修改ssh服务的一些配置,通过下面的命令进行
vim /etc/ssh/sshd-config
设置PermitRootLogin yes
然后重启ssh server
服务
ssh
服务的启动,停止和重启
/etc/init.d/ssh start
/etc/init.d/ssh stop
/etc/init.d/ssh restart
可以设置ubuntu
在开启启动ssh
服务
vim /etc/rc.local
在exit 0
前添加
/etc/init.d/ssh start
然后需要到hudson
后台系统配置中添加ssh servers
,如上图配置,需要强调的是remote directory
表示远程主机的工作目录,这里指定为/usr/local/workspace
项目设置
上面到此hudson
系统配置已经完毕,下面我们要创建一个构建的项目任务
这里的
skip internal tag
表示hudson
每次构建成功后都在代码管理仓库中打一个tag
项目设置触发器设置.png
项目配置maven构建目标.png
这里需要说明的是,如果项目中配置了私服,这里可以使用deploy
,这样在每次构建的时候可以将项目发布到私服中,但如果没有设置私服仓库,那么就需要执行clean install
命令了
构建完成后发布项目到tomcat7
中
这里需要注意的是,container
配置了管理用户tomcat
,这里是在tomcat/conf/server.xml
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager,manager-script,manager-gui, admin-gui"/>
项目配置ssh配置.png
这里配置
ssh publishers
需要注意的是:source files
: 源项目war
包路径,它相对于hudson
工作目录(windows: C:\Users\Administrator\.hudson\jobs\account-parent\workspace
,linux:/root/.hudson/jobs/account-parent/workspace/
目录,这里是以root
用户安装的hudson
,所以是在root
用户的工作目录/root/
中)这里的
remote directory
是相对于之前系统配置中设置的ssh servers
的remote directory(/usr/local/workspace)
这里没有填写表示就是将source files
也就是account-web.war
发送到远程服务器/usr/local/workspace
目录下exec command
:表示当source files
上传到远程服务器指定目录之后执行的脚本命令,这里设置为/usr/local/workspace/tomcat7/bin/deploy.sh
这里设置的是全路径哦,而不是相对路径哦
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=$JAVA_HOME/bin
export HOME=/usr/local/workspace
export TOMCAT_HOME=$HOME/tomcat7
$TOMCAT_HOME/bin/shutdown.sh
sleep 3
rm -rf $TOMCAT_HOME/webapps/account-web*
mv $HOME/account-web.war $TOMCAT_HOME/webapps/
$TOMCAT_HOME/bin/startup.sh
echo “project republish successfully!”
使用jenkins进行持续集成
jenkins
启动方式与hudson
相同,也有两种:一种是通过java -jar
命令启动,还有一种是通过tomcat
容器启动,推荐第二种
启动后需要通过admin
用户对jenkins
进行初始化设置,在console
控制台中打印出了admin
用户的密码
构建过程中需要使用到的插件:
Gitlab Hook Plugin
GitLab Plugin
Gitlab Authentication plugin
:配置当gitlab
上有push
时进行构建,当然在build trigger
也可以配置周期性poll scm
,并设置周期检查时间:H/10 * * * *
表示每隔10
分钟检查一次代码更变
这里的
webhock
主要是跟上面配置的触发器有关,表示当gitlab
上代码一旦有push
就开发重新部署使用测试按钮将会出现顶上的配置成功的提示
deploy to container plugin
与hudson
相同配置(这里不推荐使用它,而是用ssh
)maven integration plugin
:配置一些maven属性,比如maven options: -Xms128m -Xmx512m
publish over ssh
: 采用ssh将构建部署到远程服务器,与hudson
配置相同献上sshwar包部署脚本
deploy.sh:
#!/bin/bash
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
HOME=/usr/local/workspace
WAR_HOME=${HOME}/war
TOMCAT_HOME=${HOME}/tomcat7-console-7777
PID=`ps aux | grep tomcat7-console-7777 | grep -v grep | awk '{print $2}'`
echo "kill tomcat7 console process"
kill -9 ${PID}
echo "move new war into tomcat"
rm -rf ${TOMCAT_HOME}/webapps/account*
cp ${WAR_HOME}/account-web.war ${TOMCAT_HOME}/webapps
echo "restart tomcat console process"
${TOMCAT_HOME}/bin/startup.sh
这里一定注意,不要添加&& tail -f logs/catalina.out
,这样会导致jenkins
获取不到构建成功部署的状态,因为交互而导致无法成功结束构建的问题
使用gitlab构建本地代码仓库
安装gitlab
- 到官网
https://packages.gitlab.com/gitlab/gitlab-ce
下载对应linux
版本的安装包,这里我用的是
# lsb_release
No LSB modules are available.
root@zhenglian-Lenovo-G470:/home/zhenglian# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
所以对应下载
gitlab-ce_9.4.3-ce.0_amd64.deb ubuntu/xenial
安装包
下载完成后,按照官方提供的安装步骤进行安装https://about.gitlab.com/installation/#ubuntu
# dpkg -i gitlab-ce-XXX.deb
完成后会出现下面的界面
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
gitlab: Thank you for installing GitLab!
gitlab: To configure and start GitLab, RUN THE FOLLOWING COMMAND:
sudo gitlab-ctl reconfigure
gitlab: GitLab should be reachable at http://zhenglian-Lenovo-G470
gitlab: Otherwise configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
gitlab: And running reconfigure again.
gitlab:
gitlab: For a comprehensive list of configuration options please see the Omnibus GitLab readme
gitlab: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
gitlab:
It looks like GitLab has not been configured yet; skipping the upgrade script.
配置和启动gitlab
# sudo gitlab-ctl reconfigure
完成之后会生成/etc/gitlab/gitlab.rb
配置文件,其中提供了访问的外部路径
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://zhenglian-Lenovo-G470'
因此我们可以通过在浏览器中输入http://zhenglian-Lenovo-G470
来访问gitlab
配置gitlab
访问地址
当然为了方便,也可以修改这个链接比如修改成http://192.168..1.105/gitlab
下面是官方文档给出的操作步骤:
- 关闭下面两个服务
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
- 修改
external_url
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.105/gitlab'
- 重新编译
gitlab
gitlab-ctl reconfigure
- 重启
gitlab
服务
gitlab-ctl retart
如此就可以通过http://192.168.1.105/gitlab
来访问本地gitlab
服务了
gitlab
启动之后会生成gitlab-ctl
命令,我们通过这个命令对gitlab
进行操作
gitlab-ctl help
查看帮助
gitlab-ctl restart
重启服务
配置gitlab
qq
邮箱或163
邮箱
qq
邮箱:
# qq email
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "736732419@qq.com"
gitlab_rails['smtp_password'] = "nojgatgoayldbcaa"
gitlab_rails['smtp_domain']="smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from']='736732419@qq.com'
163
邮箱:
# 163 email
gitlab_rails['time_zone']="Asia/Shanghai"
gitlab_rails['gitlab_email_enabled']=true
gitlab_rails['gitlab_email_from']="13637992082@163.com"
gitlab_rails['gitlab_email_reply_to'] = "13637992082@163.com"
gitlab_rails['gitlab_email_display_name'] = "GitLab"
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "13637992082@163.com"
gitlab_rails['smtp_password'] = "zhenglian123"
gitlab_rails['smtp_domain']="163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
配置完成后,需要重新编译:
gitlab-ctl reconfigure
gitlab-ctl restart
通过rails console
发送配置邮件
gitlab-rails console
rb(main):003:0>Notify.test_email('736732419@qq.com', 'Message Subject', 'Message Body').deliver_now
通过上面邮件设置后
需要注意的一点
gitlab9.4.2
设置项目protected branches
需要进入到branches
页面
在
project settings
超链接中进行权限设置比如设置分支push
权限,比如禁止直接将代码push
到master
分支等用户如果想收到
pull request
发送的邮件通知,需要完善用户profiles
添加正确邮箱即可,最后gitlab
会使用提交pull request
申请的人的邮箱发送merge
请求email
到review
用户邮箱
好啦,上面就是我在学习持续集成这章自己实际操作成功get
后做的笔记啦,希望对大家能有所帮助!!!