成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

帶你深入了解GitLab CI/CD原理及流程

開(kāi)發(fā) 開(kāi)發(fā)工具
軟件開(kāi)發(fā)的持續(xù)方法基于自動(dòng)執(zhí)行腳本,以最大程度地減少在開(kāi)發(fā)應(yīng)用程序時(shí)引入錯(cuò)誤的機(jī)會(huì)。從開(kāi)發(fā)新代碼到部署新代碼,他們幾乎不需要人工干預(yù),甚至根本不需要干預(yù)。

[[350857]]

 GitLab CI/CD 是一個(gè)內(nèi)置在GitLab中的工具,用于通過(guò)持續(xù)方法進(jìn)行軟件開(kāi)發(fā):

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

持續(xù)集成的工作原理是將小的代碼塊推送到Git倉(cāng)庫(kù)中托管的應(yīng)用程序代碼庫(kù)中,并且每次推送時(shí),都要運(yùn)行一系列腳本來(lái)構(gòu)建、測(cè)試和驗(yàn)證代碼更改,然后再將其合并到主分支中。

持續(xù)交付和部署相當(dāng)于更進(jìn)一步的CI,可以在每次推送到倉(cāng)庫(kù)默認(rèn)分支的同時(shí)將應(yīng)用程序部署到生產(chǎn)環(huán)境。

這些方法使得可以在開(kāi)發(fā)周期的早期發(fā)現(xiàn)bugs和errors,從而確保部署到生產(chǎn)環(huán)境的所有代碼都符合為應(yīng)用程序建立的代碼標(biāo)準(zhǔn)。

GitLab CI/CD 由一個(gè)名為 .gitlab-ci.yml 的文件進(jìn)行配置,改文件位于倉(cāng)庫(kù)的根目錄下。文件中指定的腳本由GitLab Runner執(zhí)行。

1. GitLab CI/CD 介紹

軟件開(kāi)發(fā)的持續(xù)方法基于自動(dòng)執(zhí)行腳本,以最大程度地減少在開(kāi)發(fā)應(yīng)用程序時(shí)引入錯(cuò)誤的機(jī)會(huì)。從開(kāi)發(fā)新代碼到部署新代碼,他們幾乎不需要人工干預(yù),甚至根本不需要干預(yù)。

它涉及到在每次小的迭代中就不斷地構(gòu)建、測(cè)試和部署代碼更改,從而減少了基于已經(jīng)存在bug或失敗的先前版本開(kāi)發(fā)新代碼的機(jī)會(huì)。

Continuous Integration(持續(xù)集成)

假設(shè)一個(gè)應(yīng)用程序,其代碼存儲(chǔ)在GitLab的Git倉(cāng)庫(kù)中。開(kāi)發(fā)人員每天都要多次推送代碼更改。對(duì)于每次向倉(cāng)庫(kù)的推送,你都可以創(chuàng)建一組腳本來(lái)自動(dòng)構(gòu)建和測(cè)試你的應(yīng)用程序,從而減少了向應(yīng)用程序引入錯(cuò)誤的機(jī)會(huì)。這種做法稱(chēng)為持續(xù)集成,對(duì)于提交給應(yīng)用程序(甚至是開(kāi)發(fā)分支)的每項(xiàng)更改,它都會(huì)自動(dòng)連續(xù)進(jìn)行構(gòu)建和測(cè)試,以確保所引入的更改通過(guò)你為應(yīng)用程序建立的所有測(cè)試,準(zhǔn)則和代碼合規(guī)性標(biāo)準(zhǔn)。

Continuous Delivery(持續(xù)交付)

持續(xù)交付是超越持續(xù)集成的更進(jìn)一步的操作。應(yīng)用程序不僅會(huì)在推送到代碼庫(kù)的每次代碼更改時(shí)進(jìn)行構(gòu)建和測(cè)試,而且,盡管部署是手動(dòng)觸發(fā)的,但作為一個(gè)附加步驟,它也可以連續(xù)部署。此方法可確保自動(dòng)檢查代碼,但需要人工干預(yù)才能從策略上手動(dòng)觸發(fā)以必輸此次變更。

Continuous Deployment(持續(xù)部署)

與持續(xù)交付類(lèi)似,但不同之處在于,你無(wú)需將其手動(dòng)部署,而是將其設(shè)置為自動(dòng)部署。完全不需要人工干預(yù)即可部署你的應(yīng)用程序。

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

為了使用GitLab CI/CD,你需要一個(gè)托管在GitLab上的應(yīng)用程序代碼庫(kù),并且在根目錄中的.gitlab-ci.yml文件中指定構(gòu)建、測(cè)試和部署的腳本。

在這個(gè)文件中,你可以定義要運(yùn)行的腳本,定義包含的依賴(lài)項(xiàng),選擇要按順序運(yùn)行的命令和要并行運(yùn)行的命令,定義要在何處部署應(yīng)用程序,以及指定是否 要自動(dòng)運(yùn)行腳本或手動(dòng)觸發(fā)腳本。

為了可視化處理過(guò)程,假設(shè)添加到配置文件中的所有腳本與在計(jì)算機(jī)的終端上運(yùn)行的命令相同。

一旦你已經(jīng)添加了.gitlab-ci.yml到倉(cāng)庫(kù)中,GitLab將檢測(cè)到該文件,并使用名為GitLab Runner的工具運(yùn)行你的腳本。該工具的操作與終端類(lèi)似。

這些腳本被分組到j(luò)obs,它們共同組成一個(gè)pipeline。一個(gè)最簡(jiǎn)單的.gitlab-ci.yml文件可能是這樣的: 

  1. before_script:   
  2.   - apt-get install rubygems ruby-dev -y   
  3. run-test:   
  4.   script:   
  5.     - ruby --version 6 

before_script屬性將在運(yùn)行任何內(nèi)容之前為你的應(yīng)用安裝依賴(lài),一個(gè)名為run-test的job(作業(yè))將打印當(dāng)前系統(tǒng)的Ruby版本。二者共同構(gòu)成了在每次推送到倉(cāng)庫(kù)的任何分支時(shí)都會(huì)被觸發(fā)的pipeline(管道)。

GitLab CI/CD不僅可以執(zhí)行你設(shè)置的job,還可以顯示執(zhí)行期間發(fā)生的情況,正如你在終端看到的那樣:

為你的應(yīng)用創(chuàng)建策略,GitLab會(huì)根據(jù)你的定義來(lái)運(yùn)行pipeline。你的管道狀態(tài)也會(huì)由GitLab顯示:

最后,如果出現(xiàn)任何問(wèn)題,可以輕松地回滾所有更改:

1.2. 基本 CI/CD 工作流程

一旦你將提交推送到遠(yuǎn)程倉(cāng)庫(kù)的分支上,那么你為該項(xiàng)目設(shè)置的CI/CD管道將會(huì)被觸發(fā)。GitLab CI/CD 通過(guò)這樣做:

  •  運(yùn)行自動(dòng)化腳本(串行或并行) 代碼Review并獲得批準(zhǔn)
    •  構(gòu)建并測(cè)試你的應(yīng)用
    •  就像在你本機(jī)中看到的那樣,使用Review Apps預(yù)覽每個(gè)合并請(qǐng)求的更改
  •  代碼Review并獲得批準(zhǔn)
  •  合并feature分支到默認(rèn)分支,同時(shí)自動(dòng)將此次更改部署到生產(chǎn)環(huán)境
  •  如果出現(xiàn)問(wèn)題,可以輕松回滾
  •  通過(guò)GitLab UI所有的步驟都是可視化的

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

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

1.Verify

  •  通過(guò)持續(xù)集成自動(dòng)構(gòu)建和測(cè)試你的應(yīng)用程序
  •  使用GitLab代碼質(zhì)量(GitLab Code Quality)分析你的源代碼質(zhì)量
  •  通過(guò)瀏覽器性能測(cè)試(Browser Performance Testing)確定代碼更改對(duì)性能的影響
  •  執(zhí)行一系列測(cè)試,比如Container Scanning , Dependency Scanning , JUnit tests
  •  用Review Apps部署更改,以預(yù)覽每個(gè)分支上的應(yīng)用程序更改

2.Package

  •  用Container Registry存儲(chǔ)Docker鏡像
  •  用NPM Registry存儲(chǔ)NPM包
  •  用Maven Repository存儲(chǔ)Maven artifacts
  •  用Conan Repository存儲(chǔ)Conan包

3.Release

  •  持續(xù)部署,自動(dòng)將你的應(yīng)用程序部署到生產(chǎn)環(huán)境
  •  持續(xù)交付,手動(dòng)點(diǎn)擊以將你的應(yīng)用程序部署到生產(chǎn)環(huán)境
  •  用GitLab Pages部署靜態(tài)網(wǎng)站
  •  僅將功能部署到一個(gè)Pod上,并讓一定比例的用戶(hù)群通過(guò)Canary Deployments訪(fǎng)問(wèn)臨時(shí)部署的功能(PS:即灰度發(fā)布)
  •  在Feature Flags之后部署功能
  •  用GitLab Releases將發(fā)布說(shuō)明添加到任意Git tag
  •  使用Deploy Boards查看在Kubernetes上運(yùn)行的每個(gè)CI環(huán)境的當(dāng)前運(yùn)行狀況和狀態(tài)
  •  使用Auto Deploy將應(yīng)用程序部署到Kubernetes集群中的生產(chǎn)環(huán)境

使用GitLab CI/CD,還可以:

  •  通過(guò)Auto DevOps輕松設(shè)置應(yīng)用的整個(gè)生命周期
  •  將應(yīng)用程序部署到不同的環(huán)境
  •  安裝你自己的GitLab Runner
  •  Schedule pipelines
  •  使用安全測(cè)試報(bào)告(Security Test reports)檢查應(yīng)用程序漏洞

2. GitLab CI/CD 快速開(kāi)始

.gitlab-ci.yml文件告訴GitLab Runner要做什么。一個(gè)簡(jiǎn)單的管道通常包括三個(gè)階段:build、test、deploy

管道在 CI/CD > Pipelines 頁(yè)面

2.1. 創(chuàng)建一個(gè) .gitlab-ci.yml 文件

通過(guò)配置.gitlab-ci.yml文件來(lái)告訴CI要對(duì)你的項(xiàng)目做什么。它位于倉(cāng)庫(kù)的根目錄下。

倉(cāng)庫(kù)一旦收到任何推送,GitLab將立即查找.gitlab-ci.yml文件,并根據(jù)文件的內(nèi)容在Runner上啟動(dòng)作業(yè)。

下面是一個(gè)Ruby項(xiàng)目配置例子: 

  1. image: "ruby:2.5"  
  2.  before_script:  
  3.    - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs  
  4.    - ruby -v  
  5.    - which ruby  
  6.    - gem install bundler --no-document  
  7.    - bundle install --jobs $(nproc)  "${FLAGS[@]}"  
  8.  rspec:  
  9.    script:  
  10.      - bundle exec rspec  
  11.  rubocop:  
  12.    script:  
  13.      - bundle exec rubocop 

上面的例子中,定義里兩個(gè)作業(yè),分別是 rspec 和 rubocop,在每個(gè)作業(yè)開(kāi)始執(zhí)行前,要先執(zhí)行before_script下的命令

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

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

2.3. 配置一個(gè)Runner

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

一個(gè)Runner可以是一個(gè)虛擬機(jī)、物理機(jī)、docker容器,或者一個(gè)容器集群

GitLab與Runner之間通過(guò)API進(jìn)行通信,因此只需要Runner所在的機(jī)器有網(wǎng)絡(luò)并且可以訪(fǎng)問(wèn)GitLab服務(wù)器即可

你可以去 Settings ➔ CI/CD 看是否已經(jīng)有Runner關(guān)聯(lián)到你的項(xiàng)目,設(shè)置Runner簡(jiǎn)單又直接

2.4. 查看 pipeline 和 jobs的狀態(tài)

在成功配置Runner以后,你應(yīng)該可以看到你最近的提交的狀態(tài)

為了查看所有jobs,你可以去 Pipelines ➔ Jobs 頁(yè)面

通過(guò)點(diǎn)擊作業(yè)的狀態(tài),你可以看到作業(yè)運(yùn)行的日志

回顧一下:

  •  1、首先,定義.gitlab-ci.yml文件。在這個(gè)文件中就定義了要執(zhí)行的job和命令
  •  2、接著,將文件推送至遠(yuǎn)程倉(cāng)庫(kù)
  •  3、最后,配置Runner,用于運(yùn)行job

3. Auto DevOps

Auto DevOps 提供了預(yù)定義的CI/CD配置,使你可以自動(dòng)檢測(cè),構(gòu)建,測(cè)試,部署和監(jiān)視應(yīng)用程序。借助CI/CD最佳實(shí)踐和工具,Auto DevOps旨在簡(jiǎn)化成熟和現(xiàn)代軟件開(kāi)發(fā)生命周期的設(shè)置和執(zhí)行。

借助Auto DevOps,軟件開(kāi)發(fā)過(guò)程的設(shè)置變得更加容易,因?yàn)槊總€(gè)項(xiàng)目都可以使用最少的配置來(lái)完成從驗(yàn)證到監(jiān)視的完整工作流程。只需推送你的代碼,GitLab就會(huì)處理其他所有事情。這使得啟動(dòng)新項(xiàng)目更加容易,并使整個(gè)公司的應(yīng)用程序設(shè)置方式保持一致。

下面這個(gè)例子展示了如何使用Auto DevOps將GitLab.com上托管的項(xiàng)目部署到Google Kubernetes Engine

示例中會(huì)使用GitLab原生的Kubernetes集成,因此不需要再單獨(dú)手動(dòng)創(chuàng)建Kubernetes集群

本例將創(chuàng)建并部署一個(gè)從GitLab模板創(chuàng)建的應(yīng)用

3.1. 從GitLab模板創(chuàng)建項(xiàng)目

在創(chuàng)建Kubernetes集群并將其連接到GitLab項(xiàng)目之前,你需要一個(gè)Google Cloud Platform帳戶(hù)

下面使用GitLab的項(xiàng)目模板來(lái)創(chuàng)建一個(gè)新項(xiàng)目

給項(xiàng)目起一個(gè)名字,并確保它是公有的

3.2. 從GitLab模板創(chuàng)建Kubernetes集群

點(diǎn)擊 Add Kubernetes cluster 按鈕,或者 Operations > Kubernetes

安裝Helm, Ingress, 和 Prometheus

3.3. 啟用Auto DevOps (可選)

Auto DevOps 默認(rèn)是啟用的。

導(dǎo)航欄 Settings > CI/CD > Auto DevOps

勾選 Default to Auto DevOps pipeline

最后選擇部署策略

一旦你已經(jīng)完成了以上所有的操作,那么一個(gè)新的 pipeline 將會(huì)被自動(dòng)創(chuàng)建。為了查看pipeline,可以去 CI/CD > Pipelines

3.4. 部署應(yīng)用

到目前為止,你應(yīng)該看到管道正在運(yùn)行,但是它到底在運(yùn)行什么呢?

管道內(nèi)部分為4個(gè)階段,我們可以查看每個(gè)階段有幾個(gè)作業(yè)在運(yùn)行,如下圖:

構(gòu)建 -> 測(cè)試 -> 部署 -> 性能測(cè)試

現(xiàn)在,應(yīng)用已經(jīng)成功部署,讓我們通過(guò)瀏覽器查看。

首先,導(dǎo)航到 Operations > Environments

在Environments中,可以看到部署的應(yīng)用的詳細(xì)信息。在最右邊有三個(gè)按鈕,我們依次來(lái)看一下:

第一個(gè)圖標(biāo)將打開(kāi)在生產(chǎn)環(huán)境中部署的應(yīng)用程序的URL。這是一個(gè)非常簡(jiǎn)單的頁(yè)面,但重要的是它可以正常工作!

緊挨著第二個(gè)是一個(gè)帶小圖像的圖標(biāo),Prometheus將在其中收集有關(guān)Kubernetes集群以及應(yīng)用程序如何影響它的數(shù)據(jù)(在內(nèi)存/ CPU使用率,延遲等方面)

第三個(gè)圖標(biāo)是Web終端,它將在運(yùn)行應(yīng)用程序的容器內(nèi)打開(kāi)終端會(huì)話(huà)。

4. Examples

使用GitLab CI/CD部署一個(gè)Spring Boot應(yīng)用

示例 .gitlab-ci.yml 

  1. image: java:8   
  2. stages:  
  3.   - build  
  4.   - deploy  
  5. before_script:  
  6.   - chmod +x mvnw  
  7. build:  
  8.   stage: build  
  9.   script: ./mvnw package 
  10.    artifacts:  
  11.     paths:  
  12.       - target/demo-0.0.1-SNAPSHOT.jar  
  13. production:  
  14.   stage: deploy  
  15.   script:  
  16.   - curl --location "https://cli.run.pivotal.io/stable?release=linux64-binary&source=github" | tar zx  
  17.   - ./cf login -u $CF_USERNAME -p $CF_PASSWORD -a api.run.pivotal.io 
  18.    - ./cf push  
  19.   only:  
  20.   - master  

 

責(zé)任編輯:龐桂玉 來(lái)源: 民工哥技術(shù)之路
相關(guān)推薦

2018-09-04 16:20:46

MySQ索引數(shù)據(jù)結(jié)構(gòu)

2020-10-21 14:10:28

工具測(cè)試開(kāi)發(fā)

2021-01-19 12:00:39

前端監(jiān)控代碼

2021-04-28 10:13:58

zookeeperZNode核心原理

2020-10-12 07:00:00

JenkinsDevOps測(cè)試工具

2019-11-28 09:33:08

Redis架構(gòu)互聯(lián)網(wǎng)

2024-07-01 00:00:04

ViteUMD瀏覽器

2019-11-20 10:07:07

Redis數(shù)據(jù)系統(tǒng)

2018-11-21 08:00:05

Dubbo分布式系統(tǒng)

2021-01-12 09:03:17

MySQL復(fù)制半同步

2023-11-14 09:18:00

Python代碼

2010-07-13 09:36:25

2010-11-19 16:22:14

Oracle事務(wù)

2020-09-21 09:53:04

FlexCSS開(kāi)發(fā)

2022-08-26 13:48:40

EPUBLinux

2009-08-25 16:27:10

Mscomm控件

2010-06-23 20:31:54

2020-07-20 06:35:55

BashLinux

2011-11-07 09:37:42

Hpyer-V虛擬化云計(jì)算

2021-01-27 11:10:49

JVM性能調(diào)優(yōu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产高清在线视频 | 久久一区二区免费视频 | 亚洲欧美综合精品久久成人 | 国产精品视频久久 | 日韩视频在线一区二区 | 久久国内精品 | 亚洲性人人天天夜夜摸 | 成人免费在线视频 | 91精品国产91久久久久久丝袜 | 免费黄网站在线观看 | 久久91精品久久久久久9鸭 | 国产精品1区2区3区 一区中文字幕 | 欧美日本一区 | 国产毛片av | h视频亚洲| 亚洲精品日韩在线 | 久久精品国产亚洲 | 国产精品久久久久久久久久 | 成人二区 | 精品久久影院 | 毛片黄片 | 国产精品久久久久久久久久久免费看 | 综合久久99| 午夜成人在线视频 | 欧美精品一区二区三区蜜桃视频 | 久久久久国产一区二区三区 | 毛片99 | 97免费在线观看视频 | 国产不卡一区 | 午夜精品视频在线观看 | 中文字幕不卡在线88 | 免费在线观看成人 | 精品日韩一区二区 | 久久中文字幕一区 | 免费激情 | 欧美日韩一卡二卡 | 色婷婷亚洲一区二区三区 | 日韩 欧美 二区 | 一区二区三区观看视频 | 性视频一区 | 人人99|