gitlab和jenkins做持續整合構建教程

ataola發表於2022-07-02

背景介紹

上一個輪迴,我花了三篇文章的時間著重向大家介紹了在條件有限的情況下,如何優雅地進行前端發版和迭代。慶七一,熱烈慶祝香港迴歸,人民生活水平越來越好,昨天上午我自掏腰包買了臺伺服器,決定由冷兵器指令碼程式設計部署時代進入熱武器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 這三個,具體地參見:https://www.jenkins.io/doc/administration/requirements/java/

這裡介紹下沸騰廠的映象,有需要的君可自取,https://mirrors.huaweicloud.com/home, 對於的 jdk 下載檔案在這裡: https://mirrors.huaweicloud.com/java/jdk/

具體地安裝就是一路火花帶閃電地 next,然後配置 JAVA_HOME,例如我的就是C:\Program Files\Java\jdk-11.0.1, 再然後追加%JAVA_HOME%\bin;到 path,最後配置 CLASSPATH,記不住那一串 jar 包,寫個"."也是 OK 的。

Jenkins 安裝教程官網已經寫的非常詳細了,我不再贅述,請看這裡: https://www.jenkins.io/doc/book/installing/windows/

如果你是 Linux 使用者,可以看我很久以前積灰的文章, Linux 下安裝 JDK: https://www.cnblogs.com/cnroadbridge/p/15221231.html, Linux 下安裝 Jenkins: https://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,用到的時候放出來,潤潤潤,不用的時候把它停掉,豈不是美哉,我簡單地貼一份配置,具體的有興趣的讀者看這裡: https://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

  • 文中提及的上期的三篇文章是什麼?

  • 密碼忘記了怎麼辦?
    找到.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 構建。如有你有興趣瞭解,具體的可以看這裡,https://about.gitlab.com/features/continuous-integration/

最後

希望我老闆如果不小心看到這篇文章,能感動地給我漲點薪水吧,因為自費買伺服器我這都快吃不起東北大米了,23333333。

相關文章