二 GitLab CI伺服器的搭建

2021-02-14 運維開發故事
持續集成(CI)

CI,Continuous Integration,持續集成,是軟體開發過程中一個非常重要的環節,在網際網路敏捷開發的過程中,持續集成通常用來進行日常編譯和自動化測試,來保證及時發現提交的問題,避免影響項目進度。
通常持續集成的過程包括:

不同的項目可能步驟有所不同,一些更加規範的公司的項目可能會加入靜態代碼檢查,也有不少的小項目迫於進度和QA的工作壓力,可能連測試過程都沒有。

GitLab CI/CD 轉載自:https://docs.gitlab.com/ee/ci/

持續集成工具

CI工具有很多,目前最為常用應該是Jenkins。Jenkins通常包括一個master和很多個slave。master用於配置和組織節點、任務,slave則用來真正執行配置好的任務。因為用戶群體的龐大,Jenkins上的各種插件,尤其是很多可視化插件都非常豐富,可以幫助很多新手快速配置所需的任務。
gitlab-ci是git官方的持續集成工具,在Git工程管理頁面上,也有專門的CI配置和展示頁。

Github上許多優秀的開源項目的Readme.md中,可以看到有如下圖中「build|passing」的圖標,就是通過markdown元素引用了當前版本CI/CD的結果的展示。

隨著代碼更多地通過Git進行管理,gitlab-ci也成為了常見的CI平臺。就我理解,gitlab-ci是一個簡易版的jenkins,git伺服器兼任了Jenkins master的功能,而我只需要準備好一個slave即可。而且,gitlab-ci的runner支持多重環境,尤其是Docker還有專屬的配置支持。配置過程也非常的簡便無腦,比起Jenkins的slave配置可以說是完勝了。
之前我一直都是在公司的Jenkins服務平臺上做CI(其實也沒做過幾個)的,由於Jenkins權限管控的問題,不方便在slave上嘗試和排查環境問題(可以看我之前的oclint出現環境問題的排查)。剛好現在的公司項目使用的是gitlab-ci,因此就想學習一下和嘗試一下。


gitlab-ci runner的安裝與配置


1.安裝Docker

安裝docker是為了後面跑runner
參考 https://docs.docker.com/install/linux/docker-ce/centos/

curl -sSL https://get.docker.com/ | sh

macOS 我們可以使用 Homebrew 來安裝 Docker。
Homebrew 的 Cask 已經支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:

$ brew cask install docker
==> Creating Caskroom at /usr/local/Caskroom
==> We'll set permissions properly so we won't need sudo in the future
Password:          # 輸入 macOS 密碼
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺  docker was successfully installed!

在載入 Docker app 後,點擊 Next,可能會詢問你的 macOS 登陸密碼,你輸入即可。之後會彈出一個 Docker 運行的提示窗口,狀態欄上也有有個小鯨魚的圖標()。

2.安裝gitlab ci runner

參考連結:https://docs.gitlab.com/runner/install/linux-manually.html
使用二進位文件安裝

# Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

查看是否運行正常

root@i-klhcs1uo:~# gitlab-runner status
Runtime platform                                    arch=amd64 os=linux pid=16705 revision=c127439c version=13.0.0
gitlab-runner: Service is running!

➜  [/Users/mac] brew install gitlab-runner
➜  [/Users/mac] brew services start gitlab-runner
➜  [/Users/mac] gitlab-runner status
Runtime platform                                    arch=amd64 os=darwin pid=61606 revision=21cb397c version=13.0.1
gitlab-runner: Service is running!


3.設置Docker權限

為了讓gitlab-runner能正確的執行docker命令,需要把gitlab-runner用戶添加到docker group裡,然後重啟docker和gitlab ci runner

usermod -aG docker gitlab-runner
service docker restart
gitlan-runner restart


4.gitlab-runner註冊

註冊流程是獲取runner token >>  註冊

4.1 gitlab-runner的類型shared :運行整個平臺項目的作業(gitlab)group:運行特定group下的所有項目的作業(group)specific: 運行指定的項目作業(project)

首先得知道gitlab-runner的類型有哪些,可以在不同的界面獲取runner token就會生成不同類型的runner。。
gitlab-runner是支持分布式的,可以運行在各種環境,極大的方便開發和測試,當安裝好gitlan-runner之後,需要進行註冊到gitlab上,進行關聯,首先登陸gitlab獲取url和tocken
獲取shared類型runnertoken
進入系統設置 -> Runners

取group類型的runnertoken
進入group -> Settings -> CI/CD -> Runners -> Group Runners

取specific類型的runnertoken
進入具體的項目 -> Settings -> CI/CD -> Runners -> Specific Runners

4.2 進行註冊
➜  [/Users/mac] gitlab-runner register
Runtime platform                                    arch=amd64 os=darwin pid=61621 revision=21cb397c version=13.0.1
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.example.com/
Please enter the gitlab-ci token for this runner:
6-uZ1ndZ2NRGp8_TghnL
Please enter the gitlab-ci description for this runner:
[Double-dong.local]: gitlab-ci
Please enter the gitlab-ci tags for this runner (comma separated):
python3.4
Registering runner... succeeded                     runner=6-uZ1ndZ
Please enter the executor: docker+machine, kubernetes, ssh, virtualbox, docker-ssh, parallels, shell, docker-ssh+machine, custom, docker:
docker
Please enter the default Docker image (e.g. ruby:2.6):
python:3.4
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
➜  [/Users/mac] gitlab-runner verify
Runtime platform                                    arch=amd64 os=darwin pid=61635 revision=21cb397c version=13.0.1
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...

Verifying runner... is alive                        runner=NkYLeMbb
➜  [/Users/mac] gitlab-runner list
Runtime platform                                    arch=amd64 os=darwin pid=61640 revision=21cb397c version=13.0.1
Listing configured runners                          ConfigFile=/Users/mac/.gitlab-runner/config.toml
gitlab-ci                                           Executor=docker Token=NkYLeMbbpJ2NyuwxaVKG URL=http://gitlab.example.com/

token:項目的token,用於關聯runner和項目name:runner的名字,用於區分runnertags:用於匹配任務(jobs)和執行任務的設備(runners)

其中url和token在項目的CI配置頁上可以找到。name只是用來區分兩個runner,沒有特殊的作用。tags這個屬性,job和runner都有,用來匹配任務和執行任務的runner。job的tags屬性下一篇會提到,也可以自行查閱.gitlab-ci.yml的語法。runner的tag可以有多個,註冊時用逗號(comma)分隔即可。當某個job的tag是當前runner tags的一個子集時,這個job就可以被分配到當前runner上執行。

舉個慄子runner的tag設為:python2.7,python3.4job的tag設為:python2.7或python3.4,macos就可以在這個runner上執行。job的tag設為:java,這個job就不會被分配到這個runner上。

executor就是執行job的環境,通常我們都會選擇docker,如果有其他需要的也可以自行查閱文檔。
當我們完成設置以後,可以通過vi ~/.gitlab-runner/config.toml打開runner的配置文件,剛才所填寫的信息都會記錄在其中。如果配置了多個runner,就會像圖中一樣,出現兩個runners的section。

註冊成功,返回到gitlab已經是激活的狀態。

➜  [/Users/mac] gitlab-runner register \
  --non-interactive \
  --executor "shell" \
  --url "http://gitlab.example.com/" \
  --registration-token "AvpQDzBCL66sYKyURChH" \
  --description "devops-runner" \
  --tag-list "build,deploy" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

⚠️:這裡說一下如果gitlab伺服器開啟了https,則gitlab-runner在註冊的時候需要把證書的籤名文件,解決辦法如下:

➜  [/Users/mac]  gitlab-runner register \
   --non-interactive \
   --tls-ca-file=/etc/gitlab/ssl/gitlab.example.com.crt  \
   --url "https://gitlab.example.com/" \
   --registration-token "AvpQDzBCL66sYKyURChH" \
   --executor "docker" \
   --docker-image maven:latest \
   --description "runner " \
   --tag-list "run" \
   --run-untagged \
   --locked="false"
Running in system-mode.                            
                                                   
Registering runner... succeeded                     runner=AvpQDzBC
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!


4.3 註冊之後的效果image.png

參考文章:
https://www.jianshu.com/p/30e3f2940078
https://docs.gitlab.com/11.9/runner/register/index.html

                                              ....

相關焦點

  • Gitlab CI 持續集成的完整實踐
    拉取sonar-scanner鏡像執行靜態代碼分析,分析結果評論在commit中或保存於sonarqube;靜態代碼分析結束,執行分發操作,將代碼分發至灰度測試伺服器,並運行;執行接口測試,執行完成後上傳測試結果到x-utest測試平臺。
  • GitLab CI/CD 介紹和使用
    Job 可以失敗,也算該 Stage 成功)(7) .gitlab-ci.ymlGitLab 中默認開啟了 Gitlab CI/CD 的支持,且使用YAML文件.gitlab-ci.yml來管理項目構建配置。
  • GitLab-CI實現持續集成自動發布踩坑記錄
    二:GitLab-Runner的安裝1:採用docker方式安裝docker run -dit \--name gitlab-runner \--restart always \-v /srv/gitlab-runner/config:/etc/gitlab-runner \
  • Gitlab CI 持續集成的完整實踐,看看這篇就夠了
    sonar-scanner 鏡像執行靜態代碼分析,分析結果評論在 commit 中或保存於sonarqube;靜態代碼分析結束,執行分發操作,將代碼分發至灰度測試伺服器,並運行;執行接口測試,執行完成後上傳測試結果到x-utest測試平臺。
  • GitLab 持續集成
    將這個版本的所有文件打包( tar filename.tar * )存檔,發到生產伺服器。生產伺服器將打包文件,解包成本地的一個目錄,再將運行路徑的符號連結(symlink)指向這個目錄,然後重新啟動應用。這方面的部署工具有Ansible,Chef,Puppet等。
  • Gitlab CI/CD 入門實踐指南,看看這篇就夠了
    假設現在有個應用的代碼存儲在 gitlab 上,每天開發者都 push 很多次提交,針對每次 push,你可以創建一系列腳本進行自動測試,降低往應用裡引入錯誤的概率。這就是持續集成,它可應用在包括開發分支在內的多個分支上。持續部署持續部署在持續集成的基礎上更進一步,指將推送指倉庫默認分支的部署至產品環境。
  • gitlab就自帶持續集成工具,而且很好用
    雖然有Gitea、Gogs這樣更加輕量級的git代碼託管平臺,但目前應用最廣泛的,還是gitlab。搭建GitLab過程並沒有想像中的簡單,因為它是Ruby寫的,又是依賴DB,又是依賴Redis,而且有權限要求。但這東西,也就折騰一次,剩下的就是享受它的功能了。
  • 【實踐】Jenkins+GitLab+Android+iOS+CocoaPods+Sonar+GitLog+Fir.im搭建持續
    而市面上持續集成系統琳琅滿目,有Jenkins,Travis,Circleci,Bitrise,Flow.ci 我們該如何選擇,那就參考大數據,朝內還是用百度指數,目前只收錄Jenkins和Travis.Jenkins:藍色      Travis:綠色
  • GitLab+Jenkins持續集成+自動化部署
    說明:  通過gitlab+Jenkins實現代碼的自動更新同步代碼到web伺服器站點目錄。此處示例後端web伺服器使用nginx。可以看到Jenkins已經成功從gitlab上面拉取代碼,接下來我們先將Web站點配置好再看如何自動同步到Web伺服器上面。
  • GitLab 13.7,增加MR審閱者,部署失敗時自動回滾等功能
    最後但並非最不重要的一點是,支持預定義變量與依賴項代理一起使用,而不必依賴於自己定義的變量或gitlab.ci-yml文件中的硬編碼值。這提供了一種更可擴展且更有效的方式來開始代理和緩存鏡像。可以直接從gitlab-ci.ymlAPI和API中更改canary的權重,但是在UI中,可以查看部署並直接從Deploy Boards縮放Pod。這樣可以更好地控制手動或定時增量部署,並可以更好地緩解風險。
  • 一種基於 gitlab 的適用於版本發布的 git-flow 協作規範
    最近自己搞了一個基於 gitlab 的適用於版本發布(非持續集成)的脫胎於 git-flow
  • 直播軟體搭建,流媒體伺服器的應用有多重要
    直播軟體搭建,使用流媒體伺服器是必要的事,在直播軟體搭建完成後的運營中,流媒體伺服器擔負著音視頻的播放、傳遞等工作,很多運營商不能理解流媒體伺服器的重要性體現在哪,今天就給大家介紹一下。直播軟體搭建一、認識流媒體伺服器直播軟體搭建使用流媒體伺服器的核心在於,它可以向用戶提供視頻服務,主要功能是對流媒體內容進行採集、緩存、調度和傳輸播放
  • GitLab 13.5版本,移動APP掃描,組Wiki,多文件代碼片段等
    通過Generic Package Registry,可以在原始包中尚不支持的GitLab中存儲其他二進位類型,並將二進位包可以作為發行附件,從而使發行和構建團隊可以在GitLab中有效地工作。將二進位包附加到發布新版本中可以將二進位文件附加到的發行標籤gitlab.ci-yml。這擴展了對發行資產的支持,使其不僅包括資產連結或原始碼,還包括二進位文件。這使得開發團隊更容易採用GitLab並使用它來自動化發布過程。
  • 怎麼在無公網ip區域網內主機搭建web伺服器
    現在有很多企業都需要搭建一個屬於自己的網站、商城,來便於客戶瀏覽公司信息和購買商品。 由於網站放置在公司的伺服器,伺服器所屬網絡是內網區域網,公網IP位址資源枯竭,且寬帶屏蔽網站80埠,導致外網遠程訪問WEB伺服器面臨著諸多挑戰。
  • Git伺服器錯誤配置導致尼桑原始碼洩露
    Git伺服器錯誤配置導致尼桑原始碼洩露 尼桑運行的Bitbucket Git伺服器由於使用admin/admin默認憑證導致原始碼洩露。尼桑運行的Bitbucket Git伺服器由於使用admin/admin默認憑證導致原始碼洩露。
  • 利用穿越派搭建自己專屬的私有雲盤伺服器
    拓撲圖如下:搭建穿越派·派盤私有雲伺服器,硬碟容量越大越好,伺服器更好。數據鏡像 作為備份伺服器;用來備份同步派盤數據,保證數據安全。(如果是個人使用,大家可以利用退役的舊電腦,畢竟私有雲伺服器需要24小時開機,也不會經常在上面辦公。數據鏡像備份伺服器可以配置在我們常用電腦或公司電腦)有人說,如果不用數據鏡像伺服器是否可以?當然。這個大家根據各自的需求選擇部署就可以了。
  • 玩轉嵌入式之如何在Linux系統中搭建tftp伺服器·圖文視頻
    我們知道,Windows下使用「tftpd32.exe」這款軟體可以很方便地在Windows下搭建的tftp伺服器。但是,當我們做嵌入式linux開發的時候,如果用Windows搭建tftp伺服器,用的還是虛擬機,就得在虛擬機中開啟共享文件夾,然後再把文件放入共享文件夾內,最後傳輸到開發板中執行。
  • 租用臺灣伺服器搭建論壇網站有哪些優勢?
    許多經常上網的用戶會發現,很多部署在海外伺服器上的論壇網站實際上都部署在臺灣伺服器上。與其他地區的海外伺服器相比,租用臺灣伺服器建立論壇網站有哪些優勢?那麼下面磐石雲天小編就來和大家一起分析這個問題。因為論壇業務不像遊戲行業那樣,即使是幾千人同時在線刷帖也不會給伺服器造成很大的壓力。
  • 如何搭建國際版我的世界伺服器
    不久前,我通過學習與摸索,成功地在雲端建了一個國際版1.16.1MC純淨版伺服器,並用HMCL客戶端開始了愉快的划水。寫這篇文章,是為了記錄一下自己的建服歷程,並且希望能幫助到一些需要的朋友。如果您沒有建服經驗,在做好支出預算的情況下,可以按照本文【除了租用伺服器以外的】內容搭建一個MC伺服器。
  • 饑荒聯機版如何搭建私人專用伺服器
    今天給大家說一下如何搭建自己的專用伺服器,和小夥伴一起玩,但是你突然有事要出門一趟,或者你去吃飯,而你又是房主,你在這掛機可能會被蟻獅震,可能會被火狗咬,引來巨鹿,引來熊,死了掉隊友精神,而你又不想買專用伺服器,這個時候私人專用伺服器的用處就凸顯出來了