前言
通過使用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
- 可參考文章 在CentOS 7中安裝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
- 在當前目錄新建檔案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'
- 執行安裝腳本
# 設定gitlab資料存放路徑
export GITLAB_HOME=/srv/gitlab
# 授權執行權限給檔案
chmod +x docker-compose.yml
# 啟動容器
docker-compose up -d
測驗gitlab
gitlab啟動較慢,稍等一分鐘后,在主機的瀏覽器中輸入http://centos的ip,應該就能看到gitlab的登錄頁,首次打開需要設定root用戶的密碼

設定用戶界面為中文
- 點擊右上角的頭像,然后再點擊settings
- 點擊左側欄中的preferences
- 把中間頁面拉到最后,選擇中文后保存,重繪頁面即可

到此安裝完成
配置CI/CD
gitlab除了是一個代碼管理平臺外,還集成了CI/CD,要使用CI/CD功能,首先得新建一個專案,我這里準備好了一個專案,直接匯入即可
新建專案
-
點擊主界面的“新建專案”

-
如下圖所示,輸入專案地址,新建專案
https://github.com/hzhhhbb/dockerdemo.git

3. 等待匯入完成

安裝gitlab-runner
gitlab主程式不跑CI任務,依靠可安裝在本機、可連接的其他機器上的runner來執行具體的任務
-
如下圖所示,找到ip和令牌

-
替換以下腳本中對應的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";
- 注冊成功

運行流水線
-
修改專案檔案.gitlab-ci.yml中的ip地址(這里有坑,使用$CI_REGISTRY變數是不會生效的)

-
點擊專案中的流水線并運行,觀察流水線的運行情況

-
無意外的話會運行成功

-
在專案中的鏡像倉庫可以看到構建成功后的鏡像

最后
本文在寫作時,遇到了很多坑,比如docker(docker in docker)鏡像在18.09版本后默認啟用了TLS,沒有用https協議,將導致CI運行報錯;docker in docker 需要以特權模式運行等等...
限于文章篇幅,就不一一細講了
本文力求給大家一次搭建成功的體驗,但事總有不完美的地方,如搭建程序中遇到問題,歡迎留言一起討論
覺得有幫助的,闊以順手點個推薦喲~Thanks
參考資料
- https://docs.gitlab.com/omnibus/docker/
- https://docs.gitlab.com/runner/register/
- https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
- https://docs.docker.com/compose/install/
- https://docs.docker.com/engine/reference/builder/#workdir
- https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
- https://forum.gitlab.com/t/gitlab-ci-dind-build-can-t-login-to-insecure-registry-after-upgrade-from-11-x-to-12-1/28385
- https://hub.docker.com/_/docker
- https://docs.gitlab.com/ee/intro/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/220967.html
標籤:.NET技术
