gitlab和jenkins做持續集成構建教程
背景介紹
上一個輪迴,我花了三篇文章的時間著重向大家介紹了在條件有限的情況下,如果優雅地進行前端發版和迭代。慶七一,熱烈慶祝香港回歸,人民生活水平越來越好,昨天上午我自掏腰包買了台伺服器,決定由冷兵器腳本編程部署時代進入熱武器CICD 時代。
而今,山河無恙,飛機腳本終於不用再飛寫第二遍了,敬禮!
gitlab & jenkins: 我代表 CICD 接管構建部署,你們可以下崗,我們上崗!
手工苦力勞動:那我走。。。。。
需求分析
我們在處理電腦問題時,應該去思考這樣一個理念,「能坐著就不站著,能躺著就不坐著,懶對於程式設計師來說是一種美德,應該發揚光大」。關於前端發版這塊的內容,就很雞肋,食之無味棄之可惜。這塊東西很死板,沒什麼成長的,沒什麼經驗的朋友可能就是一通 npm 命令,再一頓拖拉彈拽 GUI 操作,然後完事,稍微有點覺醒或者被動覺醒的,可能會抽象出一些電腦邏輯釋放一些腳本技能做這件事,再者之,公司老闆家裡條件好的或者是 VP、CTO 重視的,可能會搞一套比較規範的 DevOps 流程,本質還是在與時間賽跑,把一些低優先順序或者阻塞工作流的事情,交給對應的擅長做這件事的法器去做,剩下的時間,大家該划水的划水,該學習的學習,該找對象的找對象,勸君莫惜金縷衣,勸君惜取少年時,花開堪甚至須折,莫待無花空折枝。
環境要求
可能眼尖的同學會看到我上圖中有個 SecoClient,它是沸騰廠開發的一個偉屁恩客戶端,由於 gitlab 伺服器是在另一套體系環境,所有要連上它,但是坑比的點在於,連上它以後,在公司的其他同事將無法訪問我們連接網線的區域網環境,在家的話那就更不行了,抱著試試看的心態去試試連上 secoclint 臨時分配的網路可以進行區域網訪問嘛,發現也還是不行,實屬無奈,何以解憂,唯有砸錢。
官網寫的配置要求是:
Minimum hardware requirements:
256 MB of RAM
1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container)
Recommended hardware configuration for a small team:
4 GB+ of RAM
50 GB+ of drive space
這個很重要,如果你是買了雲廠商 1G1 核的迷你型機,那我勸你別往下搞了,卡成翔警告。2G2 核勉強磕磕碰碰能跑, 最好是給一個 4G4 核的機子,那就差不多了。
樓主我選的是 2G2 核,外加配了點虛擬記憶體,不是很理想,如果不是 secoclient 的原因,我其實更傾向於用 Linux 去做這件事。
Jenkins 環境安裝與配置
安裝
這裡是以 Windows 下的開發環境為例的,所有我會介紹下 windows 的,Linux 後面也會提及一下。
安裝 jenkins 的前置條件是電腦有 JAVA 運行的環境,安裝 jdk 也很講究,不是所有版本都可以,你可以簡單地記一下 8,11,17 這三個,具體地參見://www.jenkins.io/doc/administration/requirements/java/
這裡介紹下沸騰廠的鏡像,有需要的君可自取,//mirrors.huaweicloud.com/home
, 對於的 jdk 下載文件在這裡: //mirrors.huaweicloud.com/java/jdk/
具體地安裝就是一路火花帶閃電地 next,然後配置 JAVA_HOME,例如我的就是C:\Program Files\Java\jdk-11.0.1
, 再然後追加%JAVA_HOME%\bin;
到 path,最後配置 CLASSPATH,記不住那一串 jar 包,寫個”.”也是 OK 的。
Jenkins 安裝教程官網已經寫的非常詳細了,我不再贅述,請看這裡: //www.jenkins.io/doc/book/installing/windows/
如果你是 Linux 用戶,可以看我很久以前積灰的文章, Linux 下安裝 JDK: //www.cnblogs.com/cnroadbridge/p/15221231.html
, Linux 下安裝 Jenkins: //www.cnblogs.com/cnroadbridge/p/15221273.html
, 當然,這裡既然你已經選擇用 Linux 了,那為什麼不用 Docker 呢?嗯,這個我後面再介紹。
jenkins 插件配置
這裡簡單粗暴一點地做法就是點擊推薦安裝對應地插件,然後裝一下 NodeJS、Publish Over SSH、Git plugin 這幾個插件,對應前端構建綽綽有餘了。如果你插件安裝不上,網上一種做法是切換成清華源啥的,你可以試一下,我覺得更好地做法是,我建議你科學 fq。
通用配置
Step 1: 點擊首頁的 Manage Jenkins 進行配置
Step 2: 點擊 Configure System 進行系統配置
具體的關注一下幾點, Jenkins Location 里的 Jenkins URL 填你的公網 IP,郵箱隨便填個如果你不用郵件服務的話,
gitlab 可仿照如下配置:
publish over
Step 3: 點擊 Global Tool Configuration 進行全局工具配置
這裡你主要關注下 git 就好, 如果你不配置,很有可能拉不下來,所以這裡點一下
Step 4: 點擊 Security 下的 manage credentials
你可以仿照下圖,添加適合你的 gitlab API token 或者賬戶密碼
gitlab 的 API TOken 是這樣的
好了,到這裡安裝配置相關的大致就 OK 了。
結合 gitlab 進行持續構建
這裡我以構建集成一個 vue 項目為例–卧龍機構端,向大家介紹如何結合 Jenkins 進行持續構建。
Step1:創建項目
Step2:填寫配置
這裡描述隨便寫點東西吧。
gitlab 伺服器配置
gitlab 倉庫配置
構建前對伺服器做點事
構建命令
構建命令後執行, 最後點擊保存就好了,如果你點應用的話,其實就是暫存的意思。
最後點擊 build now 就可與開始構建了
點擊構建歷史可以看到相關的歷史, 點擊控制台,可以看到相關的構建日誌,這方便了回溯,定位問題的根源。
好的,至此教程差不多就接近尾聲了, 你學會了嗎?
介紹一個新思路
我本意是想搞一個去中心化jenkins,畢竟公司給發的美帝聯心想有20GB記憶體,足夠撐起jenkins的一片天,但是問題就在於,之前提到的secoclient連上了以後,我就與我的同事失聯了,雖然我在我本地可以搞持續集成,但是他們不可以訪問的到,獨樂樂不如眾樂樂,讓對應的同事共享下我的Jenkins,我們對應的開發人手養一隻Jenkins,好像也不太現實,畢竟windowser。emmm,如果你是mac或者linux,那完全是可以搞去中心化的Jenkins的,人手養一隻Jenkins,用到的時候放出來,潤潤潤,不用的時候把它停掉,豈不是美哉,我簡單地貼一份配置,具體的有興趣的讀者看這裡: //hub.docker.com/_/jenkins
docker-compose.yml
version: "3.7"
services:
jenkins:
image: jenkinsci/blueocean
ports:
- 8080:8080
- 50000:50000
networks:
- jenkins
volumes:
- jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
networks:
jenkins:
volumes:
jenkins:
FAQ
-
文中提及的上期的三篇文章是什麼?
-
基於 bat 腳本的前端發布流程設計與實現: //www.yuque.com/ataola/blog/nul1i4
-
使用 Shell 腳本優化 Linux 伺服器上部署流程: //www.yuque.com/ataola/blog/ece4x8
-
基於 bat 腳本的前端發布流程的優化: //www.yuque.com/ataola/blog/mye713
-
-
密碼忘記了怎麼辦?
找到.jenkins
目錄,例如C:\ProgramData\Jenkins\.jenkins
, 然後打開config.xml, 將<useSecurity>false</useSecurity>
,然後重啟,進入到Jenkins現在暫時是沒有密碼的,你可以再次設置下就OK了。 -
記憶體不足怎麼辦?
全局安裝下cross-env和increase-memory-limit
, 然後package.json追加scripts "fix-memory-limit": "cross-env LIMIT=10240 increase-memory-limit"
- vite2.7.x 打包遇到 (vite:css-post) renderChunk error 怎麼辦?
卸載 vite,升級到最新版可破此功.
- 改成清華源,還是裝不上插件怎麼辦?
建議自強,嗯,科學地自強哈.
- 那你為什麼不直接用 gitlab runner 呢?
主要還是各方面受限,因為對應搞 gitlab 伺服器的人,他沒裝 gitlab runner,所有也無法運行一些 gitlab.yml 配置,進行 CICD 構建。如有你有興趣了解,具體的可以看這裡,//about.gitlab.com/features/continuous-integration/
最後
希望我老闆如果不小心看到這篇文章,能感動地給我漲點薪水吧,因為自費買伺服器我這都快吃不起東北大米了,23333333。