八、持续集成

今天周天,还想着跟室友一起去东门逛街买衣服呢,奈何这雨越下越大,趁这个等雨停的间隙做做笔记,那也是极好的
当然这个间隙是无法全部完成的啦,今天一整天都在下雨,但是不怕,形象更重要,为了能和美女一起约会,我也是拼啦,顶着大风大雨和室友穿梭在东门繁华的街道,这感觉简直啦哈哈哈,好啦不瞎扯啦

本节主要是按照我实际配置的步骤截图的方式来进行讲解的,所以有必要提前告知亲们:

前方多图预警,请做好充足流量的准备!!!

《八、持续集成》 rain.gif

连贯上一章末提到的,本章将会介绍几种在工作中使用到的持续集成工具,以及如何通过它们来实现项目的自动部署与持续集成

使用hudson进行持续集成

持续集成简单的说就是快速高效地自动进行项目构建,并为项目成员提供丰富的反馈信息
现如今比较热门的持续集成工具有hudsonjenkins,这小节主要对hudson进行讲解

hudson与jenkins的恩恩怨怨
这里出于好奇,去百度了一下它们俩儿,结果发现它们之间还有些故事呢,Hudsonjenkins最开始两者本来是一家,之后由于某些原因弟兄间不合啦,于是jenkinshudson中脱离出来形成开源独立的项目,hudsonoraclesonatype corporate的支持和hudson的注册商标所以jenkins独立出来之后不可能再叫hudson啦,最后改名为jenkins,而jenkins拥有的是大多数的核心开发者、社区和后续更多的commit,个人推荐的话还是用jenkins,毕竟核心开发人员都在jenkins这边,而且jenkins保持持续更新,还有庞大的社区支持,有什么理由拒绝呢,但这里我还是从hudson开始入门,后续会给出jenkins的配置方式,其实他们两者都相差不大

安装hudson

Hudson官网提供了多种系统的安装方式,这里我们通过war包直接部署的方式安装hudson,可以在官方网站:http://hudson-ci.org/获取相关war

《八、持续集成》 hudson官网.png

启动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通过tomcat运行.png

安装插件

我们想让hudson能通过运行hudsontomcat7自动构建war和使用ssh服务将项目部署到远程服务器,要实现这两种方式的部署,这需要我们为hudson安装一些插件,下面是我安装的一些插件,其中最主要的是:
hudson git plugin:用于向github仓库获取项目源码
deploy container plugin:发布项目到tomcat
publish over ssh: 通过ssh远程部署项目
hudson ssh plugin: 使用ssh执行一些shell脚本

《八、持续集成》 hudson插件列表.png

系统配置

在系统配置中我们需要完成jdkmavengit,gitplugin,邮件通知,publish over ssh`` post-build actions[e-mail notification, send build artifacts over ssh]
下面我将逐一进行讲解
首先进入系统配置

《八、持续集成》 hudson系统配置.png

jdk

《八、持续集成》 jdk.png

git

《八、持续集成》 git.png

maven

《八、持续集成》 maven.png
《八、持续集成》 maven2.png

gitplugin

《八、持续集成》 gitplugin.png

邮件配置

《八、持续集成》 email.png

这里需要强调几句:
这里使用的密码是qq邮箱提供的第三方客户端授权码,需要到qq邮箱中获取,具体在qq邮箱->设置->账户

《八、持续集成》 qq邮箱获取第三方授权码.png

端口为465,不是22,配置完成后点击右下角的测试按钮测试邮件配置正确性,如果正确将会受到一封测试邮件,如果配置失败,那悲剧了,你需要仔细检查你的配置,必须要确保可以成功发送一封测试邮件为止

《八、持续集成》 email1.png

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系统配置已经完毕,下面我们要创建一个构建的项目任务

《八、持续集成》 项目设置首页.png
《八、持续集成》 项目设置部署job设置.png
《八、持续集成》 项目设置部署job设置2.png

《八、持续集成》 项目设置源代码设置.png

这里的
skip internal tag表示
hudson每次构建成功后都在代码管理仓库中打一个
tag

《八、持续集成》 项目设置触发器设置.png
《八、持续集成》 项目配置maven构建目标.png

这里需要说明的是,如果项目中配置了私服,这里可以使用deploy,这样在每次构建的时候可以将项目发布到私服中,但如果没有设置私服仓库,那么就需要执行clean install命令了
构建完成后发布项目到tomcat7

《八、持续集成》 项目配置短信通知设置.png

这里需要注意的是,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用户的密码

《八、持续集成》 jenkins部署用户登录admin密码.png
《八、持续集成》 jenkins部署用户登录.png

构建过程中需要使用到的插件:
Gitlab Hook Plugin
GitLab Plugin
Gitlab Authentication plugin:配置当gitlab上有push时进行构建,当然在build trigger也可以配置周期性poll scm,并设置周期检查时间:H/10 * * * *表示每隔10分钟检查一次代码更变

《八、持续集成》 jenkins构建触发器.png

《八、持续集成》 jenkins设置gitlabwebhock.png

这里的
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

  1. 到官网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
下面是官方文档给出的操作步骤:

  1. 关闭下面两个服务
    sudo gitlab-ctl stop unicorn
    sudo gitlab-ctl stop sidekiq
  2. 修改external_url
    vim /etc/gitlab/gitlab.rb
    external_url 'http://192.168.1.105/gitlab'
  3. 重新编译gitlab
    gitlab-ctl reconfigure
  4. 重启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页面

《八、持续集成》 gitlab查看protected branches.png


project settings超链接中进行权限设置比如设置分支
push权限,比如禁止直接将代码
push
master分支等

用户如果想收到
pull request发送的邮件通知,需要完善用户
profiles添加正确邮箱即可,最后
gitlab会使用提交
pull request申请的人的邮箱发送
merge请求
email
review用户邮箱

好啦,上面就是我在学习持续集成这章自己实际操作成功get后做的笔记啦,希望对大家能有所帮助!!!

    原文作者:小炼君
    原文地址: https://www.jianshu.com/p/6181bbdfcc93
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞