一文搞定gitlab的環境搭建、配置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用戶的密碼

設置用戶界面為中文

  1. 點擊右上角的頭像,然后再點擊settings
  2. 點擊左側欄中的preferences
  3. 把中間頁面拉到最后,選擇中文后保存,刷新頁面即可

到此安裝完成

配置CI/CD

gitlab除了是一個代碼管理平台外,還集成了CI/CD。要使用CI/CD功能,首先得新建一個項目。我這里准備好了一個項目,直接導入即可

新建項目

  1. 點擊主界面的“新建項目”

  2. 如下圖所示,輸入項目地址,新建項目

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


3. 等待導入完成

安裝gitlab-runner

gitlab主程序不跑CI任務,依靠可安裝在本機、可連接的其他機器上的runner來執行具體的任務

  1. 如下圖所示,找到ip和令牌

  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. 注冊成功

運行流水線

  1. 修改項目文件.gitlab-ci.yml中的ip地址(這里有坑,使用$CI_REGISTRY變量是不會生效的)

  2. 點擊項目中的流水線並運行,觀察流水線的運行情況

  3. 無意外的話會運行成功

  4. 在項目中的鏡像倉庫可以看到構建成功后的鏡像

最后

本文在寫作時,遇到了很多坑,比如docker(docker in docker)鏡像在18.09版本后默認啟用了TLS相關的驗證,需要額外的設置才能使CI正常運行;docker in docker 需要以特權模式運行等等...
限於文章篇幅,就不一一細講了
本文力求給大家一次搭建成功的體驗,但事總有不完美的地方,如搭建過程中遇到問題,歡迎留言一起討論
覺得有幫助的,闊以順手點個推薦喲~Thanks

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM