継続的インテグレーション
拡張機能の統合テストはCIサービスで実行できます。@vscode/test-electron
ライブラリは、CIプロバイダーでの拡張機能テストのセットアップに役立ち、Azure Pipelinesでのサンプル拡張機能のセットアップが含まれています。ビルドパイプラインを確認するか、azure-pipelines.yml
ファイルに直接移動できます。
自動発行
また、CIを構成して、拡張機能の新しいバージョンを自動的に発行することもできます。
発行コマンドは、vsce
を使用してローカル環境から発行する場合と似ていますが、Personal Access Token (PAT) を安全な方法で提供する必要があります。PATをVSCE_PAT
というシークレット変数として保存することで、vsce
はそれを使用できるようになります。シークレット変数は決して公開されないため、CIパイプラインで安全に使用できます。
Azure Pipelines
Azure Pipelinesは、Windows、macOS、Linuxでテストの実行をサポートしているため、VS Code拡張機能テストの実行に最適です。オープンソースプロジェクトの場合、無制限の実行時間と10個の無料の並列ジョブが提供されます。このセクションでは、拡張機能テストを実行するためのAzure Pipelinesのセットアップ方法について説明します。
まず、Azure DevOpsで無料アカウントを作成し、拡張機能用のAzure DevOpsプロジェクトを作成します。
次に、以下のazure-pipelines.yml
ファイルを拡張機能のリポジトリのルートに追加します。ヘッドレスLinux CIマシンでVS Codeを実行するために必要なLinux用のxvfb
セットアップスクリプトを除けば、定義は簡単です。
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
ファイルを指定します。ビルドをトリガーすると、これで完了です。
ブランチにプッシュしたとき、およびプルリクエストでも、ビルドが継続的に実行されるように設定できます。詳細については、ビルドパイプライントリガーを参照してください。
Azure Pipelines による自動発行
- Azure DevOpsのシークレットに関する手順に従って、
VSCE_PAT
をシークレット変数として設定します。 vsce
をdevDependencies
としてインストールします(npm install @vscode/vsce --save-dev
またはyarn add @vscode/vsce --dev
)。- PATを含まずに
package.json
にdeploy
スクリプトを宣言します(デフォルトでは、vsce
はVSCE_PAT
環境変数をPersonal Access Tokenとして使用します)。
"scripts": {
"deploy": "vsce publish --yarn"
}
- タグが作成された際にもビルドが実行されるようにCIを設定します。
trigger:
branches:
include:
- main
tags:
include:
- refs/tags/v*
azure-pipelines.yml
に、シークレット変数とともにyarn deploy
を呼び出すpublish
ステップを追加します。
- 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に指示します。
この例では、条件には3つのチェックがあります。
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
が必要なため、現在のOSが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 による自動発行
- GitHub Actionsのシークレットに関する手順に従って、
VSCE_PAT
を暗号化されたシークレットとして設定します。 vsce
をdevDependencies
としてインストールします(npm install @vscode/vsce --save-dev
またはyarn add @vscode/vsce --dev
)。- PATを含まずに
package.json
にdeploy
スクリプトを宣言します。
"scripts": {
"deploy": "vsce publish --yarn"
}
- タグが作成された際にもビルドが実行されるようにCIを設定します。
on:
push:
branches:
- main
release:
types:
- created
- シークレット変数とともに
npm run deploy
を呼び出すpublish
ジョブをパイプラインに追加します。
- 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に指示します。
この例では、条件には3つのチェックがあります。
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 による自動発行
- GitLab CIのドキュメントに従って、
VSCE_PAT
をマスクされた変数として設定します。 vsce
をdevDependencies
としてインストールします(npm install @vscode/vsce --save-dev
またはyarn add @vscode/vsce --dev
)。- PATを含まずに
package.json
にdeploy
スクリプトを宣言します。
"scripts": {
"deploy": "vsce publish --yarn"
}
- マスクされた変数とともに
npm run deploy
を呼び出すdeploy
ジョブを追加します。これはタグが作成された場合にのみトリガーされます。
deploy:
only:
- tags
script:
- npm run deploy
よくある質問
継続的インテグレーションにはYarnを使用する必要がありますか?
上記のすべての例は、Yarnで構築された架空のプロジェクトを指していますが、これらはnpm、Grunt、Gulp、またはその他のJavaScriptビルドツールを使用するように適応できます。