玩转CVM:Gitlab安装搭建

2019-07-07 14:46:51 浏览数 (1)

本教程将讲解如何依托腾讯云主机(CVM),以Docker方式搭建Gitlab服务。具体将包括:Docker安装,Gitlab安装与配置,Gitlab的开发流程示例,以及基于Gitlab的持续集成(CI/CD)的介绍。

0x00 Gitlab简介

Gitlab(https://gitlab.com)是完整的一套DevOps工具,开发人员可以通过它方便地进行管理项目、源码管理、持续集成/部署、开发文档维护甚至安全监控等工作,而这些重要工作涉及了软件的整个开发周期。

Gitlab的代码提交模式完全兼容Git,而合作模式又类似Github,Gitlab中的Merge Request可以大致类比Github的Pull Request。这使得开发人员上手简易,几乎没有概念学习成本。

我们什么时候需要Gitlab(或类似的工具)?答案是项目的越早期越好。Gitlab最核心的功能是源码提交记录和持续集成,二者对于软件项目来说就像“账本”和“尺子”,其重要性不言而喻。对于开发者,可以方便地进行分布式协作,如分支特性开发等,进而提升效率、自信和成就感;对于项目管理者,便于分析追踪问题、进度衡量以及目标特性的规划。

Git提供整套的软件,它本质上是一个Ruby on Rails的WebApp(现在部分后台组件用Go实现)。在早期它的安装是相对繁琐的,因为它组件众多,比如涉及服务器、数据库、消息队列、日志管理等,虽然好用但是略有门槛。而随着Docke技术的普及,现在我们可以通过它官方提供的镜像轻松地实现安装配置并部署,下面我们将在腾讯云服务器CVM上从零搭建Gitlab服务,让我们准备开始吧~

0x01 准备工作

在开始安装Gitlab之前,我们需要准备一些初始环境,主要包括:云服务器 域名 证书 Nginx服务器安装。

云服务器:Gitlab官方建议不低于4GB内存,这里我们选用腾讯云服务器的S4.MEDIUM4(标准型S4,2核4GB)。

操作系统:这里选择CentOS-7.5,其他系统如Ubuntu等也完全没有问题,操作类似。

域名:可以在任何域名提供商(如腾讯云域名)购置,下文以master-cvm.yangyang.cloud举例。

然后我们将Web服务器和SSL证书均已安装好,可以通过类似如下的Nginx测试页面简单验证。

配置完成基本Https服务配置完成基本Https服务

SSL证书的申请以及高级的Nginx安装参考上一篇:玩转CVM:Web服务搭建。

0x02 Docker安装

Docker作为容器管理的平台,早已在服务部署等领域应用得非常广泛。容器(Container)是轻量级的虚拟化方案,依托于overlayfs、Linux下的namespace、cgroups等OS级别的虚拟化技术,性能相比基于VM的虚拟化更加突出。但更重要的是,通过Docker安装和配置软件更加方便,因此我们需要先简单安装Docker。

这里我们以安装最新的docker-ce版本举例说明,如果安装ee版本大同小异。这里参考官方文档:https://docs.docker.com/install/linux/docker-ce/centos/

安装依赖和设置仓库源

代码语言:txt复制
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce

我们的环境上,大致需要1分钟就可以了,腾讯云的网络总体感觉还不错。

代码语言:txt复制
# 最新稳定版
yum install docker-ce docker-ce-cli containerd.io
# 或指定版本,如:
# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io

本文安装的版本为:docker-ce-18.09.6(当前最新)。

启动docker服务

代码语言:txt复制
systemctl start docker

Docker服务验证

启动hello-world容器简单验证即可。

代码语言:txt复制
docker run hello-world
Docker安装验证Docker安装验证

确实,Docker的安装越来越方便了。

0x03 安装Gitlab

官方文档:https://docs.gitlab.com/omnibus/docker/

下载gitlab的docker镜像到本地

腾讯云上大概耗时大概2分半。

代码语言:txt复制
# 最新稳定版
docker pull gitlab/gitlab-ce
# 或指定版本,如:
docker pull gitlab/gitlab-ce:11.11.2-ce.0

本文安装的版本为:gitlab-ce:11.11.2-ce.0(当前最新)。

启动gitlab容器

代码语言:txt复制
docker run --detach 
  --hostname master-cvm.yangyang.cloud 
  --env GITLAB_OMNIBUS_CONFIG="external_url 'https://master-cvm.yangyang.cloud/gitlab'; gitlab_rails['gitlab_shell_ssh_port'] = 55522;" 
  --publish 127.0.0.1:55523:443 --publish 55522:22 
  --name gitlab    
  --restart always 
  --volume /data/gitlab/config:/etc/gitlab   
  --volume /data/gitlab/logs:/var/log/gitlab 
  --volume /data/gitlab/data:/var/opt/gitlab 
  gitlab/gitlab-ce:latest

各个参数的意义:

detach:让容器在后台运行;

always:失败后总是重启;

env:传递环境变量,这里要特别注意,传递的external_url值要和域名及Nginx下路由保持一致;

publish:端口转发--pubish 55522:22即将容器的22端口转发至云服务器的55522端口;

volume:自定义容器的卷挂载目录,Gitlab需要三个:分别是配置config、日志logs和数据data;

容器启动后,我们可以通过docker ps命令查看容器状态,如图:

gitlab容器启动成功验证gitlab容器启动成功验证

可以看出:我们的gitlab容器已经正常运行了。

另外,还可以用docker logs来查看容器的启动日志用于排查潜在的错误。

代码语言:txt复制
docker logs -f --tail 50 gitlab

Nginx设置

注意路径(location)和端口号(proxy_pass)的配置要和上面的docker run命令匹配。

代码语言:txt复制
server {
    listen 80;
    server_name master-cvm.yangyang.cloud;

    return 301 https://$host$request_uri;
}

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;

    server_name master-cvm.yangyang.cloud;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/master-cvm.yangyang.cloud/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/master-cvm.yangyang.cloud/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location /gitlab/ {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_pass https://127.0.0.1:55523;
    }

    location / {
        root    /usr/share/nginx/html;
    }
}

重启

代码语言:txt复制
systemctl restart nginx.service

试试从浏览器访问吧~如:https://master-cvm.yangyang.cloud/gitlab/

这时将会出现重置root密码的界面,安装成功。

Gitlab首次登录页面Gitlab首次登录页面

0x04 初始化及安装验证

Gitlab安装完成后,我们即可以在Web端操作使用了。首先是设置root密码,注意只有root用户才可以访问管理员面板,查看用户、项目等很多的全局配置。

创建用户

设置完root密码后会跳转到登录页面,虽然这里可以用root 刚设的密码直接登陆,但更推荐的是注册第一个用户,并以这个用户来进行日常的操作。

上传用户本地开发机的key

设置sshkey

同Github一致,用户通过ssh协议push代码,需要上传用户的ssh密钥。在开发上执行以下命令,并复制即可:

代码语言:txt复制
ssh-keygen
cat ~/.ssh/id_rsa.pub

右上角用户头像->“Settings”->左边栏“SSH Keys”,管理添加密钥。

add_key.pngadd_key.png

0x05 常见操作

创建项目、创建用户和组管理

创建项目组(可选)

Gitlab里,管理各个项目(Project)的名字空间为组(Group)和其嵌套的子组(Subgroup),可以简单理解为项目所在的不同“目录”。

Gitlab为每个用户创建一个默认的同名称的项目组,所以可以直接创建项目。

创建项目

create_project.pngcreate_project.png

这里就是熟悉的类似Github操作界面了:

clone.pngclone.png

因为之前已经上传过密钥,所以我们可以在本地通过SSH方式clone项目到本地

代码语言:txt复制
git clone ssh://git@master-cvm.yangyang.cloud:55522/example-group/my-webapp.git

注意这里的url中会包含我门设置的ssh端口

clone代码时选择https协议也是支持的,不过要输入用户名和密码,不如用ssh方便。

0x06 CI及CI-Runner安装

Gitlab对CI(Continuous Integration/Deployment,即持续集成/部署)的支持是非常成熟的。个人认为比jenkins更加易理解易使用。所谓持续集成,就是在特定的时间点(如代码Merge时),在特定的机器上,做预先设定的任务(比如代码编译打包、自动化测试、发布等)。而执行任务的程序,就叫做Gitlab Runner,由它来执行任务的组件,而且它不一定运行在gitlab所在的主机上,只要可以网络联通可进行通信即可。

安装过程,这里参考官方文档:https://docs.gitlab.com/runner/install/linux-repository.html

Gitlab的CI-Runner的安装非常简单直接,只要三步就能开始后续使用(比如配置任务)了。

更新仓库源

代码语言:txt复制
 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash

安装

代码语言:txt复制
yum install gitlab-runner

注册

为什么要注册?其实就是让gitlab知道哪些机器上运行着runner。需要 gitlab的url和token。

在项目的“Settings” -> “CI/CD” -> “Runners”可以查到,复制即可,如图

runner-register.pngrunner-register.png

我们直接用gitlab-runner register命令来注册即可。

executor种类根据需要选择,shell是比较常用的。

register_done.pngregister_done.png

后续就可以在项目下的.gitlab-ci.yml中设置具体的CI任务,并在Gitlab-CI的Pipeline页面查看任务的执行结果。

0x07 bonus: 基于git/gitlab的开发流程

这里引用Gitlab的官网图片用来说明开发的workflow。

可以看到,Gitlab把针对合入发布主干前的分支代码进行的一系列工作划为CI流程,包括自动构建测试等;而合如主干后的自动化工作称为CD流程,包括部署到生产环境等。

实际的自动化部署要处理的问题通常比这张图复杂不少,我们可以进一步在项目的发展过程中亲身体验这个不断演进的过程。

gitlab ci workflowgitlab ci workflow

至此,本教程也告一段落。相信跟到这里,你已经可以自行动手在CVM上搭建属于自己的Gitlab服务了,也为下一段旅程做足了准备。

一起来享受玩转CVM的乐趣吧~

Enjoy Yourself~

0x08 参考资料

https://cloud.tencent.com/developer/article/1429314

https://docs.docker.com/install/linux/docker-ce/centos/

https://hub.docker.com/r/gitlab/gitlab-ce/

https://docs.gitlab.com/omnibus/docker/

https://docs.gitlab.com/runner/install/linux-repository.html

https://docs.gitlab.com/runner/register/index.html

0 人点赞