本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

持续集成

扩展集成测试可以在CI服务上运行。@vscode/测试-electron library 帮助您在 CI 提供商上设置扩展测试,并包含一个 示例扩展 在 Azure 管道上的设置。您可以查看 构建管道 或直接跳转到 azure-pipelines.yml 文件.

自动化发布

您还可以配置CI自动发布扩展的新版本。

发布命令类似于在本地环境使用发布。一切,但您必须以某种安全的方式提供个人访问令牌(PAT)。通过将 PAT 存储为VSCE_PAT 秘密变量一切将能够使用它。秘密变量从不暴露,因此它们可以在CI管道中安全使用。

Azure 管道

Azure 管道

Azure Pipelines非常适合运行 VS Code 扩展测试,因为它支持在 Windows、macOS 和 Linux 上运行测试。对于开源项目,您将获得无限分钟的免费使用时间和 10 个免费的并行作业。本节解释了如何设置 Azure Pipelines 来运行您的扩展测试。

首先,在 Azure DevOps 上创建一个免费账户,然后为您的扩展创建一个 Azure DevOps 项目

然后,添加以下内容azure-pipelines.yml将文件放置在扩展库的根目录。除了xvfb在 Linux CI 机器上运行 VS Code 所需的 headless 模式的设置脚本,定义是直白的:

触发:
  分支:
    包括:
    - main
  标签:
    包括:
    - v*

策略:
  矩阵:
    linux:
      imageName: 'ubuntu-latest'
    mac:
      imageName: 'macos-latest'
    windows:
      imageName: 'windows-latest'

:
  虚拟机映像: $(imageName)

步骤:

- 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 ">>> 编译 vscode-test"
    yarn && yarn compile
    echo ">>> 已编译 vscode-test"
    cd sample
    echo ">>> 运行示例集成测试"
    yarn && yarn compile && yarn test
  displayName: 运行测试
  env:
    DISPLAY: '99.0'

最后,创建一个新的管道在你的 DevOps 项目中,并将其指向 azure-pipelines.yml文件。触发构建,就完成了:

管道

推送至分支时,甚至在拉取请求时,您可以启用构建以持续运行。请参阅构建管道触发器了解更多信息。

Azure Pipelines 自动发布

  1. 设置VSCE_PAT 作为秘密变量,使用 Azure DevOps secrets 指令.
  2. 安装一切作为一个开发依赖项输入:npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. 声明一个部署脚本在package.json没有 PAT(默认情况下,一切将使用VSCE_PAT将环境变量作为个人访问令牌。
"脚本": {
  "部署": "vsce publish --yarn"
}
  1. 配置CI以便在创建标签时也会运行构建:
触发:
  分支:
    包括:
    - main
  标签:
    包括:
    - refs/tags/v*
  1. 添加一个发布走进azure-pipelines.yml那叫做纱线部署使用秘密变量。
- 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)

条件属性告诉CI仅在某些情况下运行发布步骤。

在我们的示例中,条件有三个检查:

  • 成功()- 仅在测试通过后发布。
  • startsWith(variables['Build.SourceBranch'], 'refs/tags/')- 仅在标记(发布)构建时发布。
  • 等于(变量['Agent.OS'], 'Linux')- 如果您的构建在多个代理(Windows、Linux 等)上运行,请包含此信息。如果不在,请删除该部分条件。

VSCE_PAT是一个秘密变量,不能立即作为环境变量使用。因此,我们需要明确映射环境变量VSCE_PAT到秘密变量。

GitHub 行动

您还可以配置 GitHub Actions 来运行您的扩展 CI。在无头 Linux CI 机器上xvfb需要运行 VS Code,所以如果当前操作系统是 Linux,请在启用 Xvfb 的环境中运行测试:

:
  推送:
    分支:
      - 主分支

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
    - 运行xvfb-run -a npm test
      如果runner.os == 'Linux'
    - 运行npm test
      如果runner.os != 'Linux'

GitHub Actions 自动发布

  1. 设置VSCE_PAT 作为加密的秘密,使用 GitHub Actions secrets 指令
  2. 安装一切作为一个开发依赖项输入:npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. 声明一个部署脚本在package.json没有 PAT。
"脚本": {
  "部署": "vsce publish --yarn"
}
  1. 配置CI以便在创建标签时也会运行构建:
on:
  推送:
    分支:
    - main
  发布:
    类型:
    - 创建
  1. 添加一个发布将作业添加到调用管道npm 运行 部署使用秘密变量。
- name: 发布
  如果: 成功() && 开头With(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest'
  运行: npm run deploy
  环境变量:
    VSCE_PAT: ${{ secrets.VSCE_PAT }}

if属性告诉CI仅在某些情况下运行发布步骤。

在我们的示例中,条件有三个检查:

  • 成功()- 仅在测试通过后发布。
  • startsWith(github.ref, 'refs/tags/')- 仅在标记(发布)构建时发布。
  • matrix.os == 'ubuntu-latest'- 如果您的构建在多个代理(Windows、Linux 等)上运行,请包含此信息。如果不在,请删除该部分条件。

GitLab CI

GitLab CI 可以在无头的Docker容器中测试和发布扩展。这可以通过拉取预配置的Docker镜像或安装来完成。xvfb以及在管道中运行Visual Studio Code所需的库。

图像节点:12-buster

预脚本:
  - npm 安装

测试:
  脚本:
    - |
      apt更新
      apt安装 -y libasound2 libgbm1 libgtk-3-0 libnss3 xvfb
      xvfb-run -a npm运行测试

GitLab CI 自动发布

  1. 设置VSCE_PAT 作为掩码变量使用 GitLab CI 文档.
  2. 安装一切作为一个开发依赖项输入:npm install @vscode/vsce --save-devyarn add @vscode/vsce --dev)。
  3. 声明一个部署脚本在package.json没有 PAT。
"脚本": {
  "部署": "vsce publish --yarn"
}
  1. 添加一个部署工作调用npm 运行 部署带有掩码变量,该变量仅在标签上触发。
部署:
:
    - Tab
  脚本:
    - npm run deploy

常见问题

我需要使用Yarn进行持续集成吗?

以上所有示例都涉及一个使用Yarn构建的假设项目,但是可以调整为使用npm,Grunt,Gulp,或任何其他JavaScript构建工具。