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 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à.

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
- Richten Sie
VSCE_PATals geheime Variable mit den Anweisungen für geheime Variablen in Azure DevOps ein. - Installieren Sie
vscealsdevDependencies(npm install @vscode/vsce --save-devoderyarn add @vscode/vsce --dev). - Deklarieren Sie ein
deploy-Skript inpackage.jsonohne das PAT (standardmäßig verwendetvscedie UmgebungsvariableVSCE_PATals Personal Access Token).
"scripts": {
"deploy": "vsce publish --yarn"
}
- 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*
- Fügen Sie einen
publish-Schritt inazure-pipelines.ymlhinzu, deryarn deploymit 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
- Richten Sie
VSCE_PATals verschlüsseltes Geheimnis ein, indem Sie die Anweisungen für geheime Schlüssel in GitHub Actions verwenden. - Installieren Sie
vscealsdevDependencies(npm install @vscode/vsce --save-devoderyarn add @vscode/vsce --dev). - Deklarieren Sie ein
deploy-Skript inpackage.jsonohne das PAT.
"scripts": {
"deploy": "vsce publish --yarn"
}
- Konfigurieren Sie die CI so, dass der Build auch beim Erstellen von Tags ausgeführt wird.
on:
push:
branches:
- main
release:
types:
- created
- Fügen Sie der Pipeline einen
publish-Job hinzu, dernpm run deploymit 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
- Richten Sie
VSCE_PATals maskierte Variable mit der GitLab CI-Dokumentation ein. - Installieren Sie
vscealsdevDependencies(npm install @vscode/vsce --save-devoderyarn add @vscode/vsce --dev). - Deklarieren Sie ein
deploy-Skript inpackage.jsonohne das PAT.
"scripts": {
"deploy": "vsce publish --yarn"
}
- Fügen Sie einen
deploy-Job hinzu, dernpm run deploymit 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.
