持續整合

擴充功能的整合測試可以在 CI 服務上執行。@vscode/test-electron 函式庫能協助您在 CI 提供者上設定擴充功能測試,並包含了一個在 Azure Pipelines 上設定的範例擴充功能。您可以查看該建置管線,或直接前往 azure-pipelines.yml 檔案

自動化發佈

您也可以設定 CI 以自動發佈擴充功能的新版本。

發佈指令與使用 vsce 從本機環境發佈類似,但您必須以安全的方式提供個人存取權杖 (PAT)。透過將 PAT 儲存為 VSCE_PAT 秘密變數 (secret variable)vsce 便能使用它。秘密變數永遠不會被公開,因此在 CI 管線中使用是安全的。

Azure Pipelines

Azure Pipelines

Azure Pipelines 非常適合執行 VS Code 擴充功能測試,因為它支援在 Windows、macOS 和 Linux 上執行測試。對於開源專案,您可獲得無限時數與 10 個免費的並行作業。本節說明如何設定 Azure Pipelines 來執行您的擴充功能測試。

首先,在 Azure DevOps 建立一個免費帳戶,並為您的擴充功能建立一個 Azure DevOps 專案

然後,將下列 azure-pipelines.yml 檔案新增至您擴充功能儲存庫的根目錄。除了用於 Linux 的 xvfb 設定指令碼(這是讓 VS Code 在無頭 Linux CI 機器上執行所必需的)之外,其定義非常直觀。

trigger:
  branches:
    include:
    - main
  tags:
    include:
    - v*

strategy:
  matrix:
    linux:
      imageName: 'ubuntu-latest'
    mac:
      imageName: 'macos-latest'
    windows:
      imageName: 'windows-latest'

pool:
  vmImage: $(imageName)

steps:

- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- bash: |
    /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
    echo ">>> Started xvfb"
  displayName: Start xvfb
  condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))

- bash: |
    echo ">>> Compile vscode-test"
    yarn && yarn compile
    echo ">>> Compiled vscode-test"
    cd sample
    echo ">>> Run sample integration test"
    yarn && yarn compile && yarn test
  displayName: Run Tests
  env:
    DISPLAY: ':99.0'

最後,在您的 DevOps 專案中建立一個新管線,並將其指向 azure-pipelines.yml 檔案。觸發一次建置,大功告成!

pipelines

您可以啟用持續建置,以便在推送到分支甚至建立提取請求 (pull requests) 時自動執行。請參閱建置管線觸發程序 (Build pipeline triggers) 以了解更多資訊。

Azure Pipelines 自動化發佈

  1. 請依照 Azure DevOps 秘密變數說明,將 VSCE_PAT 設定為秘密變數。
  2. vsce 安裝為 devDependencies(執行 npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. package.json 中宣告一個不含 PAT 的 deploy 指令碼(預設情況下,vsce 會使用 VSCE_PAT 環境變數作為個人存取權杖)。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. 設定 CI,讓建置作業也能在建立標籤 (tags) 時執行。
trigger:
  branches:
    include:
    - main
  tags:
    include:
    - refs/tags/v*
  1. azure-pipelines.yml 中新增一個 publish 步驟,使用秘密變數呼叫 yarn deploy
- bash: |
    echo ">>> Publish"
    yarn deploy
  displayName: Publish
  condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'), eq(variables['Agent.OS'], 'Linux'))
  env:
    VSCE_PAT: $(VSCE_PAT)

Condition (條件) 屬性會告知 CI 僅在特定情況下執行發佈步驟。

在我們的範例中,該條件包含三個檢查:

  • succeeded() - 僅在測試通過時才發佈。
  • startsWith(variables['Build.SourceBranch'], 'refs/tags/') - 僅在帶有標籤的 (發佈) 建置時才發佈。
  • eq(variables['Agent.OS'], 'Linux') - 如果您的建置在多個代理程式 (Windows、Linux 等) 上執行,請包含此項。若非如此,請刪除該條件部分。

由於 VSCE_PAT 是秘密變數,它無法直接用作環境變數。因此,我們需要明確地將環境變數 VSCE_PAT 對應到該秘密變數。

GitHub Actions

您也可以設定 GitHub Actions 來執行您的擴充功能 CI。在無頭 Linux CI 機器中,執行 VS Code 需要 xvfb,因此如果當前作業系統是 Linux,請在啟用了 Xvfb 的環境中執行測試。

on:
  push:
    branches:
      - main

jobs:
  build:
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    - name: Install Node.js
      uses: actions/setup-node@v4
      with:
        node-version: 18.x
    - run: npm install
    - run: xvfb-run -a npm test
      if: runner.os == 'Linux'
    - run: npm test
      if: runner.os != 'Linux'

GitHub Actions 自動化發佈

  1. 請依照 GitHub Actions 秘密變數說明,將 VSCE_PAT 設定為加密秘密 (encrypted secret)。
  2. vsce 安裝為 devDependencies(執行 npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. package.json 中宣告一個不含 PAT 的 deploy 指令碼。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. 設定 CI,讓建置作業也能在建立標籤 (tags) 時執行。
on:
  push:
    branches:
    - main
  release:
    types:
    - created
  1. 在管線中新增一個 publish 作業,使用秘密變數呼叫 npm run deploy
- name: Publish
  if: success() && startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest'
  run: npm run deploy
  env:
    VSCE_PAT: ${{ secrets.VSCE_PAT }}

if 屬性會告知 CI 僅在特定情況下執行發佈步驟。

在我們的範例中,該條件包含三個檢查:

  • success() - 僅在測試通過時才發佈。
  • startsWith(github.ref, 'refs/tags/') - 僅在帶有標籤的 (發佈) 建置時才發佈。
  • matrix.os == 'ubuntu-latest' - 如果您的建置在多個代理程式 (Windows、Linux 等) 上執行,請包含此項。若非如此,請刪除該條件部分。

GitLab CI

GitLab CI 可用於在無頭 Docker 容器中測試和發佈擴充功能。這可以透過拉取預先設定好的 Docker 映像檔,或是安裝 xvfb 及執行 Visual Studio Code 所需的函式庫來完成。

image: node:12-buster

before_script:
  - npm install

test:
  script:
    - |
      apt update
      apt install -y libasound2 libgbm1 libgtk-3-0 libnss3 xvfb
      xvfb-run -a npm run test

GitLab CI 自動化發佈

  1. 請依照 GitLab CI 文件,將 VSCE_PAT 設定為遮蔽變數 (masked variable)。
  2. vsce 安裝為 devDependencies(執行 npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. package.json 中宣告一個不含 PAT 的 deploy 指令碼。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. 新增一個 deploy 作業,使用遮蔽變數呼叫 npm run deploy,且僅在標籤上觸發。
deploy:
  only:
    - tags
  script:
    - npm run deploy

常見問題

我必須使用 Yarn 進行持續整合嗎?

上述所有範例皆參考以 Yarn 建置的假設專案,但同樣適用於 npmGruntGulp 或任何其他 JavaScript 建置工具。

© . This site is unofficial and not affiliated with Microsoft.