Jenkins+Gitlab
Jenkins+Gitlab
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。
这是一个免费的源代码,可以处理任何类型的构建或持续集成。
集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。Jenkins 安装在一台服务上也中央构建发生的地方。
当每月发布次数变得越来越多时,如超过 200 次,发布工作人员的工作量会翻倍,此时由人工发布操作失误引起的风险会变得越来越大。
为了提高项目的发布效率,也为了降低由人工操作失误带来的风险,需要引进持续集成工具。
Jenkins 是一个用 Java 语言编写的开源持续集成工具,最开始被称作 Hudson。
Jenkins 在持续集成领域市场份额中居于主导地位,被各种大小规模的团队用于用各种语言实现的各类项目中,语言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。
选择 Jenkins 的理由如下:
• 易于使用:Jenkins 的用户界面简单、直观、友好,发布工作人员只需要通过简单的 UI 操作就可以替代原来繁琐的发布工作。
• 拥有良好的扩展性:提供数以百计的开源插件可供使用,而且几乎每周会有新的开源插件贡献进来,这些插件的安装都十分快捷和简单。
• 发展良好:Jenkins 开源社区的规模变得越来越大、活跃度也变得越来越高,发展速度非常快。
GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。
这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮助开发团队更高效的集成和发布代码
Jenkins部署
一.实验环境
操作系统: CentOS7.3
jdk版本: 1.8
jenkins版本: 2.164
gitlab版本: 10.8.7
maven版本: 3.5.4
appserver: 192.168.10.21
jenkins: 192.168.10.22
gitlab: 192.168.10.23
二.安装运行
配置java环境
[root@jenkins jenkins]# tar xf jdk-8u181-linux-x64.tar.gz
[root@jenkins jenkins]# mv jdk1.8.0_181/ /usr/local/java
[root@jenkins jenkins]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
[root@jenkins jenkins]# . /etc/profile.d/java.sh
[root@jenkins jenkins]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
rpm安装jenkins
[root@jenkins jenkins]# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
[root@jenkins jenkins]# rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
[root@jenkins jenkins]# yum install -y jenkins
# wget https://mirrors.aliyun.com/jenkins/redhat-stable/jenkins-2.249.1-1.1.noarch.rpm
完成后可配置jenkins的端口,打开/etc/sysconfig/jenkins文件进行配置
运行jenkins
如果是采用以上方法安装的java,需要修改配置文件
[root@jenkins jenkins]# vim /etc/sysconfig/jenkins
JENKINS_JAVA_CMD="/usr/local/java/bin/java"
[root@jenkins jenkins]# systemctl start jenkins
[root@jenkins jenkins]# netstat -tanp |grep java
tcp6 0 0 :::8080 :::* LISTEN 2361/java
安装Maven
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具
Maven采用纯Java编写, 它采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。
软件下载: http://maven.apache.org/
[root@jenkins jenkins]# tar xf apache-maven-3.5.4-bin.tar.gz
[root@jenkins jenkins]# mv apache-maven-3.5.4 /usr/local/maven3.5
[root@jenkins jenkins]# cat /etc/profile.d/maven.sh
export MAVEN_HOME=/usr/local/maven3.5
export PATH=$MAVEN_HOME/bin:$PATH
[root@jenkins jenkins]# . /etc/profile.d/maven.sh
[root@jenkins jenkins]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3.5
Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"
安装git
yum install -y git #注意git版本不要低于1.7
三.系统配置
服务启动后,使用浏览器访问http://jenkins-ip:8080
1.初始化配置
1).根据提示解锁jenkins
2).安装插件,安装推荐的就好
3).创建管理员帐户
插件目录:
[root@master jenkins]# ls /var/lib/jenkins/plugins/
上面第2)步问题:
提示我已经离线,这是有问题的,虽然可以离线安装,但是我们这里最好还是选择在线安装:
解决上述问题方法:
1) 修改/var/lib/jenkins/updates/default.json
jenkins在下载插件之前会先检查网络连接,其会读取这个文件中的网址。默认是:
访问谷歌,这就很坑了,服务器网络又不能FQ,肯定监测失败呀,所以将图下的google改为www.baidu.com即可,更改完重启服务。
2) 修改/var/lib/jenkins/hudson.model.UpdateCenter.xml
该文件为jenkins下载插件的源地址
改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json,就是因为https的问题,此处我们将其改为http即可,之后重启jenkins服务即可。
其他国内备用地址(也可以选择使用):
插件
按自己的需求安装相应的插件,如果缺少什么功能一般是少了某个插件,具体哪个可以百度,然后在系统设置->插件管理进行安装
介绍几个可能会用的比较多的插件
Git 和git相关的
Git Parameter Plug-In 和git分支有关的,默认是master,生产应该不太现实,可能会用到
Gitlab 用于 push 到Gitlab 触发自动构建
SSH Plugin 可以通过ssh执行远程命令
Ansible 和ansible相关,没用过
Gradle 安卓代码打包用到的组件,可以生成apk
Email Extension 邮件扩展功能,jenkins自带的邮件功能太简单了,这个可以做很多配置
Safe Restart Plugin 可以在主界面有一个重启的按钮 Restart Safely
Workspace Cleanup 可以在删除项目工作区
如果有某个插件在插件管理找不到,可以在http://updates.jenkins-ci.org/download/plugins/ 下载
下载完成后在这个地方上传: 系统管理--插件管理--Advanced
2.系统管理->插件管理:
安装Publish over SSH插件及Maven Integration插件,后续用到
3.系统管理->系统设置-环境变量-新增,设置编码为UTF-8
键:LANG 值:zh_CN.UTF-8
4.系统管理->系统设置->publish over ssh :配置Publish over SSH远程机器的密钥和IP地址
5、系统管理->全局工具配置
配置jdk,git和maven,取消勾选自动安装
配置好之后点保存,基本配置完成
向GitLab中push项目
在配置好的gitlab上push一个测试项目:
# git clone https://github.com/bingyue/easy-springmvc-maven.git 构建成功后会生成war包
# cd easy-springmvc-maven/
# git remote -v
origin https://github.com/bingyue/easy-springmvc-maven.git (fetch)
origin https://github.com/bingyue/easy-springmvc-maven.git (push)
# git remote add my-gitlab git@192.168.10.23:maven-test/maven-proj.git
# git remote -v
my-gitlab git@192.168.10.23:maven-test/maven-proj.git (fetch)
my-gitlab git@192.168.10.23:maven-test/maven-proj.git (push)
origin https://github.com/bingyue/easy-springmvc-maven.git (fetch)
origin https://github.com/bingyue/easy-springmvc-maven.git (push)
# git push my-gitlab master
Counting objects: 45, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (38/38), done.
Writing objects: 100% (45/45), 7.79 KiB | 0 bytes/s, done.
Total 45 (delta 9), reused 0 (delta 0)
To git@192.168.10.23:maven-test/test.git
* [new branch] master -> master
在jenkins web上配置jenkins连接gitlab
有许多第三方网站和应用程序可以与 Jenkins 进行交互,例如程序代码仓库,云存储系统和服务等。
此类应用程序的系统管理员可以在应用程序中配置凭证以专供 Jenkins 使用。通常通过将访问控制应用于这些凭证来完成这项工作,以“锁定”Jenkins可用的应用程序功能区域。一旦 Jenkins 管理员(即管理 Jenkins 站点的 Jenkins 用户)在 Jenkins 中添加/配置这些凭证,Pipeline 项目就可以使用凭证与这些第三方应用程序进行交互
1.凭据 -> 系统 -> 添加域
点击确定就创建好了,这个私钥是和传到gitlab服务器上的公钥一对的
创建一个任务
源码管理选择Git,jenkins会检测与gitlab仓库的连接情况
如果连接有问题:
如果没有连接没有问题:
配置构建完成后将文件传到远程服务器上并在远程服务器上执行脚本
点击保存
然后点击立即构建
构建成功后的包存放在/var/lib/jenkins/workspace/项目名/target下
构建完成后会将生成的target/*.war通过ssh传到远程服务器的工作目录,并执行事先写好的脚本,可完成自动发布
构建触发器: 用于触发jenkins自动构建
1. 定时构建(Build periodically)
此时的定时构建是时间到达日程表所设置的时间后,就开始构建。此时不管前面源码管理处设置的分支是上的内容是否有变化都会开始构建。
例如:在日程表的白框里填写H/30 * * * *,表示每隔30分钟构建一次。
2. 轮循 SCM (Poll SCM)
这个也是定时构建,但不同的是在达到所设置的时间后,系统会去查询设置的远程仓库是否有变化,有变化才构建。
例如:在日程表的白框里填写H/30 * * * *,表示每隔30分钟就检测一下远程仓库是否有变化,有变化就开始构建,没有变化则不构建。
3. Push事件触发
每当有人向GitLab仓库某分支(一般为master)成功的push代码时,立即触发构建。
选择"Build when a change is pushed to GitLab"这个选项。
在此介绍第三种情况
本例项目为spring
1. 安装GitLab插件
2. 安装好后在项目配置中找到构建触发器,可以看到增加了一个触发器
3.高级---钩选进入配置
设置需要跟踪变化的分支,根据上面的选项配置,可以是允许全部分支的变化触发构建,也可以设置只是具体的某些分支触发,这里示例是允许master分支上的变化触发构建
4.生成token:点击generate,会生成一个token
5.要想Gitlab上仓库有push事件发生时触发构建,还需要进一步的设置:
1).登录管理员帐号(root),设置允许请求钩子:
2).在Gitlab上找到要自动构建的项目,点击左侧边栏的 Settings -> Integrations
然后点击 add webhook按钮保存,这样,有人成功push代码到了项目的master分支就会触发jenkins自动构建
github+jenkins
触发远程构建:
需要匿名用户的可读权限
或者
参数--脚本
连接触发器
归档