特點
- 開源: CI/CD是開源GitLab社群版和專有GitLab企業版的一部分。(極狐)
- 易于學習: 官方具有詳細的學習操作文檔。
- 無縫內建: CI/CD是GitLab的一部分,支援從計劃到部署,具有出色的使用者體驗。
- 可擴充: 可以根據需要添加任意數量的建構節點。*(從架構上有gitlab server和gitlab runner,類似于slave建構節點)
- 更快的結果: 每個建構可以拆分為多個作業,這些作業可以在多台計算機上并行運作。
- 針對傳遞進行了優化: 多個階段,手動部署, 環境 和 變量。
點開一個項目就可以看到流水線的CI/CD管道資訊,包含了流水線的狀态,流水線的ID,後面就是分支,誰觸發的,流水線每個步驟的狀态。
可以看到gitlab自帶了CI/CD的功能,不需要額外的安裝。gitlab提供了完整的CI/CD功能,不要額外的安裝工具鍊來實作,如果公司的項目不是特别多,可以使用gitlab,就不需要安裝太多的工具鍊,減少運維成本。
GitLab部署
版本: 14.0.0
RPM參考文檔:https://www.yuque.com/zeyangli/bqsigl/rgdrnw
## 下載下傳鏡像
docker pull gitlab/gitlab-ce:14.0.0-ce.0
## 建立資料目錄
mkdir -p /data/cicd/gitlab/{config,logs,data}
chmod 777 -R /data/cicd/gitlab/
## 運作
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab \
--restart always \
-v /data/cicd/gitlab/config:/etc/gitlab \
-v /data/cicd/gitlab/logs:/var/log/gitlab \
-v /data/cicd/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:14.0.0-ce.0
- 222端口 ssh協定
- 80端口 http端口
- 443端口 https端口
FAQ
[root@zeyang-nuc-service ~]# git clone http://927c154cfffa/devops/demo-hello-service.git
Cloning into 'demo-hello-service'...
fatal: unable to access 'http://927c154cfffa/devops/demo-hello-service.git/': Could not resolve host: 927c154cfffa
[root@zeyang-nuc-service ~]# docker ps | grep gitlab
927c154cfffa gitlab/gitlab-ce:13.10.0-ce.0 "/assets/wrapper" 21 minutes ago Up 21 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:222->22/tcp gitlab
[root@zeyang-nuc-service ~]#
解決方法
docker exec -it gitlab bash
root@927c154cfffa:/# vi /etc/gitlab/gitlab.rb
root@927c154cfffa:/# gitlab-ctl reconfigure
GitLab Runner配置管理
gitlab是一個項目,gitlab runner也是一個單獨的項目,runner類似于Jenkins的slave節點,也是server去排程,然後配置設定作業。
- GitLab Runner是一個開源項目,用于運作作業并将結果發送回GitLab。
- 與GitLabCI結合使用,GitLabCI是GitLab随附的用于協調作業的開源持續內建服務。
- GitLab Runner是用Go編寫的,可以在Linux,macOS和Windows作業系統上運作。
- 容器部署需使用最新Docker版本。GitLab Runner需要最少的Docker v1.13.0。
- GitLab Runner版本應與GitLab版本同步。(避免版本不一緻導緻差異化)
- 可以根據需要配置任意數量的Runner。
類型
- shared 共享類型,運作整個平台項目的所有作業(gitlab 點開Menu----》admin)下面可以看到在背景拿到的token基本上都是shared類型的token
- group 項目組類型,運作特定group下的所有項目的作業(group)這是注冊一個group級别的token,那麼就是這個組的runner,不能讓其他組去使用
- specific項目類型,運作指定的項目作業(project)
狀态
- locked: 鎖定狀态,無法運作項目作業
- paused: 暫停狀态,暫時不會接受新的作業
步驟:
- 安裝
工具gitlab-runner
- 使用
工具向gitlab-runner
注冊Runner節點。GitLab Server
Runner部署包下載下傳:https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7-x86_64/
[root@gitlab-dockerhub ~]# ls
gitlab-runner-14.0.0-1.x86_64.rpm
[root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
error: Failed dependencies:
git is needed by gitlab-runner-14.0.0-1.x86_64
[root@gitlab-dockerhub ~]# yum install git -y
[root@gitlab-dockerhub ~]# rpm -ivh gitlab-runner-14.0.0-1.x86_64.rpm
warning: gitlab-runner-14.0.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 35dfa027: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-runner-14.0.0-1 ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform arch=amd64 os=linux pid=7771 revision=3b6f852e version=14.0.0
gitlab-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7781 revision=3b6f852e version=14.0.0
gitlab-ci-multi-runner: the service is not installed
Runtime platform arch=amd64 os=linux pid=7811 revision=3b6f852e version=14.0.0
Runtime platform arch=amd64 os=linux pid=7847 revision=3b6f852e version=14.0.0
Check and remove all unused containers (both dangling and unreferenced) including volumes.
------------------------------------------------------------------------------------------
Total reclaimed space: 0B
#/etc/gitlab-runner/config.toml這個為其配置檔案
[root@gitlab-dockerhub ~]# ps aux | grep -v grep | grep runner
root 7857 0.0 0.2 151960 17388 ? Ssl 10:27 0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
Runner注冊配置使用
- 擷取GitLab位址和Runner 注冊token(和Jenkins類似,下載下傳一個通用的jar包,然後傳不同都沒密鑰資訊,就可以啟動不同的slave)現在要去找gitlab的token
1ssCE2ri76RiinkMGKgj
注冊的時候有一系列的指令,注冊的過程是一個互動的過程,需要填一些資訊
gitlab url位址-----》token-----》備注,也就是描述資訊
标簽資訊就像Jenkins一樣
[root@gitlab-dockerhub ~]# cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[root@gitlab-dockerhub ~]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=22183 revision=3b6f852e version=14.0.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://139.198.166.235:81
Enter the registration token:
1ssCE2ri76RiinkMGKgj
Enter a description for the runner:
[gitlab-dockerhub]: devops01
Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
現在還是鎖定狀态,這樣runner就注冊好了。後面就要寫執行器了,執行器概念和Jenkins類似,運作的作業,執行器就是幫我們去運作作業的,gitlab執行器有很多種,有docker類型如下:
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
- docker 類型:這時候來了一個作業,運作在docker類型的runner上面,那麼會要你輸入就像的ID,比如maven的鏡像,這個時候在運作作業的時候,就會以設定的這個鏡像起來一個容器,然後在容器裡面進行建構
- shell 類型:執行shell指令
- kubernetes類型:啟動一個pod
這裡選擇shell類型執行器
Enter tags for the runner (comma-separated):
build,k8sbuild,go,java
Registering runner... succeeded runner=1ssCE2ri
Enter an executor: docker-ssh, virtualbox, docker-ssh+machine, shell, ssh, docker+machine, kubernetes, custom, docker, parallels:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
可以看到執行器注冊好了
[root@gitlab-dockerhub ~]# gitlab-runner list
Runtime platform arch=amd64 os=linux pid=26860 revision=3b6f852e version=14.0.0
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
devops01 Executor=shell Token=Tt2yusRjFFFDPQ87Rvsd URL=http://139.198.166.235:81
檢視一下現在的狀态
Indicates whether this runner can pick jobs without tags:在運作作業的時候會配置設定一個标簽,這個标簽會指定在哪個runner上面執行,但作業沒有指定這個标簽,如果想讓其執行勾選就行了。
因為是共享類型的runner,那些作業可以使用這個runner可以在這裡啟用
gitlab-runner register \
--non-interactive \
--url "http://192.168.1.200/" \
--registration-token "Bd6gzBK5evJqa9wN99Nf" \
--executor "shell" \
--description "buildrunner" \
--tag-list "build,k8s,go" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"