Link

지속적인 통합

익스텐션 통합 테스트는 CI 서비스에서 실행 가능합니다. vscode-test 라이브러리는 여러분의 CI 제공자로에 익스텐션 테스트 설치와, 예시 익스텐션 설치를 Azure 파이프라인에 포함 할 수 있게 돕습니다. 파이프라인 생성을 참조하거나, 혹은 직접 azure-pipelines.yml 파일에 접근하십시오.

Azure 파이프라인

Azure Pipelines

[Azure 파이프라인]은 Windows, macOS, Linux에서의 테스트를 지원하기에 VS Code 익스텐션 테스트를 실행하기에 좋은 선택입니다. 오픈소스 프로젝트의 경우, 제한되지 않은 시간과 10 개의 무료 병렬 작업을 제공받을 수 있습니다. 이번 섹션에서는 여러분의 익스텐션 테스트를 실행하기 위해 Azure 파이프라인 설치 하는 방법에 대해 설명합니다.

우선, Azure DevOps에 무료 계정을 생성하고, 여러분의 익스텐션을 Azure DevOps project에 생성하십시오.

그 다음, 아래의 azure-pipelines.yml 파일을 익스텐션 저장소의 root에 저장하십시오. VS Code headless Linux CI 머신에서 실행에 필수적인, xvfb 설치 스크립트를 제외하고는, 간단합니다.

trigger:
- master

strategy:
  matrix:
    linux:
      imageName: 'ubuntu-16.04'
    mac:
      imageName: 'macos-10.13'
    windows:
      imageName: 'vs2017-win2016'

pool:
  vmImage: $(imageName)

steps:

- task: NodeTool@0
  inputs:
    versionSpec: '8.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

여러분은 브랜치에 푸시하거나, 풀 리퀘스트의 경우에도 빌드가 계속 진행되게할 수 있습니다. 더 많은 정보를 위해 파이프라인 트리거 생성을 참조하십시오.

Travis CI

vscode-testTravis CI 빌드 정의 또한 포함하고 있습니다. Azure 파이프라인과 Travis CI의 환경 변수를 설정하는 방법이 다르기 때문에 xvfb 스크립트는 조금 어렵습니다.

language: node_js
os:
  - osx
  - linux
node_js: 8

install:
  - |
    if [ $TRAVIS_OS_NAME == "linux" ]; then
      export DISPLAY=':99.0'
      /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
    fi
script:
  - |
    echo ">>> Compile vscode-test"
    yarn && yarn compile
    echo ">>> Compiled vscode-test"
    cd sample
    echo ">>> Run sample integration test"
    yarn && yarn compile && yarn test
cache: yarn

자동 게시

여러분은 익스텐션의 새 버전을 자동으로 게시하기 위해 CI를 구성할 수 있습니다.

게시하기 커맨드는 vsce 서비스를 이용해 로컬 환경에서 퍼블리시하는 것과 비슷하지만 커맨드에 Personal Access Token (PAT)도 같이 제공해야 합니다.

여러분은 PAT를 소스코드와 같이 외부로 유출시켜서는 안됩니다 (민감한 정보입니다), 그러니 ‘시크릿 변수’에 저장하십시오. 그 변수의 값은 유출 되지 않을 것이지만, azure-pipelines.yml 파일에서 사용 가능합니다.

시크릿 변수를 생성하기 위해서, Azure DevOps Secrets instructions를 확인하십시오.

다음 단계들:

  1. vscedevDependencies에 설치하십시오. (npm install vsce --save-dev 혹은 yarn add vsce --dev).
  2. package.json 내부에 PAT를 사용하지 않고 deploy스크립트를 선언하십시오.
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. azure-pipelines.ymltrigger 섹션을 추가하여, 태그가 포함된 모든 브랜치에 빌드가 작동하게 CI를 구성하십시오.
trigger:
  branches:
    include: ['*']
  tags:
    include: ['*']
  1. azure-pipelines.ymlpublish 단계를 더해서 yarn deploy를 시크릿 변수와 호출하게 하십싱. (예제의 VSCODE_MARKETPLACE_TOKEN 은 여러분이 생성한 시브릿 변수의 이름으로 교체 되어야 합니다.)
- bash: |
    echo ">>> Publish"
    yarn deploy -p $(VSCODE_MARKETPLACE_TOKEN)
  displayName: Publish
  condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'), eq(variables['Agent.OS'], 'Linux'))

condition 속성은 CI가 게시 단계를 특정 상황에서만 실행하도록 합니다.

이 예제에서는, condition은 3가지를 확인합니다.

  • succeeded() - 테스트에 성공 했을때만 게시합니다.
  • startsWith(variables['Build.SourceBranch'], 'refs/tags/') - tags가 붙은(릴리스) 빌드일 때만 게시 합니다.
  • eq(variables['Agent.OS'], 'Linux') - 빌드가 여러 agent(Windows, Linux 등등)에서 실행 되는 경우에만 포함시킵니다. 그렇지 않은 경우 condition의 해당 부분을 제거 하십시오.