天天看點

GitLab CI/CD:開發和運維管理的效率神器

作者:程式猿阿諾

DevOps 真能給開發和運維帶來效率嗎?

效率,是任何一家網際網路公司孜孜以求的,但偏偏有不少公司在開發管理上卻做着最低效的事情。比方說開發與運維之間的關系是割裂的,資訊不對等,造成許多時間成本浪費在溝通上。甚至部署服務是依賴于運維人員的手工操作,這又是徒增人力成本。

一到新服務上線,就是開發工程師和運維工程師最緊張的時刻。大家熬通宵替換程式,一旦出現異常情況還得全部復原。然後開發人員白天緊急改 bug,又到深夜來找運維更新。可以說是苦不堪言。

GitLab CI/CD:開發和運維管理的效率神器

那有辦法減少這樣的痛苦,實作降本增效嗎?

DevOps 運動的興起,給業界提供了一個參考答案。但想要說清楚這個概念,還挺不容易。有人說 DevOps 就是讓程式員幹了運維的事兒,也有人說必須安裝了什麼樣的工具,才能叫 DevOps。

抛開這些争論,且回到 DevOps 本身來看,它是兩個單詞的組合,分别是 Development 與 Operations。前者代表開發過程中包含的動作,例如分析需求、做設計、寫代碼、測試等;後者表示程式在上線營運中發生的活動,包括部署、服務治理、更新維護等。

GitLab CI/CD:開發和運維管理的效率神器

很明顯,如果能以自動化的方式打通前後這兩個過程,那麼溝通就會更順暢,而運轉的流程也會加快。DevOps 的核心理念就在于充分的資訊共享與使用自動化手段,實作商業利益的最大化。

是以大家能對 DevOps 的理念達成一緻,那麼就能将它的威力充分發揮出來。我們再接着了解兩個重要的概念,以及一個稱手的工具吧。

GitLab CI/CD 初探

DevOps 中兩個重要的概念分别是 CI 和 CD。CI 是 Continuous Integration 的縮寫,表示持續內建。CD 是指 Continuous Delivery 持續傳遞,或者 Continuous Deployment 持續部署。

持續內建的要求是代碼送出後,管理工具在檢測到代碼變更後,會自動拉取分支代碼進行建構,包括編譯與單元測試。有更高要求的,還要完成子產品測試與內建測試。

持續傳遞,則是在持續內建的基礎上,送出可用于生産環境部署的正式程式、代碼與配置檔案。在持續傳遞階段,也要進行程式的自動化測試,并實作自動化釋出。

持續部署,是在持續傳遞的基礎上,将代碼變更應用到生産環境。它可以借助于多種自動化的部署手段,實作程式的平滑更新/復原。

GitLab CI/CD:開發和運維管理的效率神器

GitLab CI/CD 就是一款助力 DevOps 活動的優秀開源工具。從名稱上可以看出來,它是和開源代碼托管平台 GitLab 緊密結合的,GitLab 也是大多數企業做代碼托管的首選。

GitLab CI/CD 的核心包括兩個部分,一是 GitLab runner 服務,另一個則是配置.gitlab.ci.yml。

摩拳擦掌想要上手了嗎?那就拿起《GitLab CI/CD 從入門到實戰》這本書吧,所有你想知道的都在這裡面了。讓我們先從安裝 GitLab runner開始吧。

GitLab CI/CD:開發和運維管理的效率神器

環境準備:安裝部署 GitLab runner

GitLab runner 是由 GitLab 官方用 golang 開發的軟體包,用于運作 GitLab CI/CD 的流水線作業。因為這是一款軟體,是以在主流作業系統上都可以運作它,例如 Linux、MacOS、Windows等。

接下來我們以 Linux 環境為例,說明安裝與注冊過程。

安裝服務

系統:x86_64 GNU/Linux

注意:GitLab 與 GitLab runner 的版本須保持一緻。

下面有通過 docker 和系統指令行兩種安裝方式,請根據自己的環境進行任選一種執行。

  • 首選 docker 方式安裝。因為 docker 已經是運維自動化部署的标配,使用 docker 可以節省不少操作步驟。以下就是用一條指令行搞定:
GitLab CI/CD:開發和運維管理的效率神器

Docker 安裝 GitLab Runner

  • 其次可采用指令行方式安裝,分為兩步,下載下傳 RPM 包,安裝包:
GitLab CI/CD:開發和運維管理的效率神器

使用 RPM 安裝 GitLab runner

注冊 runner

要為某個項目運作流水線,就要為項目注冊一個 runner,實際上就是将 runner 與項目進行綁定。因為GitLab 與 GitLab runner 皆為同一家公司産品,内部協定無縫連接配接,可以實作順暢通信。

一台機器上的 GitLab runner 服務支援多個 runner 執行個體,每個執行個體綁定一個項目。這樣可以友善地實作分布式配置管理,運維工程師應當注意到這個優點。

使用 docker 注冊也是一條指令行搞定:

GitLab CI/CD:開發和運維管理的效率神器

注冊 runner

在《GitLab CI/CD 從入門到實戰》書中,對上述指令行參數有詳細解釋。如果還有特殊需求要修改配置檔案config.toml,也請查閱書中相關内容。

至此,GitLab runner 已經在機器裡從無到有建立起來了,接下來我們了解流水線的使用。

最簡實戰:流水線的配置與使用

流水線,就是将 CI/CD 過程中要實作的操作步驟以成組的自動化方式實作。這和工業生産的流水線很類似,一端輸入原材料,經過流水線加工之後,輸出成型産品。

GitLab CI/CD 實作流水線的配置都在.gitlab-ci.yml檔案中。它預設儲存在項目的根目錄下,可以直接用 vim 這樣的編輯器修改,也可以在 GitLab 中修改。推薦使用官方提供的 Pipeline Editor 去編輯。

GitLab CI/CD:開發和運維管理的效率神器

Pipeline Editor

.gitlab-ci.yml使用 YAML 資料格式,在編輯的時候要遵循規範,其基本文法特點是:

  1. 大小寫敏感;
  2. 使用縮進表示層次關系;
  3. 縮進隻支援空格;
  4. 同層元素要左對齊;
  5. 隻支援“#”字元的單行注釋。

.gitlab-ci.yml的内容定義了一條完整的流水線,它由多個階段組成,每個階段包含了若幹作業。一個階段内的全部作業執行完畢,才視為該階段完成,然後開啟下一個階段的執行。作業是具體的任務,例如設定一個環境變量、編譯項目源檔案,或者打包二進制程式與配置檔案等。

GitLab CI/CD:開發和運維管理的效率神器

階段和作業展示

下面看一個最簡流水線示例:

GitLab CI/CD:開發和運維管理的效率神器

簡單流水線示例

從上圖可知,該流水線包含了三個階段,分别是 install、build、deploy。每個階段内包含一條 echo 指令列印語句作為作業。在預設情況下,代碼被推送到 GitLab 時,就會觸發 GitLab runner 去執行流水線。在控制台會依次輸出“hello xxx”的内容。

# hello install
 # hello build
 # hello deploy           

不知道大家注意到沒有,配置檔案中有stages,stage,script這些單詞,它們就是驅動流水線工作的關鍵詞。可以說,把關鍵詞摸透了,就能将 GitLab CI/CD 的威力發揮出來。

掌握關鍵詞,搞定複雜需求

從上一節中的内容可以知道,關鍵詞在 GitLab CI/CD 體系中驅動着自動化流程運轉。《GitLab CI/CD 從入門到實戰》基于 14.1.0 版本編寫,涉及 35 個關鍵詞,包括 5 個全局關鍵詞,31 個作業關鍵詞。其中 variables 可同時用于全局和作業。

每個關鍵詞都有其具體功能和意義,初學者要是挨個去看,可能很快就會迷失在細節裡。《GitLab CI/CD 從入門到實戰》按照使用頻率、複雜程度進行分類,幫我們梳理出了初階、中階、高階三個類别。可以循序漸進地學習,直至搞定複雜需求。

我們現在來了解一下,本文中出現的三個關鍵詞的功能與配置。

stages

全局關鍵詞,用來聲明目前流水線中總共包含多少階段,值以 YAML 的數組形式儲存。這部分一般定義在.gitlab-ci.yml檔案頂部,階段名稱有 5 個可選預設值:.pre,build,test,deploy,.post。使用者也可以根據實際情況,自定義階段名稱。

GitLab CI/CD:開發和運維管理的效率神器

自定義 stages 的值

stage

作業關鍵詞,是對某一個具體階段的定義,其值必須取自 stages 已定義值,它的預設值也與 stages 相同。相關的作業會在該階段下展開,要注意的是,如果配置中沒有定義 stages,作業也沒有指定 stage,則該流水線全過程皆預設為 test。

script

作業關鍵詞,顧名思義,這是用來定義作業要執行的腳本,script 最終是由 runner 來執行。在 Linux 環境下,通常用 shell 腳本語言來編寫 script 内容。

往往一個作業會由多條 shell 指令組成,script 支援以 YAML 數組形式排列指令。數組每行以“-”開頭,如下例中的“- npm intall”、“- npm build”。

GitLab CI/CD:開發和運維管理的效率神器

script 支援多行腳本

如果指令行中包含複雜符号,例如雙引号等,則可以使用單引号将 shell 指令行包括起來。這樣在執行時就能保證完整性,不會出現與預期不符的情況。

GitLab CI/CD:開發和運維管理的效率神器

使用單引号将複雜内容括起來

上述三個關鍵詞是最常用的,屬于初階分類。其它關鍵詞也都可以從屬性、功能、定義值等方面去學習掌握,結合實際工作進行摸索嘗試,逐漸成長為 DevOps 應用的高手。

結語

需要再次強調的是,工具不能代替理念。網際網路技術人首先要認同并接受 DevOps 對于資訊開放共享、工作自動化的理念,然後通過使用工具去達成目标。

千萬不能認為安裝上 GitLab CI/CD 工具,就等于在實踐 DevOps 了。有的公司大力推進工具落地,但最後執行時荒腔走闆,工具成了擺設。明面上通過工具走流程,實際上測試、打包、部署還都是手工完成,這樣就失去了實際意義。

GitLab CI/CD 為實作 DevOps 提供了很好的技術支援,在大家都統一認識的基礎上,一定可以将工具的能力發揮到最大。同時在《GitLab CI/CD 從入門到實戰》的指引下,可以縮短學習周期,降低實踐成本,盡快形成生産力。

想通過實踐 DevOps 通往高效之路嗎?那就掌握好 GitLab CI/CD 這款效率神器,給自己裝上高速發動機,準備起飛吧。

GitLab CI/CD:開發和運維管理的效率神器

#頭條創作挑戰賽#

繼續閱讀