<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    分享一個CI/CD的自動部署想法

    共 3014字,需瀏覽 7分鐘

     ·

    2022-03-07 10:19

    這里是Z哥的個人公眾號

    每周五11:45 按時送達

    當然了,也會時不時加個餐~

    我的第「221」篇原創(chuàng)敬上



    大家好,我是Z哥。
    最近工作中正好在設(shè)計一個方案,以支持 CD 環(huán)節(jié)的第一個部署節(jié)點可以完全自動部署,并且整個環(huán)節(jié)中盡量減少人為干預的節(jié)點。
    之前也沒有這塊的實戰(zhàn)經(jīng)驗,摸著石頭過河,想了一個方案,在這里分享給大家,歡迎你一起討論,相互學習。

    我目前所在的公司 CI/CD 流程是這樣的。

    fee55679d0adc41a3f7a29e9461955c6.webp


    相信大多數(shù)公司的 CI/CD 流程和上圖差別不大,基本上都是一個逐漸推進的直線節(jié)點。

    在這個節(jié)點不斷推進的過程中,數(shù)據(jù)庫和配置的變更如何自動化,往往是面臨的最大問題。

    我這次要做的事就是在圖中的 QA 環(huán)境之前增加一個 Alpha 環(huán)境,并且該環(huán)境的部署需要完全自動化進行。
    那么自動部署過程中,我們有哪些原則可以被提煉出來,可以指導我們將這件事做成,并且往正確的方向持續(xù)進行呢?
    我的理解是以下兩點:
    • 在自動部署之前,盡可能提前檢測出部署后會導致該程序的上下游甚至整個系統(tǒng)不可用的風險。比如,通過靜態(tài)代碼檢測。

    • 部署之后,盡可能廣地識別上下游以及整個系統(tǒng)的異常,及時回滾。比如,通過冒煙測試。


    基于此原則,我構(gòu)思的方案是這個樣子:

    13b74d4497fe17f0b1583c85243350b3.webp


    在具體實施層面,覺得需要做以下幾件事,優(yōu)先級從高到低排列:
    1. 配置和數(shù)據(jù)庫變更文件的標準制定

    2. 能夠識別配置和數(shù)據(jù)庫變更文件的新增

    3. 能夠?qū)?gòu)建的鏡像、變更文件打包到一起通知到運維與 DBA(條件允許的話,直接在系統(tǒng)層面打通)

    4. 在部署 Alpha 環(huán)境前的可用性檢測。

    5. 每個程序提供健康檢查接口,用于檢測部署結(jié)果。

    6. 自動化的冒煙測試。用于檢測 Alpha 環(huán)境的可用性,并觸發(fā)回滾。


    要做的細節(jié)工作還不有不少,但是核心工作就這么多。我們再來展開一下其中的每一件事。

    /01 配置和數(shù)據(jù)庫變更文件的標準制定/
    首先,自動化的前提是先標準化,為了實現(xiàn)自動化,我們需要先將標準確定好。針對變更文件的標準,我大致想了下是這個樣子。

    01? 文件存放目錄定義
    • 方案1:分別在 gitlab 倉庫里定義 infra_changes_conf 、 infra_changes_db 、deploy_dependencies 文件夾。

    • 【建議】方案2:在 gitlab 倉庫里定義infra_changes文件夾,其中統(tǒng)一存放配置和 DB 變更、依賴描述文件,用不同的前綴區(qū)分。



    02? 文件名的定義
    文件名格式為:[conf/db/depend]_JiraID_自增序號。Jira ID 是Jira上的故事、任務、Bug 的 ID。示例:
    • conf_XXXProject-2564_1.yaml

    • conf_XXXProject-2564_2.yaml

    • db_XXXProject-2564_1.yaml

    • db_XXXProject-2564_2.yaml

    • depend_XXXProject-2564_1.yaml

    • depend_XXXProject-2564_2.yaml


    文件名最后的自增序號一般用于兩種場景:
    • 前一次構(gòu)建并發(fā)布 Alpha 環(huán)境成功,但因功能需求,需要額外增加配置并發(fā)新版。


    • 配置或者 db 變更需要區(qū)分程序運行前還是運行后。



    03? 文件內(nèi)容的格式
    conf_ 文件內(nèi)容格式為 YAML 格式,結(jié)構(gòu)如下:
    runtime: before|after  #程序運行前 or 運行后store_type: config_map|apollo|nacos|... #配置的存儲類型service_name: xxxxxx  #服務名remove_keys:  - key1  - key2.a.b  #多級key 以 Properties 格式定義add_keys:  -    key1: value1    key2.a.b: value2update_keys:  -    key1: value1    key2.a.b: value2

    同樣的,db_ 文件內(nèi)容格式為 YAML 格式,它支持兩種模式,結(jié)構(gòu)分別如下:
    runtime: before|after #程序運行前or運行后db_type: mysql|mongodb|dynamodb|... #數(shù)據(jù)庫的類型ddls:  - sql1  - sql2dmls:  - sql1  - sql2

    depend_ 文件內(nèi)容格式同樣為 YAML 格式,結(jié)構(gòu)如下
    jira_ids:  - XXXProject-2564  - XXXProject-2564

    相信你從文件格式中也能明白每一個屬性的意義吧?


    /02 識別配置和 DB 變更文件的新增/
    聰明的你可能已經(jīng)根據(jù)前面的《文件名的定義》部分內(nèi)容猜到了,就是通過 Jira ID 來識別。具體操作方式是:
    1. 研發(fā)將配置、DB變更文件與代碼一起提交到Gitlab 倉庫。

    2. 如果檢測到 Gitlab 的 commit 信息中帶 Jira ID,那么會觸發(fā)構(gòu)建,并且將該鏡像與 commit 中的 Jira ID 關(guān)聯(lián)。

    3. 然后根據(jù) Jira ID 去找 infra_changes 目錄中與該 Jira ID 相關(guān)的變更文件,將它們與鏡像放到一起。



    /03? 將構(gòu)建的鏡像、變更文件打包到一起通知到運維與 DBA /
    如果運維和DBA已經(jīng)有相關(guān)的自動化操作系統(tǒng)的話,可以直接在系統(tǒng)層面進行打通。否則的話,直接發(fā)出一個飛書或者釘釘消息就好了。

    /04? 部署 Alpha 環(huán)境前的可用性檢測/
    這個目前能想到的好像只有靜態(tài)代碼掃描了。

    /05? 每個程序提供健康檢查接口,用于檢測部署結(jié)果/
    健康檢查的作用在于,在部署完之后,通過調(diào)用每個系統(tǒng)的健康檢查接口來快速得到某個程序的自檢結(jié)果。畢竟只靠冒煙測試的話,整個效率會比較低。
    具體的檢查項:
    比如數(shù)據(jù)庫連接是否正常,所依賴的外部系統(tǒng)是否已經(jīng)就緒等等。

    /06? 自動化的冒煙測試/
    這個大家應該都知道,就不展開了。

    大體上就這么多。等后面實際運用起來之后應該還會有一些迭代變化,到時候如果我覺得值得分享的話,再來和大家分享。
    好了,總結(jié)一下。
    這篇呢,Z 哥和你分享了我在目前團隊中正在做的一個與 CI/CD 相關(guān)的事情。
    為了確保整個自動化過程的盡可能穩(wěn)定,我們需要基于兩個原則不斷思考和打磨整個過程。他們分別是:
    • 在自動部署之前,盡可能提前檢測出部署后會導致該程序的上下游甚至整個系統(tǒng)不可用的風險。比如,通過靜態(tài)代碼檢測。

    • 部署之后,盡可能廣的識別上下游以及整個系統(tǒng)的異常,及時回滾。比如,通過冒煙測試。



    在具體的實踐過程中,主要有以下六個步驟:
    1. 配置和數(shù)據(jù)庫變更文件的標準制定

    2. 能夠識別配置和數(shù)據(jù)庫變更文件的新增

    3. 能夠?qū)?gòu)建的鏡像、變更文件打包到一起通知到運維與 DBA(條件允許的話,直接在系統(tǒng)層面打通)

    4. 在部署 Alpha 環(huán)境前的可用性檢測。

    5. 每個程序提供健康檢查接口,用于檢測部署結(jié)果。

    6. 自動化的冒煙測試。用于檢測 Alpha 環(huán)境的可用性,并觸發(fā)回滾。


    希望對你有所啟發(fā)。
    如果你有什么關(guān)于CI/CD的好想法,歡迎和我交流哈~



    推薦閱讀:


    原創(chuàng)不易,如果你覺得這篇文章還不錯,就「點贊」或者「在看」一下吧,鼓勵我的創(chuàng)作 :)


    也可以分享我的公眾號名片給有需要的朋友們。

    如果你有關(guān)于軟件架構(gòu)、分布式系統(tǒng)、產(chǎn)品、運營的困惑

    可以試試點擊「閱讀原文

    瀏覽 57
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

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

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    欧美久久久久久 | 日韩精品一区二区三区av | 暴操美女视频网站 | 蘑菇视频 成人精品战指 | 中文字幕偷拍 |