主頁 > 軟體工程 > GitLab CI/CD

GitLab CI/CD

2020-09-11 02:36:17 軟體工程

GitLab CI/CD 是一個內置在GitLab中的工具,用于通過持續方法進行軟體開發:

  • Continuous Integration (CI)  持續集成
  • Continuous Delivery (CD)     持續交付
  • Continuous Deployment (CD)   持續部署

持續集成的作業原理是將小的代碼塊推送到Git倉庫中托管的應用程式代碼庫中,并且每次推送時,都要運行一系列腳本來構建、測驗和驗證代碼更改,然后再將其合并到主分支中,

持續交付和部署相當于更進一步的CI,可以在每次推送到倉庫默認分支的同時將應用程式部署到生產環境,

這些方法使得可以在開發周期的早期發現bugs和errors,從而確保部署到生產環境的所有代碼都符合為應用程式建立的代碼標準,

GitLab CI/CD 由一個名為 .gitlab-ci.yml 的檔案進行配置,改檔案位于倉庫的根目錄下,檔案中指定的腳本由GitLab Runner執行,

1. GitLab CI/CD 介紹

軟體開發的持續方法基于自動執行腳本,以最大程度地減少在開發應用程式時引入錯誤的機會,從開發新代碼到部署新代碼,他們幾乎不需要人工干預,甚至根本不需要干預, 

它涉及到在每次小的迭代中就不斷地構建、測驗和部署代碼更改,從而減少了基于已經存在bug或失敗的先前版本開發新代碼的機會,

Continuous Integration(持續集成)

假設一個應用程式,其代碼存盤在GitLab的Git倉庫中,開發人員每天都要多次推送代碼更改,對于每次向倉庫的推送,你都可以創建一組腳本來自動構建和測驗你的應用程式,從而減少了向應用程式引入錯誤的機會,這種做法稱為持續集成,對于提交給應用程式(甚至是開發分支)的每項更改,它都會自動連續進行構建和測驗,以確保所引入的更改通過你為應用程式建立的所有測驗,準則和代碼合規性標準, 

Continuous Delivery(持續交付)

持續交付是超越持續集成的更進一步的操作,應用程式不僅會在推送到代碼庫的每次代碼更改時進行構建和測驗,而且,盡管部署是手動觸發的,但作為一個附加步驟,它也可以連續部署,此方法可確保自動檢查代碼,但需要人工干預才能從策略上手動觸發以必輸此次變更,

Continuous Deployment(持續部署)

與持續交付類似,但不同之處在于,你無需將其手動部署,而是將其設定為自動部署,完全不需要人工干預即可部署你的應用程式, 

1.1. GitLab CI/CD 是如何作業的

為了使用GitLab CI/CD,你需要一個托管在GitLab上的應用程式代碼庫,并且在根目錄中的.gitlab-ci.yml檔案中指定構建、測驗和部署的腳本,

在這個檔案中,你可以定義要運行的腳本,定義包含的依賴項,選擇要按順序運行的命令和要并行運行的命令,定義要在何處部署應用程式,以及指定是否 要自動運行腳本或手動觸發腳本, 

為了可視化處理程序,假設添加到組態檔中的所有腳本與在計算機的終端上運行的命令相同,

一旦你已經添加了.gitlab-ci.yml到倉庫中,GitLab將檢測到該檔案,并使用名為GitLab Runner的工具運行你的腳本,該工具的操作與終端類似,

這些腳本被分組到jobs,它們共同組成一個pipeline,一個最簡單的.gitlab-ci.yml檔案可能是這樣的:

before_script: 
  - apt-get install rubygems ruby-dev -y 

run-test: 
  script: 
    - ruby --version 6

before_script屬性將在運行任何內容之前為你的應用安裝依賴,一個名為run-test的job(作業)將列印當前系統的Ruby版本,二者共同構成了在每次推送到倉庫的任何分支時都會被觸發的pipeline(管道),

GitLab CI/CD不僅可以執行你設定的job,還可以顯示執行期間發生的情況,正如你在終端看到的那樣:

為你的應用創建策略,GitLab會根據你的定義來運行pipeline,你的管道狀態也會由GitLab顯示: 

最后,如果出現任何問題,可以輕松地回滾所有更改:

 

1.2. 基本 CI/CD 作業流程

一旦你將提交推送到遠程倉庫的分支上,那么你為該專案設定的CI/CD管道將會被觸發,GitLab CI/CD 通過這樣做: 

  • 運行自動化腳本(串行或并行) 代碼Review并獲得批準
    • 構建并測驗你的應用
    • 就像在你本機中看到的那樣,使用Review Apps預覽每個合并請求的更改  
  • 代碼Review并獲得批準
  • 合并feature分支到默認分支,同時自動將此次更改部署到生產環境
  • 如果出現問題,可以輕松回滾

通過GitLab UI所有的步驟都是可視化的 

 

1.3. 深入了解CI/CD基本作業流程

如果我們深入研究基本作業流程,則可以在DevOps生命周期的每個階段看到GitLab中可用的功能,如下圖所示:

1. Verify

  • 通過持續集成自動構建和測驗你的應用程式
  • 使用GitLab代碼質量(GitLab Code Quality)分析你的源代碼質量
  • 通過瀏覽器性能測驗(Browser Performance Testing)確定代碼更改對性能的影響
  • 執行一系列測驗,比如Container Scanning , Dependency Scanning , JUnit tests
  • 用Review Apps部署更改,以預覽每個分支上的應用程式更改 

2. Package

  • 用Container Registry存盤Docker鏡像
  • 用NPM Registry存盤NPM包
  • 用Maven Repository存盤Maven artifacts
  • 用Conan Repository存盤Conan包 

3. Release

  • 持續部署,自動將你的應用程式部署到生產環境
  • 持續交付,手動點擊以將你的應用程式部署到生產環境
  • 用GitLab Pages部署靜態網站
  • 僅將功能部署到一個Pod上,并讓一定比例的用戶群通過Canary Deployments訪問臨時部署的功能(PS:即灰度發布)
  • 在Feature Flags之后部署功能
  • 用GitLab Releases將發布說明添加到任意Git tag
  • 使用Deploy Boards查看在Kubernetes上運行的每個CI環境的當前運行狀況和狀態
  • 使用Auto Deploy將應用程式部署到Kubernetes集群中的生產環境 

使用GitLab CI/CD,還可以:

  • 通過Auto DevOps輕松設定應用的整個生命周期
  • 將應用程式部署到不同的環境
  • 安裝你自己的GitLab Runner
  • Schedule pipelines
  • 使用安全測驗報告(Security Test reports)檢查應用程式漏洞 

2. GitLab CI/CD 快速開始

.gitlab-ci.yml檔案告訴GitLab Runner要做什么,一個簡單的管道通常包括三個階段:buildtestdeploy

管道在 CI/CD > Pipelines 頁面

2.1. 創建一個 .gitlab-ci.yml 檔案

通過配置.gitlab-ci.yml檔案來告訴CI要對你的專案做什么,它位于倉庫的根目錄下,

倉庫一旦收到任何推送,GitLab將立即查找.gitlab-ci.yml檔案,并根據檔案的內容在Runner上啟動作業,

下面是一個Ruby專案配置例子:

 image: "ruby:2.5"

 before_script:
   - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
   - ruby -v
   - which ruby
   - gem install bundler --no-document
   - bundle install --jobs $(nproc)  "${FLAGS[@]}"
 
 rspec:
   script:
     - bundle exec rspec

 rubocop:
   script:
     - bundle exec rubocop

上面的例子中,定義里兩個作業,分別是 rspecrubocop,在每個作業開始執行前,要先執行before_script下的命令 

2.2. 推送 .gitlab-ci.yml 到 GitLab

git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml" 
git push origin master

2.3. 配置一個Runner

在GitLab中,Runner運行你定義在.gitlab-ci.yml中的作業(job)

一個Runner可以是一個虛擬機、物理機、docker容器,或者一個容器集群

GitLab與Runner之間通過API進行通信,因此只需要Runner所在的機器有網路并且可以訪問GitLab服務器即可

你可以去 Settings ? CI/CD 看是否已經有Runner關聯到你的專案,設定Runner簡單又直接 

 

2.4. 查看 pipeline 和 jobs的狀態

在成功配置Runner以后,你應該可以看到你最近的提交的狀態 

為了查看所有jobs,你可以去 Pipelines ? Jobs 頁面 

通過點擊作業的狀態,你可以看到作業運行的日志

 

回顧一下:

1、首先,定義.gitlab-ci.yml檔案,在這個檔案中就定義了要執行的job和命令

2、接著,將檔案推送至遠程倉庫

3、最后,配置Runner,用于運行job

3. Auto DevOps

Auto DevOps 提供了預定義的CI/CD配置,使你可以自動檢測,構建,測驗,部署和監視應用程式,借助CI/CD最佳實踐和工具,Auto DevOps旨在簡化成熟和現代軟體開發生命周期的設定和執行,

借助Auto DevOps,軟體開發程序的設定變得更加容易,因為每個專案都可以使用最少的配置來完成從驗證到監視的完整作業流程,只需推送你的代碼,GitLab就會處理其他所有事情,這使得啟動新專案更加容易,并使整個公司的應用程式設定方式保持一致,

下面這個例子展示了如何使用Auto DevOps將GitLab.com上托管的專案部署到Google Kubernetes Engine

示例中會使用GitLab原生的Kubernetes集成,因此不需要再單獨手動創建Kubernetes集群

本例將創建并部署一個從GitLab模板創建的應用

3.1. 從GitLab模板創建專案

在創建Kubernetes集群并將其連接到GitLab專案之前,你需要一個Google Cloud Platform帳戶

下面使用GitLab的專案模板來創建一個新專案

給專案起一個名字,并確保它是公有的

3.2. 從GitLab模板創建Kubernetes集群

點擊 Add Kubernetes cluster 按鈕,或者 Operations > Kubernetes

安裝Helm, Ingress, 和 Prometheus

 

3.3. 啟用Auto DevOps (可選)

Auto DevOps 默認是啟用的,

導航欄 Settings > CI/CD > Auto DevOps

勾選 Default to Auto DevOps pipeline

最后選擇部署策略

一旦你已經完成了以上所有的操作,那么一個新的 pipeline 將會被自動創建,為了查看pipeline,可以去 CI/CD > Pipelines 

3.4. 部署應用

到目前為止,你應該看到管道正在運行,但是它到底在運行什么呢? 

管道內部分為4個階段,我們可以查看每個階段有幾個作業在運行,如下圖:

構建 -> 測驗 -> 部署 -> 性能測驗

現在,應用已經成功部署,讓我們通過瀏覽器查看,

首先,導航到 Operations > Environments 

在Environments中,可以看到部署的應用的詳細資訊,在最右邊有三個按鈕,我們依次來看一下:

第一個圖示將打開在生產環境中部署的應用程式的URL,這是一個非常簡單的頁面,但重要的是它可以正常作業! 

緊挨著第二個是一個帶小影像的圖示,Prometheus將在其中收集有關Kubernetes集群以及應用程式如何影響它的資料(在記憶體/ CPU使用率,延遲等方面)

第三個圖示是Web終端,它將在運行應用程式的容器內打開終端會話, 

4. Examples

使用GitLab CI/CD部署一個Spring Boot應用 

示例 .gitlab-ci.yml

 image: java:8
 
 stages:
   - build
   - deploy
 
 before_script:
   - chmod +x mvnw
 
 build:
   stage: build
   script: ./mvnw package
   artifacts:
     paths:
       - target/demo-0.0.1-SNAPSHOT.jar
 
 production:
   stage: deploy
   script:
   - curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx
   - ./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io
   - ./cf push
   only:
   - master

5. Docs

https://about.gitlab.com/solutions/kubernetes/

https://docs.gitlab.com/ee/ci/README.html

https://docs.gitlab.com/ee/ci/introduction/

https://docs.gitlab.com/ee/topics/autodevops/

https://docs.gitlab.com/ee/ci/examples/README.html

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/4047.html

標籤:其他

上一篇:GitLab Container Registry

下一篇:全面決議百度大腦發布“AI開發者‘戰疫’守護計劃”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more