搭建GitLab+Jenkins持续集成环境图文教程

GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,帮组开发团队更高效的集成和发布代码。

这里写图片描述

下面是我最近安装GitLab+Jenkins环境的一个过程,记录下来,以备日后参考。

另外,这篇文章虽然很长,讲得很琐碎,但是仍有未能描述清楚的地方,如果按照这篇文章未能搭建成功,请耐心分析,也可从官方文档 找找灵感,继续下去总会成功的。

环境

本文将在单机上搭建一个GitLab+Jenkins环境,两者分别使用不同的端口,操作系统是ubuntu 16,其它系统可去官网找教程。

安装GitLab

这里参照官网安装教程,命令和官网是一样的,不过有些地方有特殊说明,所以,可以直接参照本小节来安装。

1、安装GitLab依赖

sudo apt-get install curl openssh-server ca-certificates postfix

注意,在安装postfix的时候,选择“internet site”:

这里写图片描述

然后,“system mail name”填写你的服务器的IP地址(下面这张图只是):

这里写图片描述

为什么要填IP地址呢?
这是因为,如果自己手上没有已注册的域名的话,随便填写一个域名是解析不了的。而这里填写的域名对GitLab影响很大,比如我这里随便填为“qsjn.com”,那我在GitLab中创建的项目默认就会使用“git@qsjn.com”这样的地址,这就会带来不必要的麻烦。但是,如果你真的有注册域名的话,还是建议填写你的注册域名。

2、下载和安装GitLab

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo apt-get install gitlab-ee

3、配置GitLab

GitLab默认会占用8080809090端口,很不巧,Jenkins默认也会使用8080端口,所以,这一步操作将会修改GitLab的默认端口为110001100111002,如果你还是希望使用默认端口的话,可以跳过这一步。

sudo vi /etc/gitlab/gitlab.rb

(1)将

external_url 'http://127.0.0.1'

修改为:

external_url 'http://<你的服务器地址或域名>:11000'

(2)将

  # unicorn['port'] = 8080

修改为:

  unicorn['port'] = 11001

(3)将

#prometheus['listen_address'] = 'localhost:9090'

修改为:

prometheus['listen_address'] = 'localhost:11002'

4、生效配置和启动GitLab

因为我们修改了配置,所以使用reconfigure命令重新配置

sudo gitlab-ctl reconfigure

另外说明一下,平时未修改配置的话,可以使用:

sudo gitlab-ctl start/stop

来启动和关闭GitLab.

至此,GitLab安装完毕

使用GitLab创建一个项目

1、打开http://<你的服务器IP>:<11000>,登录进去(详见下面),点击new group创建一个项目组,信息可以自己看着填,没有关系

这里写图片描述

打开http://<你的服务器IP>:<11000>,会弹出一个设置初始密码的界面,按照要求输入初始密码,就会跳转到登录页面。gitlab管理员用户名为root

2、接着在项目组里面创建一个项目,项目的信息自己看着填,没有关系

这里写图片描述

3、新建的项目都会有操作提示,如果对git不熟悉的话,建议简单记一下,特别是global setting , 本文后面会用到:

这里写图片描述

安装Jenkins

本节参考了官方安装教程,但会修改默认端口

1、下载Jenkins
这里使用一个国内的源,速度会快一点,2017年7月左右更新的,现在已经不是最新版,不过装好之后也可以在界面上进行升级:

curl -O http://static.outsidelook.cn/software/jenkins/jenkins.war

或者也可使用官方的下载地址,不过可能会慢一点:

curl -O http://mirrors.jenkins.io/war-stable/latest/jenkins.war

2、运行Jenkins

sudo nohup java -jar  jenkins.war --httpPort=12000 &

这里将jenkins的端口修改成12000,并且使用后台模式运行

至此,Jenkins安装成功,可以用浏览器打开http://<服务器ip>:12000访问,然后按照jenkins的提示一步步走就可以了。

打开http://<服务器ip>:12000,首先弹出一个界面,需要你填自动生成的初始密码,界面上有教程,执行sudo vi /root/.jenkins/secrets/initialAdminPassword就看到了

安装和Git,GitLab插件

用浏览器打开Jenkins,点击“系统设置”

这里写图片描述

点击“插件管理”

这里写图片描述

切换到“可选插件”,分别搜索“GitLab Plugin”和“Git Plugin”,然后点击“直接安装”。如果在“可选插件”里没有搜到,可能默认你已经安装了,可以在“已安装”里查看

这里写图片描述

安装完会显示:

这里写图片描述

配置GitLab插件

打开GitLab,点击“setting”——“Account”,复制“Private token”备用,如下所示:

这里写图片描述

打开Jenkins,点击“系统管理”——“系统设置”,如下所示:

这里写图片描述

点击“配置”下拉框,点击“Gitlab”选项,如下所示:

这里写图片描述

配置GitLab,”Connection Name”随便填,“Git Host URL”填GitLab的访问地址,然后点“Add”——“jenkins”,如下所示:

这里写图片描述

在弹出框里,“kind”选择“GitLab API Token”,将先前复制的“Private token”粘贴到“API token”输入框中,然后点击“Add”,如下所示:

这里写图片描述

选择刚刚新建的“Credentials”,如下所示:

这里写图片描述

设置完了,要测试一下能否连接成功,点击“test connection”,要看到返回“Success”才行,如下所示:

这里写图片描述

然后点击页面底下的“apply”,再点击“save”,如下所示:

这里写图片描述

配置Git插件

打开Jenkins,点击“系统管理”——“系统设置”

这里写图片描述

点击“配置”下拉框,选择“Git plugin”选项

这里写图片描述

设置Git插件的全局配置,然后点击“apply”——“save”

这里写图片描述

全局配置就是上文“Gitlab创建项目”部分讲到的global setting ,在项目第一次commit前,这些信息都可以在GitLab的项目的首页里找到

创建一个Jenkins Job

在jenkins里,一个任务叫做一个job。一般我们的项目会有多个分支,比如开发分支和产品分支,我们可以对每一个分支都新建一个job,比如,我们对开发分支创建一个测试的job,每次有代码提交就自动运行一次测试,对产品分支创建一个打包的job,每次有代码提交就运行打包任务。

不过在这里,我们只是单纯的创建一个job,来演示jenkins自动运行任务的过程。首先,点击“创建一个新任务”

这里写图片描述

“item name”可以随便起,然后点击“构建一个自由风格的软件项目”

这里写图片描述

点击“OK”

这里写图片描述

至此,创建一个Job成功了

生成访问Gitlab的ssh秘钥

打开 GitLab,点击右上角的“setting”—— SSH Keys,就可以进入到添加界面,如下所示:

这里写图片描述

然后按照下面的教程生成SSH Key,并将公钥粘贴到“Key”里,name可以随便起,但最好能一看就知道是某个人或某台机器。此外,点击“generate it”链接可以看到官方的教程。

从gitlab以SSH方式拉取或提交代码需要用到这个SSH 秘钥,哪台机器需要从gitlab上拉取代码,就在哪台机器上生成一次SHH Key,因此,在jenkins服务器上,以及你的开发PC上,都需要生成SSH密钥。

下面分别贴出在windows下和在ubuntu下生成ssh密钥的步骤,按照你实际的操作系统进行操作:

windows下生成SSH密钥的步奏

(1) 安装git

(2) 在任意文件夹—右键—点击“Git Bash Here”

(3) 在Git Bash中运行:

ssh-keygen -t rsa -C "<填写一些文字作为注释,方便管理>" -b 4096

接下来全部按 Enter 使用默认值(当然也可以设置密码,详见下面备注),这会生成一对公钥和私钥:

这里写图片描述

如果这里你在Enter passphrase后面输入的密码,则以后每次提交代码到gitlab都需要输入这个密码,这样当然更加安全,不过也颇为繁琐。所以,这里就使用默认值,也就是无密码。

(4) 复制公钥到粘贴板

cat ~/.ssh/id_rsa.pub | clip

(5) 回到添加SSH Key的界面,将公钥粘贴到其中,然后点击“add key”

ubuntu下生成SSH密钥的步奏

(1) 运行:

ssh-keygen -t rsa -C "<填写一些文字作为注释,方便管理>" -b 4096

全部按 Enter 使用默认值(当然也可以设置密码,详见下面备注),这会生成一对公钥和私钥:

这里写图片描述

如果这里你在Enter passphrase后面输入的密码,则以后每次提交代码到gitlab都需要输入这个密码,这样当然更加安全,不过也颇为繁琐。所以,这里就使用默认值,也就是无密码。

(2) 如果这是jenkins服务器,则记下私钥的存放路径(私钥、私钥、私钥,不是公钥,重要的事情说三遍),下一步将会用到,否则跳过这一步:

这里写图片描述

(3) 打开公钥文件,全选其中文字,复制到粘贴板:

vi [替换为你的公钥路径]

(3) 回到添加SSH Key的界面,将公钥粘贴到其中,然后点击“add key”

至此,在GitLab上创建项目已经完成,你可以复制运行项目主页上的命令来同步新项目到本地。

配置Job

打开jenkins,进入job页面:

这里写图片描述

点击“配置”:

这里写图片描述

下面的配置都是在这里页面

配置Job的源码管理

选择“源码管理”,选择“Git”,然后去GitLab中复制项目地址,粘贴到“Repository URL”,然后点击“credentials”后面的“Add”按钮

这里写图片描述

在弹出页面里面:

  • Kind 选择 SSH Username with private key
  • Username 填 root
  • PrivateKey 选择 From a file on jenkins master ,然后将服务器的 私钥的存放路径(私钥、私钥、私钥,再说三遍) 粘贴进去
  • passphrase 填创建SSH秘钥时的设置的密码,未设置可不填

然后点击“Add”

这里写图片描述

在“credentials”里选择我们刚刚创建的认证方式:

这里写图片描述

如果没报错,说明成功了,点击页面底部的“apply”。如果出错了,会在“Repository URL”和“Credentials”之间显示红色的错误信息。

jenkins job默认对master分支进行构建,你也可以自定义分支。这要求你的Gitlab代码仓库中要存在这个分支,一般来说,就是要向代码仓库提交一次更改,请 自行完成(Gitlab项目刚创建时是空的,一个分支也没有,这样的话,自动构建时会出错)

这里写图片描述

配置Job的构建触发器

选择“构建触发器”,勾选“Pull SCM”,这个选项会每隔一段时间检查一下GitLab仓库中代码是否有更新,有的话就执行构建操作。日程表如何设置,在这个输入框下面有说明。

这里写图片描述

扩展阅读

常见构建触发器、:

  • Build after other projects are built 当另一个构建任务完成之后触发
  • Build periodically 周期性的触发
  • Build when a change is pushed to GitLab. GitLab CI Service URL: http://191.8.2.112:12000/project/test-go-dev 当代码有更新的时候触发,通过GitLab CI
  • GitHub hook trigger for GITScm polling 通过Github钩子触发
  • Poll SCM 定期检查代码有无更新,有更新时触发

这只是个人理解,具体怎么样大家可以试试,Poll SCM方式我是试过的。

配置Job的构建脚本

在build栏目里,选择“jenkins execute shell”,然后输入你项目的构建命令(这依赖于你的项目,如Maven的maven build,gulp的gulp xxx 等等)

这里写图片描述

扩展阅读

jenkins支持多种构建脚本,可以自己试一下:

这里写图片描述

将构建状态推送回git

点击“添加构建后操作步骤”

这里写图片描述

选择“public build status to gitlab”:

这里写图片描述

点击“高级”,填写“build name”:

这里写图片描述

点击“应用”,点击“保存”。

完成之后,在gitlab提交代码触发了构建之后,gitlab界面上应该会显示构建状态图标,如下图所示:

这里写图片描述

后记

至此,所有工作已经完成,现在你提交代码到GitLab,jenkins会每隔一段时间帮你运行一次构建命令,这样大家的代码自动集成到一起,出了错的话很快就知道了。

其它问题

1、 从git上拉取的脚本的执行权限问题

每次jenkins运行任务的时候,都会到gitlab上拉取到最新的代码,放在workspace下。需要注意的是,默认拉取的.sh脚本文件是没有执行权限的,需要在构建命令里面添加:

chmod +x *.sh

2、构建 shell 用不了nvm,参考

是使用nvm前,加一句:

. ~/.nvm/nvm.sh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

threejs-经纬度转换成xyz坐标的方法

用threejs做3D应用时&#xff0c;很经常会接触到球状物体&#xff0c;比如说地球&#xff0c;要定义球上的一点&#xff0c;用经纬度是常用的办法。现在&#xff0c;我们要在北京这个地方标一个点&#xff0c;北京的坐标为——北纬39.9”&#xff0c;东经116. 3”&#xff0c;该…

dashboard windows 前端开发环境搭建

dashboard是kubernetes的云管平台UI界面&#xff0c;正常情况下&#xff0c;其是在linux下开发的&#xff0c;但是&#xff0c;有些特殊情况下&#xff0c;我们也可能希望在windows上搭建起dashboard的开发环境 这里我们将搭建的开发环境的结构如下&#xff1a; windows上只运…

Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法...

Visual Studio2012打开时弹出“遇到异常&#xff1a;这可能是由某个扩展导致的”错误的解决办法&#xff1a; 具体问题如下&#xff1a; 分析原因&#xff1a;网上搜集了以下&#xff0c;出现异常的原因是安装了第三方控件&#xff0c;然后删除是没有删除干净&#xff0c;导致日…

跨域问题及CORS机制

跨域 跨域是指一个资源请求与其不在同一个域&#xff08;源&#xff09;的资源&#xff0c;不在同一个域&#xff08;源&#xff09;是指两个域的协议、域名或端口不同。 同源策略 出于安全考虑&#xff0c;浏览器制定了同源策略&#xff0c; 限制了某些跨域请求。同源策略是…

【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...

模拟题&#xff0c;可以用树链剖分线段树维护。 但是学了一个厉害的。。树状数组的区间修改与区间查询。。 分割线里面的是转载的&#xff1a; -------------------------------------------------------------------------------- [ 3 ] 上面都不是重点……重点是树状数组的区…

oracle .dbf文件过大_学习这篇Oracle数据库文件坏块损坏的恢复方法,拓展你的知识面...

一、Oracle数据库系统简介&#xff1a;ORACLE数据库系统是美国ORACLE公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间…

threejs- z-fighting 问题

Z-Buffer 在threejs中&#xff0c;使用深度缓冲&#xff08;Z-Buffer&#xff09;来完成场景可见性计算&#xff0c;即确定场景哪部分可见&#xff0c;哪部分不可见。深度缓冲&#xff08;Z-Buffer&#xff09;是一个二维数组&#xff0c;其中的每一个元素对应屏幕上的一个像素…

bower overrides 配置

bower 是一个常用的包管理工具&#xff0c;用起来和npm很相似&#xff0c;但是两者又有一些区别&#xff0c;可以参考 —— What is the difference between Bower and npm。这里不说bower本身&#xff0c;而想说一下bower的overrides配置。 何谓override override 本身是覆盖…

windows下搭建Vagrant+Virtualbox环境

对于开发人员来说&#xff0c;Vagrant就是一个提供标准化开发环境的工具。通过Vagrant&#xff1a; 使每个开发人员电脑上的代码运行环境一致&#xff0c;再也不会出现“在我电脑上运行起来明明没有问题的”这样的开发环境不一致的问题。你可以使用Vagrant在windows下提供linu…

Jenkins主从节点配置

jenkins支持主从模式&#xff0c;这将会把构建任务分发到多个从节点去执行&#xff0c;这样就可以支撑起多个项目的大量构建任务&#xff0c;同时&#xff0c;你可以提供多种环境&#xff08;如&#xff1a;开发环境、生产环境&#xff09;来对同一个项目进行测试和构建。想要进…

HTML5 响应式图片

现在上网设备越来越多&#xff0c;各种设备的屏幕千差万别&#xff0c;如果只用一张图片去涵盖所有的设备&#xff0c;一是可能会造成某些设备上显示效果不佳&#xff0c;比如使用了一张低清晰度的图&#xff0c;而网页运行在一个高清大屏里&#xff1b;二是可能会浪费带宽&…

threejs坐标转换

屏幕坐标转three.js坐标 将屏幕坐标转变成threejs空间坐标&#xff1a; function transToThreeCoord(x,y){let mouse new THREE.Vector3();mouse.x (x/window.innerWidth)*2 -1;mouse.y -(y/window.innerHeight)*2 1;return mouse; }注意&#xff1a;在实际使用中&#x…

android socket 发送byte_如何正确地创建和销毁网络通讯程序中的Socket类的对象实例...

软件项目实训及课程设计指导——如何正确地创建和销毁软件应用系统中网络通讯中的Socket类的对象实例1、基于TCP/IP协议的Socket通信相关的基础知识(1)TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)TCP/IP是目前Internet网络中的主要协议&…

H5 使用微信开放标签跳转小程序

微信开放标签是微信公众平台面向网页开发者提供的扩展标签集合&#xff0c;可以在网页上提供跳转小程序、打开 App 等能力。本文梳理使用微信开放标签跳转小程序的过程&#xff0c;以备日后查阅。 参考链接 1. 开放标签说明文档 准备已认证的服务号 开放标签只能绑定已认证…

【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

【题意】 假设一个试题库中有 n 道试题。 每道试题都标明了所属类别。 同一道题可能有多个类别属性。现要从题库中抽取 m 道题组成试卷。并要求试卷包含指定类型的试题。 试设计一个满足要求的组卷算法。 输入文件示例input.txt3 153 3 42 1 21 31 31 31 33 1 2 32 2 32 1 31 2…

参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)

上篇已讲解了电池单体产热特性及电池模型相关理论&#xff0c;相较之下等效电路模型无需对电池内部的电化学反应有着深入的分析&#xff0c;是通过电路来描述电池的开路电压、内阻等&#xff0c;以实现对电池外特性的表征。本篇将继续讨论此问题&#xff0c;用Matlab和Amesim模…

检测同心圆_(二)光线如何被眼睛检测到?

在第一篇文章中&#xff08;链接&#xff1a;&#xff08;一&#xff09;视觉系统的全貌&#xff09;&#xff0c;我们已经了解了视觉信息被大脑处理的全过程。现在&#xff0c;我们把目光投向一切的起点——眼睛。实际上&#xff0c;人们提起“视觉”&#xff0c;首先想到的几…

matlab计算斜方差_计算一幅图像的信噪比

本文摘自本人的毕业设计《数字图像滤波算法研究》2019, Chang’an University, Xi’an, China.本文适用于原始图像&#xff08;即不含噪声的图像&#xff09;存在的情况下。使用待计算SNR图像&#xff08;记为A&#xff09;与原始图像&#xff08;记为B&#xff09;做相减运算&…

【转载】linux进程及进程控制

Linux进程控制 程序是一组可执行的静态指令集&#xff0c;而进程(process)是一个执行中的程序实例。利用分时技术&#xff0c;在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片&#xff0c;让每个进程在一个时间片内运…

区分大小屏幕_VESA持续推动DisplayHDR认证计划,你的屏幕属于何种等级吗?

美国视频电子标准协会(VESA)今年可说是动作频频&#xff0c;年初先发布了专为OLED与其他自发光显示器所制订的DisplayHDR True Black高动态范围标准&#xff0c;下半年则更新DisplayHDR兼容测试规范至1.1版&#xff0c;并发布新的DisplayHDR 1400性能分级&#xff0c;至于年中所…