搭建Gitlab+maven+jenkins持续集成环境

有什么用?

为什么需要持续集成呢?

1.因为在开发的过程中,用于阶段性地构建出产品。
这样可以更加清楚地审视产品的不足之处
2.由于在某些情况下,例如有紧急bug的时候,研发的版本更新可能很频繁,
部署持续集成环境,可以减少每次部署所花费的时间

化整为零:

1.这套组合可以分成源码管理编译构建远程部署
2.源码管理常见的有gitlabSVN
3.编译构建是针对编译型语言的。
此处针对Java语言使用Maven针对IOS则是使用其他编译工具。
4.远程部署由jenkins提供。

实验拓扑

主机名 主机地址 角色
node1 192.168.31.201 Gitlab-8.17.3
node2 192.168.31.202 Maven-3.3.9、Jenkins-2.49、Git-2.12.0、JDK1.8
node4 192.168.31.204 tomcat9

安装Gitlab

Gitlab的作用:作为源码管理的角色。
Gitlab实际上是整合了nginx、git等多种软件提供了一个可视化的界面。
包含git命令的基本功能,但相比于git命令更加简单易用。

1.信任 GitLab 的 GPG 公钥:
[root@bc ~]# curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
2.配置一个清华大学的yum源
[root@bc ~]# vim /etc/yum.repos.d/gitlab-ce.repo
  [gitlab-ce]
  name=gitlab-ce
  baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
  repo_gpgcheck=0
  gpgcheck=0
  enabled=1
  gpgkey=https://packages.gitlab.com/gpg.key

不得不说,清华大学的源速度很快,感觉节约了好多生命。

3.安装gitlab和必要的依赖
[root@bc ~]# yum makecache
[root@bc ~]# yum install gitlab-ce
[root@bc ~]# yum install curl policycoreutils openssh-server openssh-clients
[root@bc ~]# systemctl enable sshd
[root@bc ~]# systemctl start sshd
[root@bc ~]# yum install postfix
[root@bc ~]# systemctl enable postfix
[root@bc ~]# systemctl start postfix
4.初始化gitlab
[root@bc ~]# gitlab-ctl reconfigure
5.找到应该访问的地址
[root@bc .ssh]# vim /etc/gitlab/gitlab.rb
  external_url 'http://node1.bc.com'

注意:
如果直接访问192.168.31.201,只能访问到一个空的nginx访问页面。
所以,最好能够使用域名解析来访问本地的gitlab网站。

或者修改host文件:
C:\Windows\System32\drivers\etc\hosts
  192.168.31.201 node1 node1.bc.com bc.com
正常访问页面:
使用域名访问
错误访问的页面:
直接访问ip地址会这样!

安装maven

Maven的作用:Maven负责java语言的编译和打包
换个角度来说,Maven相当于Java中的make命令。
同类型的工具有Ant,但是Ant不提供解决依赖关系的功能

官方地址:
http://maven.apache.org/
1.获取安装包:还是清华的镜像。
[root@node2 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
2.解压tar包
[root@node2 ~]# tar apache-maven-3.3.9-bin.tar.gz -C /bin/apache-maven-3.3.9/ 
[root@node2 ~]# ln -sv /bin/apache-maven-3.3.9/ /bin/maven
3.定义变量,输出执行路径
[root@node2 ~]# vim /etc/profile.d/maven.sh
  export M2_HOME=/bin/maven
  export MAVEN_HOME=/bin/maven
  PATH=$M2_HOME/bin:$PATH
[root@node2 ~]# source /etc/profile.d/maven.sh
4.测试能否正常运行
[root@node2 ~]# mvn -v
  Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
  Maven home: /bin/maven
  Java version: 1.8.0_111, vendor: Oracle Corporation
  Java home: /usr/java/jdk1.8.0_111/jre
  Default locale: en_US, platform encoding: UTF-8
  OS name: "linux", version: "3.10.0-229.el7.x86_64", arch: "amd64", family: "unix"

安装jenkins

JENKINS的功能:
1.通过git命令从Gitlab中拉取源码
2.让maven进行编译并打包
3.把打好的包发送到目标主机
4.执行部署脚本。

1.获取安装包
#安装方式有多种,包括rpm、war包启动、dockerfile。此处为war包。
[root@node2 ~]# wget http://mirrors.jenkins.io/war/latest/jenkins.war
2.启动方式
#方法1:直接使用jvm启动
[root@node2 ~]# java -jar jenkins.war

#方法2:把war包放置到tomcat的应用目录并启动,让其自动解压
[root@node2 ~]# cp jenkins.war /usr/local/tomcat/webapps/
[root@node2 ~]# startup.sh

如果下载lts版提示找不到cloudbees-folder,下载weekly版的
stackOverFlow说初始化jenkins的时候提示找不到cloudbees-folder是bug

编译安装新版的git

提示:Maven、Git、JDK都是安装到jenkins服务器
在往后的设置中,需要在jenkins中指定他们的路径。

1.获取源码包

[root@node2 ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.12.0.tar.gz
`注意:为了能让jenkins能正常从gitlab中拉取源码,需要编译1.9以上的版本。`
2.git构建时,需要的环境
[root@node2 ~]# yum groupinstall "Development Tool"
[root@node2 ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker openssh-clients
`除了正常的编译环境之外,编译git的时候还要额外安装各种devel包。否则会构建失败。`
3.编译并安装,同时输出执行路径到环境变量中:
[root@node2 ~]# make prefix=/usr/local/git all 
[root@node2 ~]# make prefix=/usr/local/git install 
[root@node2 ~]# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
[root@node2 ~]# source /etc/bashrc
4.验证能否正常运行:
[root@node2 ~]# git --version

五、在jenkins上完成配置

1.指定Maven、Git、JDK的安装路径
整合工具
指定JDK和Git路径
指定Maven路径
2.为Jenkins安装配件:
jenkins-安装插件

需要安装的插件:

Gitlab Plugin
#安装之后才可以在系统配置中指定gitlab的IP地址
Git Plugin 
Git Client Plugin 
#用于jenkins在gitlab中拉取源码
Publish Over SSH 
#用于通过ssh部署应用
Maven Integration plugin
#用于新建maven项目

注意 : 安装了插件之后,在全局配置才能详细配置。

3.为刚才安装的插件,配置选项(留意图片下的注释)
Jenkins全局设定
配置Gitlab的地址,红字表示需要Gitlab的账号密码,但是这个可以在新建项目的时候指定。
Publish_over_SSH插件,可以使用Path to key指定jenkins主机的私钥路径,也可以如上。 注意:部署应用的主机需要jenkins主机的公钥,可以ssh-copy-id命令复制过去。
配置部署应用的主机的IP地址

在jenkins上新建项目

注意:安装了Maven Integration plugin才可以创建maven项目
刚才红字提示Gitlab的账号密码在这里可以配置
这一步很重要!!! 它包括了两个步骤: 1.发送编译好的war包到目标主机,此处为tomcat。 2.在发送war包之后,执行自己写的脚本,部署新的应用到服务器上。

上传代码到gitlab

1.配置主机SSH_KEY公钥到gitlab上
用于无密码直接把代码git push到gitlab上
2.初始化本地git目录、并添加远程仓库
[root@node2 javaCode]# git init
[root@node2 javaCode]# git remote add origin git@bc.com:root/HelloWorld-public.git
3.上传代码
[root@node2 javaCode]# git add .
[root@node2 javaCode]# git commit -m "2nd Commit"
[root@node2 javaCode]# git push origin master
4.本地的目录结构
#注意pom.xml文件要放在根目录下,maven编译的时候会自动读取。
[root@node2 javaCode]# tree 
.
├── pom.xml
└── src
    ├── Greeter.java
    └── HelloWorld.java

构建项目

进入新建的项目中
注意事项:

1.进入之前创建的项目中,点立即构建可以通过maven进行编译。
2.编译结束后在工作区中,可以找到编译好的jar包
3.左下角形如#8的链接是构建过程中的输出,可以协助排错。

查看输出的最后:
SSH: Disconnecting configuration [tomcat] ...
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,002 ms]
Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE
Finished: UNSTABLE

结合图例并查看输出,可以知道: 1.黄色为编译成功。 2.部署脚本出了点意外,所以是黄色不稳定。

构建成功,部署成功之后,图例是蓝色的。 云朵是用来统计构建成功和构建失败的比例。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容