微信雲託管如何實現一套程式碼對應多個環境

CloudBase雲開發發表於2021-10-12

微信雲託管 是由微信團隊聯合騰訊雲推出的一站式後端雲服務。對於應用開發採用前後端分離架構的場景,雲託管可做到免運維免域名、免伺服器管理、防 DDoS 攻擊和境外加速等,從程式碼管理到 CI/CD 流水線部署釋出,提供全鏈路、低成本、企業級的雲原生解決方案。

PC 端訪問 https://cloud.weixin.qq.com 即可立即開始使用微信雲託管。

前言

在專案開發時,通常具有多種環境,用來在開發的各個流程階段進行作用,比如預發、生產。

環境的不同,對應的資料庫等配置資訊就有所不同,就必須要針對配置資訊的變更,對應建立單獨的程式碼倉庫,流水線對應一個程式碼倉庫,這樣維護成本太大。

在這裡主要是配置資訊的變化,本篇主要介紹如何在專案程式碼中動態感知所處的微信雲託管環境,進而給予正確的配置資訊。

一、環境變數

微信雲託管在執行專案服務過程中,帶入了一個環境變數,名稱為 CBR_ENV_ID ,意義是當前執行服務所處的 微信雲託管環境ID

所以在專案內部,可以通過獲取 CBR_ENV_ID 變數,來感知當前專案在哪個環境執行。

二、劃分環境

微信雲託管的環境可以建立多個,單個環境下可以有多個服務,和單獨的資料庫以及物件儲存,在客觀條件上做了隔離。

所以可以用 微信雲託管環境 為維度進行隔離,建立專案開發的各個環境(預發、生產)

最終我們可以得到一個清單,樣式如下:

werun—id1 = '預發'
werun—id2 = '生產'

其中 werun—id 為微信雲託管的環境ID。

三、配置程式碼
接下來將上述清單的配置寫到專案程式碼中,以 nodejs 為例:

假設一開始我們的配置 config.js 是這樣的:

module.exports = {
  "text":"開發環境"
}

為了簡化在這裡只有一個text,實際應用中,應該是資料庫、儲存、網路通訊的配置資訊,也就是需要根據環境區分的資訊都要寫到一塊。

接下來,加上 CBR_ENV_ID 變數,來進行改造,程式碼如下:

const config = {
  'werun—id1': {
    text:'預發環境'
  },
  'werun—id2': {
    text:'生產環境'
  },
  NO: {
    text: '本地環境'
  }
}

module.exports = function(env=null){
  const key = env || process.env.CBR_ENV_ID
  if(config[key] != null){
    return config[key]
  } else {
    return config.NO
  }
}

以上程式碼,將各個環境的配置資訊統一囊括,然後根據 CBR_ENV_ID 變數來進行分發,如果沒有預設的環境配置,則返回本地測試配置。

以上就已經做完了專案的動態配置改造,接下來我們開始配置流水線。

四、配置流水線

預發、生產環境在整體上應該保持一致,但在資料層面予以區分,所以兩個環境在整體配置方面區別不大。

根據自己的業務需求,配置一個或若干個服務,選配資料庫或物件儲存等。

接下來我們重點來講流水線的配置差異:

以上是新建流水線的資訊框,兩個環境的同一服務,應該配置相同的程式碼倉庫、分支和目標目錄。

在觸發條件中,可以根據開發流程的不同稍有改變,合理選擇是變更就觸發還是定時觸發;比如你每週三釋出版本,那就按照計劃選擇定時觸發就可以。

在釋出策略中,因為生產環境要求穩定,所以不能直接全量釋出,可以選擇僅構建映象,或者構建版本。

預發環境可以直接發全量釋出,便於直接開始系統的體驗測試,在測試通過後,就可以安排生產環境的灰度釋出了。

五、環境流程建議

每個團隊都有自己的開發測試流程和環境,請根據自身情況合理理解本篇內容。

傳統開發模式下的開發測試流程在轉移到微信雲託管時需要有些變通,以下是一些建議:

1、開發環境:團隊開發人員產出程式碼自測的環境,一般可以在本地PC開一個Docker容器掛載專案程式碼開發。容器映象保證團隊統一性,將極大的減少因為環境問題導致的聯調失敗。

2、測試、聯調、迴歸環境:需要專案整體性的測試體驗,在這裡分形態來建議,專案形態上有 單一服務型 和 微服務 兩種形態:

單一服務型:不管專案有多大,就一個服務執行,更新需要全部替換;這種情況下不建議將其放在微信雲託管環境中聯調測試,直接在本地測試和聯調開發的效率會更高一些。因為只有內部業務互相呼叫,不涉及其他的服務(API介面、資料庫、物件儲存除外,本身屬於外聯通性)。

微服務形態:專案被拆分成不同的模組,每個模組服務獨立執行,共同作用,更新只需要替換變更的;這種情況下建議放在微信雲託管中測試,也就是變更的模組在經過測試,表現穩定的情況下,將其部署到微信雲託管中,和其他服務一起做整體測試。

3、預發、生產環境:微信雲託管中開單獨的環境,如果需要預發環境連線生產環境資料庫,可以設定兩個環境內網聯通,然後內網連線對應的資料庫。

現在體驗微信雲託管,立享1個月免費額度:https://cloud.weixin.qq.com/cloudrun

相關文章