ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Kontinuierliche Integration

Integrationstests für Erweiterungen können auf CI-Diensten ausgeführt werden. Die Bibliothek @vscode/test-electron hilft Ihnen bei der Einrichtung von Erweiterungstests auf CI-Anbietern und enthält eine Beispielerweiterung, die für Azure Pipelines eingerichtet ist. Sie können die Build-Pipeline einsehen oder direkt zur azure-pipelines.yml-Datei springen.

Automatisierte Veröffentlichung

Sie können die CI auch so konfigurieren, dass eine neue Version der Erweiterung automatisch veröffentlicht wird.

Der Veröffentlichungsbefehl ähnelt der Veröffentlichung aus einer lokalen Umgebung mit vsce, aber Sie müssen das Personal Access Token (PAT) auf irgendeine Weise sicher bereitstellen. Durch Speichern des PAT als geheime Variable VSCE_PAT kann vsce es verwenden. Geheime Variablen werden niemals offengelegt, sodass sie in einer CI-Pipeline sicher verwendet werden können.

Azure Pipelines

Azure Pipelines

Azure Pipelines eignet sich hervorragend zum Ausführen von VS Code-Erweiterungstests, da es die Ausführung von Tests unter Windows, macOS und Linux unterstützt. Für Open-Source-Projekte erhalten Sie unbegrenzte Minuten und 10 kostenlose parallele Jobs. Dieser Abschnitt erklärt, wie Sie Azure Pipelines für die Ausführung Ihrer Erweiterungstests einrichten.

Erstellen Sie zunächst ein kostenloses Konto auf Azure DevOps und erstellen Sie ein Azure DevOps-Projekt für Ihre Erweiterung.

Fügen Sie dann die folgende azure-pipelines.yml-Datei zum Stammverzeichnis Ihres Erweiterungsrepositorys hinzu. Abgesehen vom xvfb-Setup-Skript für Linux, das zum Ausführen von VS Code in Headless-Linux-CI-Maschinen erforderlich ist, ist die Definition unkompliziert.

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'

Erstellen Sie abschließend eine neue Pipeline in Ihrem DevOps-Projekt und verweisen Sie diese auf die azure-pipelines.yml-Datei. Lösen Sie einen Build aus und voilà.

pipelines

Sie können den Build so aktivieren, dass er kontinuierlich ausgeführt wird, wenn Sie auf einen Branch pushen, und sogar bei Pull-Anfragen. Weitere Informationen finden Sie unter Build-Pipeline-Trigger.

Automatisierte Veröffentlichung mit Azure Pipelines

  1. Richten Sie VSCE_PAT als geheime Variable mit den Anweisungen für geheime Variablen in Azure DevOps ein.
  2. Installieren Sie vsce als devDependencies (npm install @vscode/vsce --save-dev oder yarn add @vscode/vsce --dev).
  3. Deklarieren Sie ein deploy-Skript in package.json ohne das PAT (standardmäßig verwendet vsce die Umgebungsvariable VSCE_PAT als Personal Access Token).
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. Konfigurieren Sie die CI so, dass der Build auch beim Erstellen von Tags ausgeführt wird.
trigger:
  branches:
    include:
    - main
  tags:
    include:
    - refs/tags/v*
  1. Fügen Sie einen publish-Schritt in azure-pipelines.yml hinzu, der yarn deploy mit der geheimen Variable aufruft.
- 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)

Die Eigenschaft condition weist die CI an, den Veröffentlichungsschritt nur unter bestimmten Bedingungen auszuführen.

In unserem Beispiel hat die Bedingung drei Prüfungen:

  • succeeded() - Nur veröffentlichen, wenn die Tests erfolgreich waren.
  • startsWith(variables['Build.SourceBranch'], 'refs/tags/') - Nur veröffentlichen, wenn ein getaggter (Release-)Build vorliegt.
  • eq(variables['Agent.OS'], 'Linux') - Einschließen, wenn Ihr Build auf mehreren Agenten (Windows, Linux usw.) ausgeführt wird. Andernfalls entfernen Sie diesen Teil der Bedingung.

Da VSCE_PAT eine geheime Variable ist, ist sie nicht sofort als Umgebungsvariable verwendbar. Daher müssen wir die Umgebungsvariable VSCE_PAT explizit der geheimen Variable zuordnen.

GitHub Actions

Sie können auch GitHub Actions konfigurieren, um Ihre Erweiterungs-CI auszuführen. In Headless-Linux-CI-Maschinen ist xvfb erforderlich, um VS Code auszuführen. Wenn also Linux das aktuelle Betriebssystem ist, führen Sie die Tests in einer Xvfb-aktivierten Umgebung aus.

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'

Automatisierte Veröffentlichung mit GitHub Actions

  1. Richten Sie VSCE_PAT als verschlüsseltes Geheimnis ein, indem Sie die Anweisungen für geheime Schlüssel in GitHub Actions verwenden.
  2. Installieren Sie vsce als devDependencies (npm install @vscode/vsce --save-dev oder yarn add @vscode/vsce --dev).
  3. Deklarieren Sie ein deploy-Skript in package.json ohne das PAT.
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. Konfigurieren Sie die CI so, dass der Build auch beim Erstellen von Tags ausgeführt wird.
on:
  push:
    branches:
    - main
  release:
    types:
    - created
  1. Fügen Sie der Pipeline einen publish-Job hinzu, der npm run deploy mit der geheimen Variable aufruft.
- name: Publish
  if: success() && startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest'
  run: npm run deploy
  env:
    VSCE_PAT: ${{ secrets.VSCE_PAT }}

Die Eigenschaft if weist die CI an, den Veröffentlichungsschritt nur unter bestimmten Bedingungen auszuführen.

In unserem Beispiel hat die Bedingung drei Prüfungen:

  • success() - Nur veröffentlichen, wenn die Tests erfolgreich waren.
  • startsWith(github.ref, 'refs/tags/') - Nur veröffentlichen, wenn ein getaggter (Release-)Build vorliegt.
  • matrix.os == 'ubuntu-latest' - Einschließen, wenn Ihr Build auf mehreren Agenten (Windows, Linux usw.) ausgeführt wird. Andernfalls entfernen Sie diesen Teil der Bedingung.

GitLab CI

GitLab CI kann verwendet werden, um die Erweiterung in Headless-Docker-Containern zu testen und zu veröffentlichen. Dies kann durch Ziehen eines vorkonfigurierten Docker-Images oder durch Installieren von xvfb und der erforderlichen Bibliotheken zum Ausführen von Visual Studio Code während der Pipeline erfolgen.

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

Automatisierte Veröffentlichung mit GitLab CI

  1. Richten Sie VSCE_PAT als maskierte Variable mit der GitLab CI-Dokumentation ein.
  2. Installieren Sie vsce als devDependencies (npm install @vscode/vsce --save-dev oder yarn add @vscode/vsce --dev).
  3. Deklarieren Sie ein deploy-Skript in package.json ohne das PAT.
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. Fügen Sie einen deploy-Job hinzu, der npm run deploy mit der maskierten Variable aufruft und nur bei Tags ausgelöst wird.
deploy:
  only:
    - tags
  script:
    - npm run deploy

Häufig gestellte Fragen

Muss ich Yarn für die kontinuierliche Integration verwenden?

Alle oben genannten Beispiele beziehen sich auf ein hypothetisches Projekt, das mit Yarn erstellt wurde, können aber angepasst werden, um npm, Grunt, Gulp oder jedes andere JavaScript-Build-Tool zu verwenden.

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