《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit

Posted BruceOxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit相关的知识,希望对你有一定的参考价值。

开发环境:

服务器:Ubuntu Server 20.04

2.1简介

Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。

Jenkins的主要作用:

  1. 持续、自动地构建/测试软件项目,如CruiseControl与DamageControl。
  2. 监控一些定时执行的任务。

GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,随着git的流行,越来越多的技术团队通过在自己的服务器搭建gitlab来实现代码的管理。

Gerrit 是建立在Git版本控制系统之上并且基于Web的一个免费开源的轻量级代码审查工具。作为开发者和Git之间的一层屏障,不允许直接将本地修改内容同步到远程仓库中。与Jenkins集成后,可以在每次提交代码后,人工审核代码前,通过Jenkins任务自动运行单元测试、构建以及自动化测试,如果Jenkins任务失败,会自动打回本次提交。

2.2 Docker方式安装

2.2.1 Docker安装

Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:

$ sudo apt-get remove docker docker-engine docker.io containerd runc

安装命令如下:

$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun


《持续集成实践指南》第2章

也可以使用国内 daocloud 一键安装命令:

$ curl -sSL https://get.daocloud.io/docker | sh

安装成功执行下面语句,如果有类似回显,说明安装成功。

$ docker --version

《持续集成实践指南》第2章

或者使用docker version查看完整信息。

《持续集成实践指南》第2章


2.2.2 Jenkins安装

​官网​

  1. 拉取Jenkins镜像文件
$sudo docker pull jenkins/jenkins

《持续集成实践指南》第2章


  1. 创建Jenkins挂载目录并授权权限(我们在服务器上先创建一个jenkins工作目录稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。
#sudo chown -R 1000:1000 /jenkins
  1. 创建并启动Jenkins容器
$sudo docker run -d -p 10240:8080 -p 10241:50000 -v /jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins

《持续集成实践指南》第2章

命令参数释义: -d 后台运行镜像 -p 10240:8080 将镜像的8080端口映射到服务器的10240端口。 -p 10241:50000 将镜像的50000端口映射到服务器的10241端口 -v /jenkins:/var/jenkins_mount 其中/jenkins目录为容器jenkins工作目录。 -v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。 --name jenkins 给容器起一个别名

  1. 查看jenkins是否启动成功,如下图出现端口号,就为启动成功了
$sudo docker ps -l

《持续集成实践指南》第2章

  1. 查看docker容器日志。
# docker logs jenkins

《持续集成实践指南》第2章

  1. 修改Jenkins镜像(非必须)

修改hudson.model.UpdateCenter.xml里的内容。

《持续集成实践指南》第2章

可以将默认源修改为清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

《持续集成实践指南》第2章


  1. 获取管理员密码,编辑initialAdminPassword文件查看,把密码输入登录中的密码即可,开始使用。
$ cat /jenkins/secrets/initialAdminPassword
  1. 访问Jenkins页面,输入ip:10240

《持续集成实践指南》第2章

值得注意的是,这里默认是在/var/jenkins_home/secrets/initialAdminPassword。我们这里自定义了目录,因此在cat /jenkins/secrets/initialAdminPassword文件中。

  1. 插件安装

输入管理员密码后,会提示安装插件。

《持续集成实践指南》第2章

选择推荐的插件,等待片刻即可安装完成。

《持续集成实践指南》第2章


  1. 创建管理员用户。

《持续集成实践指南》第2章


  1. 配置Jenkins URL。

《持续集成实践指南》第2章


  1. 访问Jenkins页面,输入ip:10240

《持续集成实践指南》第2章


2.2.3 GitLab安装

在开始安装前,可以先搜索 gitlab 镜像。

$ sudo docker search gitlab

《持续集成实践指南》第2章

这里安装社区版gitlab-ce,先下载镜像。

$sudo docker pull gitlab/gitlab-ce

《持续集成实践指南》第2章

下载完成后,通过 docker images 查看当前系统所有的镜像;

$sudo docker images

《持续集成实践指南》第2章

接下来可以运行gitlab了。 建立相关存储文件夹,主要存放GitLab的配置 (etc)、日志(log)、数据 (data) 文件,放到容器之外,便于日后升级,因此需要先准备这三个目录。

$sudo chown -R 1000:1000 /gitlab

接下来运行如下命令安装Gitlab。

$ sudo docker run -d -h gitlab -p 8443:443 -p 8085:80 -p 2222:22 \\
--name gitlab --restart always \\
-v /gitlab/etc:/etc/gitlab \\
-v /gitlab/log:/var/log/gitlab \\
-v /gitlab/opt:/var/opt/gitlab \\
docker.io/gitlab/gitlab-ce

《持续集成实践指南》第2章

命令参数释义: -d:后台运行 -p:将容器内部端口向外映射 --name:命名容器名称 -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录 接下来查看是否运行成功。

$sudo docker ps

《持续集成实践指南》第2章

访问GitLab页面,输入ip:8085 《持续集成实践指南》第2章

在安装gitlab后,默认使用root登陆,密码在etc目录下。

《持续集成实践指南》第2章

打开initial_root_password文件获取root登陆密码,登陆后即可修改密码。

《持续集成实践指南》第2章


2.2.4 Gerrit安装

​官网​

  1. 拉取Gerrit镜像文件
$sudo docker pull gerritcodereview/gerrit

《持续集成实践指南》第2章

  1. 创建Gerrit挂载目录并授权权限(我们在服务器上先创建一个Gerrit工作目录稍后我们将Gerrit容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。
$sudo chown -R 1000:1000 /gerrit
  1. 运行容器
$sudo docker run -d \\
--name gerrit \\
-p 8080:8080 \\
-p 29418:29418 \\
-v /gerrit:/var/gerrit/review_site \\
gerritcodereview/gerrit
  1. 访问Gerrit页面,输入ip:8080

《持续集成实践指南》第2章

以上工具均在同一个虚拟环境中安装,只是把各自的端口做了相应的调整。

2.3普通方式安装

2.3.1安装 Oracle Java 8

持续集成工具是基于Java开发的,因此需要java运行时环境(JRE)。这里就提前安装好。

方法一、自动安装

$sudo add-apt-repository ppa:webupd8team/java
$sudo apt update
$sudo apt install oracle-java8-installer

设置为默认 JDK

sudo update-java-alternatives -s java-8-oracle

方法二、手动安装(推荐) oracle Java官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html (以jdk-8u311-linux-x64.tar.gz为例) a.创建目录:

$sudo mkdir /usr/lib/jvm

b.解压缩到该目录:

$sudo tar -zxvf jdk-8u311-linux-x64.tar.gz -C /usr/lib/jvm

c.修改环境变量:  

$vi ~/.bashrc

在文件末尾追加下面内容:

#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_311 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

使环境变量马上生效:

$source ~/.bashrc

d.将此 JDK 注册到系统中

$sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_311/bin/java 300

e.查看java版本,看看是否安装成功:

$java -version

如果你安装了多个版本的jdk,你可以通过以下命令在这些版本之间切换:

$sudo update-alternatives --config java

2.3.2 Jenkins安装

​官网​

1.安装Jenkins

在基于Debian的发行版,如Ubuntu,您可以通过安装Jenkins apt。最近的版本在一个apt存储库中可用。旧的但稳定的LTS版本在这个apt存储库。

$ curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \\
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
$ echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \\
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \\
/etc/apt/sources.list.d/jenkins.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install jenkins

2.登录Jenkins

首先获取管理员登录密码,默认密码在/var/lib/jenkins/secrets/initialAdminPassword文件中,打开initialAdminPassword文件查看,把密码输入登录中的密码即可,开始使用。

$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword

接着访问Jenkins页面,输入ip:8080 《持续集成实践指南》第2章

输入管理员密码后,会提示安装插件。

《持续集成实践指南》第2章

选择推荐的插件,等待片刻即可安装完成。

《持续集成实践指南》第2章

然后创建管理员用户。

《持续集成实践指南》第2章

最后还需要配置Jenkins URL。

《持续集成实践指南》第2章

配置完成后就可访问Jenkins,输入ip:8080

《持续集成实践指南》第2章


2.3.3 GitLab安装

​官网​

1.安装并配置必要的依赖

$ sudo apt-get update
$ sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

接下来,安装 Postfix 以发送通知电子邮件。如果您想使用其他解决方案发送电子邮件,请跳过此步骤并 在安装 GitLab 后配置外部 SMTP 服务器。

$ sudo apt-get install -y postfix

在 Postfix 安装过程中,可能会出现一个配置屏幕。选择“Internet 站点”并按 Enter。将您服务器的外部 DNS 用于“邮件名称”,然后按 Enter。如果出现其他屏幕,请继续按 Enter 接受默认值。

2.添加GitLab包仓库并安装包

添加 GitLab 包存储库。

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

接下来,安装 GitLab 包。确保您已正确设置您的 DNS,并更改https://gitlab.bruceou.com为您要访问 GitLab 实例的 URL。安装将在该 URL 上自动配置和启动 GitLab。 对于https://URL,GitLab 将使用 Lets Encrypt自动请求证书,这需要入站 HTTP 访问和有效的主机名。您也可以使用自己的证书或仅使用http://(不带s)。 如果您想为初始管理员用户 ( root)指定自定义密码,请查看文档。如果未指定密码,将自动生成随机密码。

$ sudo EXTERNAL_URL="https://gitlab.bruceou.com" apt-get install gitlab-ce

3.浏览到主机名并登录

除非您在安装过程中提供了自定义密码,否则将随机生成一个密码并在/etc/gitlab/initial_root_password. 使用此密码和用户名root登录。

《持续集成实践指南》第2章


2.3.4 Gerrit安装

​官网​

1.获取Gerrit软件

$wget https://gerrit-releases.storage.googleapis.com/gerrit-3.0.3.war

2.安装并初始化Gerrit

$export GERRIT_SITE=~/gerrit_testsite
$java -jar gerrit*.war init --batch --dev -d $GERRIT_SITE

3.配置Gerrit

$git config --file $GERRIT_SITE/etc/gerrit.config httpd.listenUrl http://localhost:8080

4.重启Gerrit

$GERRIT_SITE/bin/gerrit.sh restart

5.登录Gerrit

访问Gerrit页面,输入ip:8080

《持续集成实践指南》第2章

值得注意的是,以上三个软件的默认端口号会冲突,因此需要重新去规划三个软件的端口,除非不在同一个服务器,笔者在使用普通的安装方式时分别使用了三个虚拟机进行演示的。 笔者推荐的方式是使用docker安装,使用docker安装有以下优势:

1.docker安装快速,效率高;

  1. docker隔离性好,互相不干扰,只要映射主机端口不同即可;
  2. 数据备份、迁移,docker更方便强大;
  3. 卸载管理更方便和干净,直接删除容器和镜像即可;

另外,使用docker还有一个好处就是,对平台依赖性小,虽然笔者是在Ubuntu上演示,但是你在Centos上也docker命令同样适用,非常的方便。 当然啦,如果你愿意折腾,尽情去折腾吧。


以上是关于《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit的主要内容,如果未能解决你的问题,请参考以下文章

《持续集成实践指南》第1章 DevOps实践简介

持续集成CI&CD之配置管理最佳实践

持续集成-jenkins介绍与环境搭建

使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

基于 Jenkins 快速搭建持续集成环境

基于 Jenkins 快速搭建持续集成环境