一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  • A+
所属分类:.NET技术
摘要

通过使用gitlab,你可以拥有自己的git服务器、具备github的大部分功能,包括代码审查、分支合并、具有内置的CI/CD、docker镜像仓库功能等,并且中文支持得也不错


前言

通过使用gitlab,你可以拥有自己的git服务器、具备github的大部分功能,包括代码审查、分支合并、具有内置的CI/CD、docker镜像仓库功能等,并且中文支持得也不错

本文详细介绍了如何一步一步搭建gitlab环境,并且通过一个.net 5的demo项目演示了如何使用内置的CI/CD功能来实现自动化构建、测试和构建镜像并上传

本文不包含难懂的实现原理,掌握了基本linux命令、docker命令和计算机基础的同学都可放心食用

一点点介绍

有很多种安装gitlab的方法,详情见官网介绍

  • 安装在linux(官方推荐)
  • 安装在k8s
  • 安装在docker(本文使用的方式)
  • 安装在aws
  • 不支持windows系统

硬件要求

  • 4核CPU
  • 4G内存

基于安装复杂度、不污染主机环境等考虑,本文所有功能均在一台centos 7上实现,配合shell脚本,非常容易实现一键安装

准备工作

安装centos 7

  • 可参考文章 在VMWare中安装CentOS 7虚拟机
  • 如果是自有的云主机,在云服务商的控制台安装centos 7即可
    关闭防火墙和selinux(勿在生产环境中使用)

安装docker

#!/bin/bash  # 适用于在纯净的centos系统中,安装docker  # 1、卸载已有的docker yum remove docker             docker-client             docker-client-latest             docker-common             docker-latest             docker-latest-logrotate             docker-logrotate             docker-selinux             docker-engine-selinux             docker-engine  #2、安装yum-utils工具 yum install yum-utils # 3、配置yum docker-ce仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4、刷新yum仓库缓存 yum makecache fast # 5、安装docker-ce yum install docker-ce -y # 6、启动docker和设置docker自启动 systemctl enable docker systemctl start docker # 7、使用hello-world镜像测试docker是否成功安装 docker run hello-world 

安装docker compose

执行命令下载和授权docker-compose

 sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose &&  sudo chmod +x /usr/local/bin/docker-compose 

执行docker-compose命令检查是否安装成功。如输出docker-compose的帮助文档,说明安装成功

预先拉取相关镜像

相信大家在拉取镜像时,遇到最烦心的问题莫过于速度太慢了,本文涉及到的镜像都在阿里云镜像仓库里,速度超快。如何做的?点我

# 在docker中运行的docker,用作构建项目镜像 docker pull registry.cn-shenzhen.aliyuncs.com/dotnet-vincent/docker:latest # .net 5 sdk docker pull registry.cn-shenzhen.aliyuncs.com/dotnet-vincent/sdk:5.0 # gitlab docker pull registry.cn-shenzhen.aliyuncs.com/dotnet-vincent/gitlab:latest # gitlab-runner,用来执行CI任务 docker pull registry.cn-shenzhen.aliyuncs.com/dotnet-vincent/gitlab-runner:latest # asp.net 运行环境 docker pull registry.cn-shenzhen.aliyuncs.com/dotnet-vincent/aspnet:5.0-buster-slim 

安装gitlab

  1. 在当前目录新建文件docker-compose.yml,写入以下内容(把脚本中的ip替换掉)
web:   image: 'gitlab/gitlab-ce:latest'   name: gitlab   restart: always   hostname: 'centos 7 在局域网的ip'   environment:     GITLAB_OMNIBUS_CONFIG: |       external_url 'http://centos 7 在局域网的ip'       # Add any other gitlab.rb configuration here, each on its own line       gitlab_rails['gitlab_ssh_host'] = 'centos 7 在局域网的ip'       gitlab_rails['gitlab_shell_ssh_port'] = 26013   ports:     - '80:80'     - '443:443'     - '26013:22'   volumes:     - '$GITLAB_HOME/config:/etc/gitlab'     - '$GITLAB_HOME/logs:/var/log/gitlab'     - '$GITLAB_HOME/data:/var/opt/gitlab' 
  1. 执行安装脚本
# 设置gitlab数据存放路径 export GITLAB_HOME=/srv/gitlab # 授权执行权限给文件 chmod +x docker-compose.yml  # 启动容器 docker-compose up -d 

测试gitlab

gitlab启动较慢,稍等一分钟后,在主机的浏览器中输入http://centos的ip,应该就能看到gitlab的登录页。首次打开需要设置root用户的密码
一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

设置用户界面为中文

  1. 点击右上角的头像,然后再点击settings
  2. 点击左侧栏中的preferences
  3. 把中间页面拉到最后,选择中文后保存,刷新页面即可
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

到此安装完成

配置CI/CD

gitlab除了是一个代码管理平台外,还集成了CI/CD。要使用CI/CD功能,首先得新建一个项目。我这里准备好了一个项目,直接导入即可

新建项目

  1. 点击主界面的“新建项目”
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  2. 如下图所示,输入项目地址,新建项目

https://github.com/hzhhhbb/dockerdemo.git 

一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像
3. 等待导入完成
一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

安装gitlab-runner

gitlab主程序不跑CI任务,依靠可安装在本机、可连接的其他机器上的runner来执行具体的任务

  1. 如下图所示,找到ip和令牌
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  2. 替换以下脚本中对应的ip(url)和令牌(registration-token),然后分条执行命令,就注册了三个runner

docker run -d --net host --name gitlab-runner  --restart always       -v /srv/gitlab-runner/config:/etc/gitlab-runner       -v /var/run/docker.sock:/var/run/docker.sock       gitlab/gitlab-runner:latest;  docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register    --non-interactive    --executor "docker"    --docker-privileged    --docker-image docker:latest    --url "http://192.168.0.107/"    --registration-token "TJyTrjxLNiZBcjsG-yvs"    --description "build-runner"    --tag-list "build"    --run-untagged="true"    --locked="false"    --access-level="not_protected";    docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register    --non-interactive    --executor "docker"    --docker-privileged    --docker-image docker:latest    --url "http://192.168.0.107/"    --registration-token "TJyTrjxLNiZBcjsG-yvs"    --description "test-runner"    --tag-list "test"    --run-untagged="true"    --locked="false"    --access-level="not_protected";    docker run -it --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register    --non-interactive    --executor "docker"    --docker-privileged    --docker-image docker:latest    --url "http://192.168.0.107/"    --registration-token "TJyTrjxLNiZBcjsG-yvs"    --description "docker-runner"    --tag-list "build-docker-image"    --run-untagged="true"    --locked="false"    --access-level="not_protected"; 
  1. 注册成功
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

运行流水线

  1. 修改项目文件.gitlab-ci.yml中的ip地址(这里有坑,使用$CI_REGISTRY变量是不会生效的)
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  2. 点击项目中的流水线并运行,观察流水线的运行情况
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  3. 无意外的话会运行成功
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

  4. 在项目中的镜像仓库可以看到构建成功后的镜像
    一文搞定gitlab的环境搭建、配置CI/CD、自动构建docker镜像

最后

本文在写作时,遇到了很多坑,比如docker(docker in docker)镜像在18.09版本后默认启用了TLS相关的验证,需要额外的设置才能使CI正常运行;docker in docker 需要以特权模式运行等等...
限于文章篇幅,就不一一细讲了
本文力求给大家一次搭建成功的体验,但事总有不完美的地方,如搭建过程中遇到问题,欢迎留言一起讨论
觉得有帮助的,阔以顺手点个推荐哟~Thanks

参考资料