1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Gitlab-ci:從零開始的前端自動化部署

        共 16039字,需瀏覽 33分鐘

         ·

        2021-07-04 18:10


        點擊上方 程序員成長指北,關(guān)注公眾號

        回復(fù)1,加入高級Node交流群


        關(guān)于本文

        文章地址:https://zhuanlan.zhihu.com/p/184936276

        作者:廣發(fā)證券 澎湖灣 (歡迎原文點贊)

        目錄

        一.概念介紹
        1.1 gitlab-ci && 自動化部署工具的運行機制
        1.2 自動化部署給我們帶來的好處

        二.知識預(yù)備
        2.1 gitlab-ci涉及的抽象概念(Runner/PipeLine/Executor/Job )
        2.2 YML文件的基本語法規(guī)則
        2.3 .gitlab-ci.yml配置的特定關(guān)鍵字

        三.CI實戰(zhàn)
        3.1 編寫一個gitlab-ci的“hello world”

        四.坑點總結(jié)

        五.gitlab-ci進階
        5.1 YML的片段復(fù)用和模塊化
        5.2 gitlab-ci提供的其他配置關(guān)鍵字

        一.概念介紹

        1.1 gitlab-ci && 自動化部署工具的運行機制

        以gitlab-ci為例:

        (1) 通過在項目根目錄下配置**.gitlab-ci.yml**文件,可以控制ci流程的不同階段,例如install/檢查/編譯/部署服務(wù)器。gitlab平臺會掃描.gitlab-ci.yml文件,并據(jù)此處理ci流程

        img

        (2) ci流程在每次團隊成員「push/merge」后之后觸發(fā)。每當你push/merge一次,gitlab-ci都會檢查項目下有沒有.gitlab-ci.yml文件,如果有,它會執(zhí)行你在里面編寫的腳本,并完整地走一遍從「intall =>」 「eslint檢查=>編譯 =>部署服務(wù)器」的流程

        img

        (3)gitlab-ci提供了指定ci運行平臺的機制,它提供了一個叫「gitlab-runner」的軟件,只要在對應(yīng)的平臺(機器或docker)上下載并運行這個命令行軟件,并輸入從gitlab交互界面獲取的token,就可以把當前機器和對應(yīng)的gitlab-ci流程綁定,也即:每次跑ci都在這個平臺上進行。

        (4).gitlab-ci的所有流程都是可視化的,每個流程節(jié)點的狀態(tài)可以在gitlab的交互界面上看到,包括執(zhí)行成功或失敗。如下圖所示,因為它的執(zhí)行看上去就和多節(jié)管道一樣,所以我們通常用“pipeLine”來稱呼它

        img

        (5).不同push/merge所觸發(fā)的CI流程不會互相影響,也就是說,你的一次push引發(fā)的CI流程并不會因為接下來另一位同事的push而阻斷,它們是互不影響的。這一個特點方便讓測試同學(xué)根據(jù)不同版本進行測試。

        (6)pipeline不僅能被動觸發(fā),也是可以手動觸發(fā)的。

        img

        1.2 自動化部署給我們帶來的好處

        自動化部署的好處體現(xiàn)在幾個方面

        「1.提高前端的開發(fā)效率和開發(fā)測試之間的協(xié)調(diào)效率」

        「Before」

        如果按照傳統(tǒng)的流程,在項目上線前的測試階段,前端同學(xué)修復(fù)bug之后,要手動把代碼部署之后。才能通知測試同學(xué)在測試環(huán)境進行測試。

        這會造成幾個問題:本身手動部署服務(wù)的工作是比較繁瑣的,占用了開發(fā)時間。同時開發(fā)-測試之間的環(huán)節(jié)的耦合問題,則會增加團隊溝通成本。

        「After」

        通過gitlab-ci,前端開發(fā)在提交代碼之后就不用管了,ci流程會自動部署到測試或集成環(huán)境的服務(wù)器。很大程度上節(jié)約了開發(fā)的時間。

        同時,因為開發(fā)和測試人員可以共用gitlab里的pipeline界面, 測試同學(xué)能夠隨時把握代碼部署的情況,同時還可以通過交互界面手動啟動pipeline,自己去部署測試,從而節(jié)約和開發(fā)之間的溝通時間。

        「2.從更細的粒度把握代碼質(zhì)量」

        我們可以把eslint或其他的代碼檢查加到pipeline流程中,每當團隊成員提交和合并一次,pipeline都會觸發(fā)一次并對代碼做一次全面檢測,這樣就從一個更細的粒度上控制代碼質(zhì)量了。

        二.知識預(yù)備

        介紹完gitlab-ci的基本概念,接下來我將會介紹編寫一個gitlab-ci用例所需要的知識。這是在實戰(zhàn)之前的一點準備工作,主要包括三部分

        • gitlab-ci涉及的抽象概念
        • YML文件的基本語法規(guī)則
        • .gitlab-ci.yml配置的特定關(guān)鍵字

        2.1 gitlab-ci涉及的抽象概念

        首先要了解的是gitlab-ci中涉及的一些基本概念

        「1.Pipeline & Job」

        Pipeline是Gitlab根據(jù)項目的.gitlab-ci.yml文件執(zhí)行的流程,它由許多個任務(wù)節(jié)點組成, 而這些Pipeline上的每一個任務(wù)節(jié)點,都是一個獨立的Job

        Job在YML中的配置我們將會在下面介紹,現(xiàn)在需要知道的是:「每個Job都會配置一個stage屬性,來表示這個Job所處的階段?!?/strong>

        「一個Pipleline有若干個stage,每個stage上有至少一個Job」,如下圖所示:

        img

        「2.Runner」

        Runner可以理解為:「在特定機器上」根據(jù)項目的**.gitlab-ci.yml「文件,對項目執(zhí)行pipeline的」程序**。Runner可以分為兩種:「Specific Runner」 和 「Shared Runner」

        • 「Shared Runner」是Gitlab平臺提供的免費使用的runner程序,它由Google云平臺提供支持,每個開發(fā)團隊有十幾個。對于公共開源項目是免費使用的,如果是私人項目則有每月2000分鐘的CI時間上限。
        • 「Specific Runner」是我們自定義的,在自己選擇的機器上運行的runner程序,gitlab給我們提供了一個叫g(shù)itlab-runner的命令行軟件,只要在對應(yīng)機器上下載安裝這個軟件,并且運行g(shù)itlab-runner register命令,然后輸入從gitlab-ci交互界面獲取的token進行注冊, 就可以在自己的機器上遠程運行pipeline程序了。
        ?

        Gitlab-runner下載鏈接:https://docs.gitlab.com/runner/install/

        ?

        「Shared Runner 和 Specific Runner的區(qū)別」

        1. Shared Runner是所有項目都可以使用的,而Specific Runner只能針對特定項目運行
        2. Shared Runner默認基于docker運行,沒有提前裝配的執(zhí)行pipeline的環(huán)境,例如node等。而Specific Runner你可以自由選擇平臺,可以是各種類型的機器,如Linux/Windows等,并在上面裝配必需的運行環(huán)境,當然也可以選擇Docker/K8s等
        3. 私人項目使用Shared Runner受運行時間的限制,而Specific Runner的使用則是完全自由的。
        img

        「3.Executor」

        什么是Executor?我們上面說過 Specific Runner是在我們自己選擇的平臺上執(zhí)行的,這個平臺就是我們現(xiàn)在說到的“Executor”,我們在特定機器上通過gitlab-runner這個命令行軟件注冊runner的時候,命令行就會提示我們輸入相應(yīng)的平臺類型??晒┻x擇的平臺一共有如下幾種,下面是一張它們各方面特點的比較表格

        img

        下面是表格的原文鏈接

        ?

        參考鏈接:https://docs.gitlab.com/runner/executors/#selecting-the-executor

        ?

        「為了簡單起見,我下面的實踐部分使用的是我自己的本地Mac機器作為Executor,并且在注冊時選擇“Shell”作為Executor類型。」

        「2.2 YML文件的基本語法規(guī)則」

        CI流程的運行控制,決定于項目根目錄下編寫的配置文件—— 「.gitlab-ci.yml」,正因如此,我們需要掌握YML的基本語法規(guī)則。

        YML是一種編寫配置文件的語言,比JSON更為簡潔和方便,因此,我們首先要掌握的就是YML文件的編寫語法。

        一份簡單的YML文件長下面這個樣子:

        install-job: # 注釋
        tags:
        - sss
        stage: install
        script:
        - npm install

        從這里我們就可以看出:

        • YML通過縮進組織層級
        • YML里允許通過#符號編寫注釋

        在基本結(jié)構(gòu)上,YML和 JSON也類似

        • JSON是由對象,數(shù)組,以及對象和數(shù)組的嵌套結(jié)構(gòu)組成的
        • YML也是由對象,數(shù)組,以及對象和數(shù)組的嵌套結(jié)構(gòu)組成的。

        如下所示:

        「YML中的數(shù)組寫法」

        colors
        - red
        - blue
        - yellow

        相當于JSON中的

        "colors": ["red","blue","yellow"] }

        「YML中的對象寫法:」

        people:
        name: zhangsan
        age: 14

        相當于JSON中的

        {
          "people": {
             "name""zhangsan"
             "age"14
          } 
        }

        當然也可以是數(shù)組和對象之間形成的嵌套結(jié)構(gòu)

        a:
        b:
        - d
        c: e

        相當于

        {
          "a": {
            "b": [ "d" ],
            "c""e"
           }
        }

        「從JSON到Y(jié)ML之間的過渡學(xué)習(xí)的注意要點:」

        • 你不再需要“{}”這種符號去區(qū)分層級邊界了,你需要考慮使用縮進
        • 這里可以使用注釋,用#符號
        • 如果不涉及特殊符號比如“[”,你一般是不需要給YML中的字符串加雙引號或者單引號的(當然加了也可以)

        了解了這些,對于編寫一個gitlab-ci的「hello world」已經(jīng)沒有問題了。

        當然YML還有著比JSON更為豐富的功能,比如用”&"符號和"<<:*”符號可以實現(xiàn)的片段導(dǎo)入的功能,以及gitlab-ci提供的include關(guān)鍵字和extend關(guān)鍵字等提供的結(jié)構(gòu)編排功能。這些我將在最后面的小節(jié)中講解,這里暫時不多贅述

        2.3 gitlab-ci.yml配置的特定關(guān)鍵字

        在了解了YML文件的語法格式后,接下來需要了解的就是gitlab-ci獨特的配置關(guān)鍵字,這些關(guān)鍵字將在.gitlab-ci.yml中使用,并用來控制一個pipeline具體的運作過程

        gitlab提供了很多配置關(guān)鍵字,其中最基礎(chǔ)和常用的有這么幾個

        • stages
        • stage
        • script
        • tags

        「stages & stage」

        stages定義在YML文件的最外層,它的值是一個數(shù)組,用于定義一個pipeline不同的流程節(jié)點

        例如我們定義如下:

        stages: # 分段
        - install
        - eslint
        - build
        - deploy

        則在Gitlab交互界面中能夠看到如下展示

        img

        我們上面說過:「Job是pipeline的任務(wù)節(jié)點,它構(gòu)成了pipeline的基本單元」

        而stage/script/tags這三個關(guān)鍵字,都是作為Job的子屬性來使用的,如下所示,install就是我們定義的一個Job

        install:
        tags:
        - sss
        stage: install
        script:
        - npm install

        「stage」

        是一個字符串,且是stages數(shù)組的一個子項,表示的是當前的pipeline節(jié)點。

        當前stage的執(zhí)行情況能在交互面板上能看的清清楚楚:

        • 正在執(zhí)行是藍色
        • 尚未執(zhí)行是灰色
        • 執(zhí)行成功是綠色
        • 執(zhí)行失敗是紅色

        img
        img

        「script」

        它是當前pipeline節(jié)點運行的shell腳本(以項目根目錄為上下文執(zhí)行)。

        這個script是我們控制CI流程的核心,我們所有的工作:從安裝,編譯到部署都是通過script中定義的shell腳本來完成的。

        如果腳本執(zhí)行成功,pipeline就會進入下一個Job節(jié)點,如果執(zhí)行失敗那么pipeline就會終止

        「tags」

        tags是當前Job的標記,「這個tags關(guān)鍵字是很重要,因為gitlab的runner會通過tags去判斷能否執(zhí)行當前這個Job」

        例如我們在gitlab的面板中能看到當前激活的runner的信息

        Gitlab項目首頁=> setting => CI/CD => Runners

        img

        上面的這個sss就是當前Runner的tags,這意味著:**這個runner只會執(zhí)行tag為sss的Job。**如果一個Job沒有tag或者tag不是sss,那么即使這個Runner是激活且空閑的,也不會去執(zhí)行!

        基本的gitlab-ci關(guān)鍵字就介紹結(jié)束了,有了這些知識對于編寫一個gitlab-ci的”hello world”已經(jīng)足夠了。對于更多的關(guān)鍵字的相關(guān)知識,將在文章最后再進行介紹

        三.gitlab-ci實戰(zhàn)

        「3.1 編寫一個gitlab-ci的"hello world"」

        好,說了這么多終于到了實踐的部分了,請原諒前面的啰嗦,下面我將會展示一下如何從零開始實踐一個gitlab-ci的Hello world:

        「1.在平臺上下載并安裝Gitlab-runner命令行」

        我是在Mac上跑的ci,所以下面的適用于OSX系統(tǒng)(如果是其他平臺,可自行參考以下官方鏈接中的相關(guān)資料)

        ?

        參考資料:https://docs.gitlab.com/runner/install/

        ?

        依次運行:

        sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
        sudo chmod +x /usr/local/bin/gitlab-runner
        ?

        備注:這個下載過程可能會很慢,你可以復(fù)制上面的鏈接到瀏覽器中翻墻下載,然后下載完畢再進行后續(xù)處理

        ?

        「2.初始化gitlab-runner」

        cd ~
        gitlab-runner install
        gitlab-runner start

        最后輸出如下,說明成功了。

        img

        「3.注冊Runner」

        運行完gitlab-runner start只是完成了初始化,接下來你還要通過注冊才能運行runner

        ?

        參考鏈接:https://docs.gitlab.com/runner/register/index.html

        ?

        注冊runner只需要一條運行命令:

        sudo gitlab-runner register

        然后寫入相應(yīng)的token,url和tag等相關(guān)信息,就注冊完畢了。

        img

        上面要求輸入的Runner綁定的token和url, 獲取方式如下:

        Gitlab項目首頁=> setting => CI/CD => Runners => Specific Runners
        img

        「4.激活Runner」

        注冊完了可能還需要激活,這時我們可以看下面板,如果有個黑色的感嘆號,這說明runner注冊成功了,但是尚未激活(「如果是綠色的說明已經(jīng)激活,本步驟跳過」

        img

        激活方法是本地運行:

        sudo gitlab-runner verify

        輸出

        img

        這時候回去看Gitlab面板里的Runner參數(shù):

        img

        是綠色就說明激活成功了

        「5.梳理和規(guī)劃Pipeline的不同階段和過程」

        在編寫.gitlab-ci.yml前,首先需要考慮的是我們的pipeline分幾個階段處理。

        從前端工程師的角度出發(fā),一個前端項目的PipeLine處理包括以下階段

        「<1> install階段」

        就是執(zhí)行npm install命令,根據(jù)package.json安裝node_modules依賴包

        「<2> eslint階段」

        執(zhí)行eslint檢查,判斷代碼格式是否符合規(guī)范,如果不符合則pipeline終止。

        在這之前,我先通過npm install eslint安裝了eslint檢查工具,然后在項目根目錄下配置了.eslintrc文件。這部分可自行參考相關(guān)資料,這里暫不多贅述。

        「<3>build階段」

        編譯生成生產(chǎn)代碼,可以通過webpack之類的打包工具執(zhí)行編譯。當然可以通過框架提供的編譯命令進行編譯,例如我這個示例項目是用 react-scripts腳手架搭建的,所以通過npx react-scripts build進行編譯。

        「<4>deploy階段」

        deploy也就是部署階段,也就是把剛才bulid階段生成的生產(chǎn)代碼,部署到生產(chǎn)訪問的服務(wù)器上。這里又具體有以下兩部分工作要做

        「A.申請服務(wù)器 & 安裝web服務(wù) (準備工作)」

        (1)我本次使用的是百度云的「云服務(wù)器」(每天9點的時候可以搶有一定免費使用期限的服務(wù)器)

        (2)然后在本地終端通過ssh遠程登陸服務(wù)器,并安裝「apache」以提供web服務(wù)

        sudo apt-get install apache2

        (3)然后,安裝完后的apache會在服務(wù)器下新增**/var/www/html/**目錄, 這個目錄就是存放網(wǎng)站資源的位置。

        (4)最后我們只需要在每次部署的時候把生產(chǎn)的單頁面拷貝到這個頁面下,就能在瀏覽器上通過對應(yīng)的 「IP+路徑」來訪問Web頁面了。

        「B. 部署資源(每次pipeline都進行)」

        我下面的示例中,是通過 「scp」 這一命令,將本地機器代碼遠程拷貝到云服務(wù)器上。

        因為這一命令需要輸入密碼,所以通過 「sshpass」 命令攜帶密碼再執(zhí)行scp:

        sshpass -p $PASSWORD scp -r ./build $CUSTOM_USERNAME@$CUSTOM_IP:/var/www/html

        這里說明一下,「Gitlab有自定義變量的功能」,例如我們覺得直接在YML中寫入密碼/賬號等信息不太好,那么「可以通過美元符號$寫入一個預(yù)定義的變量,然后在Gitlab面板上輸入它」

        img

        「7.編寫.gitlab-ci.yml配置文件」

        回顧一下之前YML語法規(guī)則和gitlab-ci配置關(guān)鍵字的知識,就不難編寫出以下YML文件

        stages: # 分段
          - install
          - eslint
          - build
          - deploy

        cache: # 緩存
          paths:
            - node_modules
            - build

        install-job:
          tags:
            - sss
          stage: install
          script:
            - npm install

        eslint-job:
          tags:
            - sss
          stage: eslint
          script:
            - npm run eslint

        build-job:
          tags:
            - sss
          stage: build
          script:
            - npm run build

        deploy-job:
          tags:
            - sss
          stage: deploy
          script:
            - sshpass -p $PASSWORD scp -r ./build $CUSTOM_USERNAME@$CUSTOM_IP:/var/www/html

        「package.json」如下

        {
          ...
          "scripts": {
            "start""react-scripts start",
            "build""npx react-scripts build",
            "eslint""eslint ./src",
          },
          ....
        }

        「8.提交項目代碼」

        OK!終于到最后一步了,commit然后push

        可以看到運行如下

        img

        跑完后

        img

        最后輸入我們部署的IP看看我們部署的網(wǎng)頁

        img

        發(fā)現(xiàn)已經(jīng)把我們的項目代碼部署上去了

        img

        四. Gitlab-ci坑點詳解

        說多了都是淚。。。。。

        下面總結(jié)一下使用過程中遇到的典型坑點

        「1.Runner未激活問題」

        有時候注冊之后,查看面板上的Runner信息,可能會發(fā)現(xiàn)Runner處在未激活狀態(tài)

        img

        解決方法:

        運行以下命令重新啟動runner

        sudo gitlab-runner verify
        sudo gitlab-runner restart

        「2.Job一直掛起,沒有Runner來處理」

        img

        1.首先考慮的是不是Runner沒有激活,如果沒有那么按上面方式處理

        2.還可能是tag沒有匹配到,上面說過,Runner注冊時是要填寫綁定tag的,如果你在YML里面編寫Job沒有帶上tag是不會有自定義Runner來處理。解決方法:給Job加tags

        3.最后一種可能:你連續(xù)注冊了多個Runner,這些Runner沖突了,或者是新注冊的Runner和舊Runner使用了同一個token,這時候的解決方法如下:

        「先刪掉本地其他舊的Runner」

        sudo gitlab-runner unregister --all-runners

        然后重置token,并使用更新后的token重新注冊一個Runner

        img

        「3.specific Runner被Share Runner搶占了Job」

        有時候你可能會發(fā)現(xiàn):你的Job并沒有被你新建的Runner執(zhí)行,而是被Share Runner搶先執(zhí)行了。你如果不想要Share Runner,你可以在Gitlab面板上關(guān)掉

        img

        五.gitlab-ci進階

        5.1 YML的片段復(fù)用和模塊化

        上面我們編寫了gitlab-ci的**"hello world"**。但在實際項目的運行中,.gitlab-ci.yml的編寫可能會漸趨復(fù)雜。那么這個時候YML的一些其他語法功能就派上用場了,上面我們將JSON和YML的基本結(jié)構(gòu)做比較并發(fā)現(xiàn)它們的相似之處,但實際上,「YML提供了比JSON更為豐富的功能?!?/strong>

        「YML的片段復(fù)用功能」

        「試思考」:如果有一段配置片段會被很多Job使用,那么如果重復(fù)寫入片段,則會使我們的YML文件變得過分冗長。

        而如果能把這段提前進行定義,并根據(jù)別名進行導(dǎo)入,就能讓YML文件簡潔很多了。

        「YML的語法天然提供了這個功能:」

        • 使用 **&**符號可以定義一個片段的別名
        • 使用 **<<**符號和 ***** 符號可以將別名對應(yīng)的YML片段導(dǎo)入
        .common-config: &commonConfig
          only: # 表示僅在develop/release分支上執(zhí)行
            refs:
              - develop
              - release

        install-job:
          # 其他配置 ....
          <<: *commonConfig
        build-job:
          # 其他配置 ....
          <<: *commonConfig

        「YML的模塊化功能」

        試思考,如果我們配置腳本很長的話,我們一定要把它寫在.gitlab-ci.yml這單獨一個文件里嗎?

        能否將它分成多個yml文件,然后把其他YML文件導(dǎo)入到入口YML文件(.gitlab-ci.yml)中呢。

        gitlab-ci提供的include關(guān)鍵字便可實現(xiàn)這個功能, 它可以用來導(dǎo)入外部的YML文件。

        例如我們有如下的YML結(jié)構(gòu)

         ├── .gitlab-ci.h5.yml'
        ├── .gitlab-ci.bd.yml'
        ├── .gitlab-ci.wx.yml
        └── .gitlab-ci.yml

        「那么在.gitlab-ci.yml中這么寫,就可以對它們做合并」

        include:
          - '/.gitlab-ci.wx.yml'
          - '/.gitlab-ci.bd.yml'
          - '/.gitlab-ci.h5.yml'

        gitlab-ci還提供了extend關(guān)鍵字,它的功能和前面提到的YML的片段導(dǎo)入的功能是一樣的,

        不過可讀性更好一些。

        .common-config: 
          only: # 表示僅在develop/release分支上執(zhí)行
            refs:
              - develop
              - release

        install-job:
          # 其他配置 ....
          extends: .common-config

        build-job:
          # 其他配置 ....
          extends: .common-config

        5.2 Gitlab-ci的其他配置項

        「cache關(guān)鍵字」

        cache關(guān)鍵字是需要特別著重講的一個關(guān)鍵字。顧名思義,它是用來做緩存的。

        為什么要做緩存呢?當然是為了「重復(fù)運行pipeline的時候不會重復(fù)安裝全部node_modules的包」,從而減少pipeline的時間,提高pipeline的性能。

        「但是,這并不是cache關(guān)鍵字唯一的功能!」

        在介紹cache的另外一個功能之前,我要先說一下gitlab-ci的一個優(yōu)點“惡心人”的特點:

        它在運行下一個Job的時候,會默認把前一個Job新增的資源刪除得干干靜靜

        img

        沒錯,也就是說,我們上面bulid階段編譯生成的包,會在deploy階段運行前被默認刪除?。ㄎ疑a(chǎn)包都沒了我怎么部署emmmmmmm)

        而cache的作用就在這里體現(xiàn)出來了:如果我們把bulid生產(chǎn)的包的路徑添加到cache里面,雖然gitlab還是會刪除bulid目錄,但是因為在刪除前我們已經(jīng)重新上傳了cache,并且在下個Job運行時又把cache給pull下來,那么這個時候就可以實現(xiàn)在下一個Job里面使用前一個Job的資源了

        總而言之,cache的功能體現(xiàn)在兩點:

        • 「在不同pipeline之間重用資源」
        • 「在同一pipeline的不同Job之間重用資源」

        雖然cache會緩存舊的包,但我們并不用擔(dān)心使用到舊的資源,因為npm install還是會如期運行,并檢查package.json是否有更新,npm build的時候,生成的build資源包也會覆蓋cache,并且在當前Job運行結(jié)束時,作為**"新的cache"**上傳

        artifacts關(guān)鍵字

        這個關(guān)鍵字的作用是:將生成的資源作為pipeline運行成功的附件上傳,并在gitlab交互界面上提供下載

        例如我們新增以下YML

        Build-job:
          stage: build
          script:
          - 'npm run build'
          artifacts:
            name: 'bundle'
            paths: 
              - build/

        pipeline跑完后是這樣的:

        img

        image/services

        這兩個關(guān)鍵字可使用Docker的鏡像和服務(wù)運行Job,具體可參考Docker的相關(guān)資料,這里暫不多加敘述

        only/except

        這兩個關(guān)鍵字后面跟的值是tag或者分支名的列表。

        故名思義

        • only的作用是指定當前Job僅僅只在某些tag或者branch上觸發(fā)
        • 而except的作用是當前Job不在某些tag或者branch上觸發(fā)
        job:
          # use regexp
          only:
            - /^issue-.*$/
            - develop
            - release

        allow_failure

        值為true/false, 表示當前Job是否允許允許失敗。

        • 默認是false,也就是如果當前Job因為報錯而失敗,則當前pipeline停止
        • 如果是true,則即使當前Job失敗,pipeline也會繼續(xù)運行下去。
        job1:
          stage: test
          script:
            - execute_script_that_will_fail
          allow_failure: true

        retry

        顧名思義,指明的是當前Job的失敗重試次數(shù)的上限。

        但是這個值只能在0 ~2之間,也就是重試次數(shù)最多為2次,包括第一次運行在內(nèi),Job最多自動運行3次

        timeout

        配置超時時間,超過時間判定為失敗

        Job:
          script: rspec
          timeout: 3h 30m

        When

        表示當前Job在何種狀態(tài)下運行,它可設(shè)置為3個值

        • 「on_success」: 僅當先前pipeline中的所有Job都成功(或因為已標記,被視為成功allow_failure)時才執(zhí)行當前Job 。這是默認值。
        • 「on_failure」: 僅當至少一個先前階段的Job失敗時才執(zhí)行當前Job。
        • 「always」: 執(zhí)行當前Job,而不管先前pipeline的Job狀態(tài)如何。
        如果覺得這篇文章還不錯
        點擊下面卡片關(guān)注我
        來個【分享、點贊、在看】三連支持一下吧

           “分享、點贊、在看” 支持一波 

        瀏覽 57
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩成人免费视频 | 欧美淫色视频免费观看 | sm视频免费观看 | 色婷婷激情视频 | 少妇人妻AV | 北条麻妃三级电影 | 男人操女人b视频 | 天天爽日日爽 | 小情侣第一次啪啪全程偷拍 | 朱茵拍过的三级的电影 |