Gitlab的CI/CD初嘗試
初衷:今天公司的前端和測試人員吵起來了。原因是測試埋怨前端人員把Bug的狀態更改為已解決,結果代碼根本沒提交,而前端人員埋怨測試測的太頻繁了,需要打幾個環境的包不方便。又要改東西又要頻繁打包費時間。凡正各有各的理由,就是不想辦法解決問題。
哎,沒辦法,為了解決這種問題,我打算看看Gitlab的CI集成,如果能弄上這個那麽開發只管提代碼就行了,會自動構建環境。
我這也是現學現賣,今天照著官網和查資料,剛把基本的流程跑通,中間還是費了點時間的,這裏記錄下
gitlab ci/cd快速入門
按照官網上說的,要使用CI,就弄兩個東西就行了
1 在你的項目工程中創建.gitlab-ci.yml文件,這個文件主要是配置Piplines和stages以及腳本。gitlab-runner就是執行這個文件來構建環境的。
2 安裝和配置gitlab-runner,一個Go寫的工具,用於執行.gitlab-ci.yml裏面的腳本。
一 創建.gitlab-ci.yml
stages:
- deploy
deploy_develop:
stage: deploy
tags:
- nodejs
script:
- echo "hello,ci/cd"
only:
- dev
上面的文件我定義了一個piplines(deploy), 然後定義了一個job(deploy_develop), 只對dev分支有效,執行這個job時,會輸出"hello,ci/cd"
二 gitlab-runner的安裝和配置
這個gitlab-runner不需要和gitlab在一臺機器上,甚至可以是在本地機器。相反官方也建議單獨是最好的,構建必須要耗性能呀,不影響其它業務就好。
安裝gitlab-runner
https://docs.gitlab.com/runner/install/linux-manually.html
我是按照官方的步驟一步步來的,系統是Centos,如果是其它系統按照上面的安裝方式就行
shell sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
如果需要設置環境變量,則設置/usr/local/bin到PATH中
設置可執行權限
shell sudo chmod +x /usr/local/bin/gitlab-runner
增加一個單獨用戶用於gitlab-runner
shell sudo useradd --comment ‘GitLab Runner‘ --create-home gitlab-runner --shell /bin/bash
安裝服務和啟動
shell sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start
三 配置gitlab-runner
安裝好gitlab-runner後,需要註冊下,runner和gitlab之間通過Api通信的
gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://172.18.10.22/
上面這個url從gitlab的pipelines裏面的Specific Runners去找
四 遇到的問題
- 提交了代碼沒有觸發,一直停留在pending
報錯:This job is stuck, because you don‘t have any active runners that can run this job.
需要tags,值為在gitlab-runner註冊的時候設置的
stages:
- deploy
deploy_develop:
stage: deploy
tags:
- nodejs
script:
- echo "hello,ci/cd"
only:
- dev
- 遇到使用git clone拉取代碼權限問題
我安裝gitlab-runner的時候使用的是新建的一個用戶,然後在gitlab-runner的安裝機器上使用git clone代碼時報權限問題。
需要將gitlab對應的公鑰加到用戶的.ssh/目錄下面
經過上面的步聚,基本的CI就完成了,在以後的開發中,只需要將代碼合到相應的分支,就會按照.gitlab-ci.yml裏面的腳本構建了,記得在上家公司剛看到這個的時候感覺好厲害呀,只不過一直沒動手弄過,今天自已動手試了下不光印象要深刻些,感覺也沒有像以前那麽神秘了。
我這個只是跑通了基本的,接下來還用弄nodejs和webpack前端打包這個,這個到時候弄一個shell腳本,然後定義在gitlab-ci.yml裏面就行了。
PS:這裏不得不噴下公司的運維,平時啥事都不幹,四個運維除了平時發個版本一點事情沒有,而且不管是環境還是什麽,從來不管的,都是開發自已在弄。要一個線上的只讀權限庫也不肯給,說有安全問題,線上的有些問題完全沒法查。
而且,更可笑的時,線上的發版你都沒法想像,都是我們本地打成壓縮包到指定的文件夾,然後他們再一臺臺機器發布,什麽年代了,還整得這麽原始。有這時間好好研究下現在的工具提高效率多好。關鍵是我們的leader也差不多這想法,導致這種事一直壓著。
就像今天安裝Ci這個,我開始以為gitlab-runner一定要裝在gitlab的機器,去找他們開權限,結果他們以沒有聽過Ci是啥和可能有安全性為由拒絕了,後面看到官方文檔說可以不在一臺機器,就找了一臺我們部門內部的一臺測試機安裝的。哎,真是無語了。
程序員的危機大部分也是自已造成的,自已不思進取。等那天被淘汰時,又會責怪現實的無情,須不知這一切和自已有很大的關系,很慶幸我還一直在努力,保持學習的習慣。
Gitlab的CI/CD初嘗試