专栏首页巫山跬步玩转CVM:Gitlab安装搭建
原创

玩转CVM:Gitlab安装搭建

本教程将讲解如何依托腾讯云主机(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服务

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/

安装依赖和设置仓库源

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分钟就可以了,腾讯云的网络总体感觉还不错。

# 最新稳定版
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服务

systemctl start docker

Docker服务验证

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

docker run hello-world
Docker安装验证

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

0x03 安装Gitlab

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

下载gitlab的docker镜像到本地

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

# 最新稳定版
docker pull gitlab/gitlab-ce
# 或指定版本,如:
docker pull gitlab/gitlab-ce:11.11.2-ce.0

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

启动gitlab容器

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容器已经正常运行了。

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

docker logs -f --tail 50 gitlab

Nginx设置

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

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;
    }
}

重启

systemctl restart nginx.service

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

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

Gitlab首次登录页面

0x04 初始化及安装验证

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

创建用户

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

上传用户本地开发机的key

设置sshkey

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

ssh-keygen
cat ~/.ssh/id_rsa.pub

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

add_key.png

0x05 常见操作

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

创建项目组(可选)

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

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

创建项目

create_project.png

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

clone.png

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

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的安装非常简单直接,只要三步就能开始后续使用(比如配置任务)了。

更新仓库源

 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash

安装

yum install gitlab-runner

注册

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

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

runner-register.png

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

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

register_done.png

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

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

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

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

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

gitlab 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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让事件飞——Linux eventfd 原理

    目前越来越多的应用程序采用事件驱动的方式实现功能,如何高效地利用系统资源实现通知的管理和送达就愈发变得重要起来。在Linux系统中,eventfd是一个用来通知...

    溪歪歪
  • 【Lighthouse教程】网页内容抓取入门

    网页内容抓取(Web Scraping)是指通过网页抓取工具(即Web Crawler,亦称网页爬虫)对指定网页进行设定行为的自动访问,并进行数据分析提取、最终...

    溪歪歪
  • 可扩展的任务流框架实现(一)

    IO密集型任务流的框架在后台业务中具有重要广泛的应用场景,我们应该不断得追求其设计的优雅以及良好的扩展性。

    溪歪歪
  • 代码海洋-你想模仿的这里都有啊

    docker我们讲解很多次了,具体大家可以浏览我在在生信技能树上面写过部分docker教程, 目录如下:

    生信技能树
  • docker删除所有容器 镜像 数据卷等批量操作命令

    javascript.shop
  • Docker可视化管理工具

    本次是在Centos7上安装portainer 首先搜索一下Docker Hub上的portainer镜像

    天钧
  • docker学习系列3 提交并分享自己的镜像

    docker有个类似 github的平台,叫 https://hub.docker.com 可以 pull 官方或第三方提供的镜像,当然也可以发布自己的镜像供...

    mafeifan
  • Zookeeper学习——安装与配置

    docker的使用我们可以顺便提下。首先docker容器需要在运行一个dockerd的进程作为daemon进程,那我们首先以centos为例安装并启动docke...

    Hi胡瀚
  • Docker镜像的基本操作

    若与
  • Docker实战(三)

    我们都知道如果用 docker hub 来做仓库会很慢,因为docker hub 服务器在国外,那么现在有必要讲一下如何搭建一个 docker 私有仓库,并进行...

    张乘辉

扫码关注云+社区

领取腾讯云代金券