Özel işlem hatları görev uzantısı ekleme

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018-TFS 2017

Azure DevOps 'da özel derleme veya sürüm görevleri için kuruluşunuza uzantıları yüklemeyi öğrenin. Bu görevler, adım ekleme sihirbazında Microsoft tarafından belirtilen görevlerin yanında görüntülenir.

Azure DevOps 'daki uzantılar için derleme görevi kataloğunun ekran görüntüsü.

Yeni platformlar arası derleme/sürüm sistemi hakkında daha fazla bilgi edinmek için bkz. Azure Pipelines nedir?.

Not

Bu makalede aracı tabanlı Uzantılarda aracı görevleri ele alınmaktadır. Sunucu görevleri/sunucu tabanlı uzantılar hakkında daha fazla bilgi için sunucu görevi GitHub belgelerinegöz atın.

Önkoşullar

Azure DevOps uzantıları oluşturmak için aşağıdaki yazılım ve araçlara ihtiyacınız vardır:

  • Azure DevOps 'da bir kuruluş. Daha fazla bilgi için bkz. kuruluş oluşturma.

  • Bir metin düzenleyici. Birçok öğreticilerde IntelliSense ve hata ayıklama desteği sağlayan Visual Studio Code kullanırız. En son sürümü indirmek için Code.VisualStudio.com adresine gidin.

  • Node.js en son sürümü . Üretim ortamı yalnızca Node10 veya Node6 kullanır ( "Node" "execution" yerine nesnesini kullanarak Node10 ).

  • Node10 kullanan görevler için sürüm 4.0.2 veya daha yeni bir sürüm önerdiğimiz halde TypeScript derleyicisi 2.2.0 veya üzeri. Derleyiciyi indirmek için npmjs.com adresine gidin.

  • Uzantılarınızı paketleyip Azure DevOps Için platformlar arası CLI . Bir Node.js bileşeni kullanarak TFX-CLI 'yi npm çalıştırarak yükleyebilirsiniz npm i -g tfx-cli .

  • homeProjeniz için bir dizin. homeBu öğreticideki adımları tamamladıktan sonra, derleme veya yayın görev uzantısının dizini aşağıdaki örnekteki gibi görünmelidir:

    |--- README.md    
    |--- images                        
        |--- extension-icon.png  
    |--- buildAndReleaseTask            // where your task scripts are placed
    |--- vss-extension.json             // extension's manifest
    
  • VSS-Web-Extension-SDK paketi yüklemesi.

Önemli

Geliştirme makinesinin, yazılan kodun aracıdaki üretim ortamıyla ve Azure-işlem hatları-Task-lib ' ın en son önizleme sürümü ile uyumlu olduğundan emin olmak için Node v 10.21.0 ' yi çalıştırması gerekir.

UNIX ile Windows arasında geliştirme

Bu, PowerShell ile Windows 'da dolaştık. Tüm platformlar için genel hale getirmeye çalıştık, ancak ortam değişkenlerini alma söz dizimi farklı.

Mac veya Linux kullanıyorsanız, tüm örneklerini $env:<var>=<val> ile değiştirin export <var>=<val> .

1. Adım: özel bir görev oluşturma

Görevinizi ayarlayın. Klasör içinde 1. adım 'un her bölümünü yapın buildAndReleaseTask .

Görev yapı iskelesi oluştur

Görevin klasör yapısını oluşturun ve gerekli kitaplıkları ve bağımlılıkları yükler.

Dosya üzerinde bir dizin ve package.jsoluşturma

buildAndReleaseTaskKlasörünüzün içinden aşağıdaki komutu çalıştırın:

npm init

npm init dosyayı oluşturur package.json . Varsayılan tüm seçenekleri kabul edebilirsiniz npm init .

İpucu

Görev klasörünüzün düğüm modüllerini içermesini beklediği için, aracı gerekli modülleri otomatik olarak yüklemez. Bunu azaltmak için öğesini öğesine kopyalayın node_modules buildAndReleaseTask . Göreviniz büyüdükçe, bir VSıX dosyasının boyut sınırını (50MB) aşmayı çok daha kolay hale gelir. Düğüm klasörünü kopyalamamadan önce, veya çalıştırmak isteyebilirsiniz ya da npm install --production npm prune --production her şeyi derlemek ve paketleyebilir bir betik yazabilirsiniz.

Azure-işlem hatları ekleme-görev-lib

Görev oluşturmak için kullanılması gereken bir Azure-işlem hattı-Task-lib kitaplığı sağlıyoruz. Kitaplığınıza ekleyin.

npm install azure-pipelines-task-lib --save

Dış bağımlılıklar için türler ekleme

Dış bağımlılıklar için TypeScript yazımlarını 'nin yüklendiğinden emin olun.

npm install @types/node --save-dev
npm install @types/q --save-dev

Bir .gitignore dosya oluşturun ve bu dosyaya node_modules ekleyin. Yapı işleminiz, npm install typings install her seferinde node_modules oluşturulması ve iade alınması gerekmeyen bir ve bir gerektirir.

echo node_modules > .gitignore

TypeScript sürümü seçin

Görevler, 2.3.4 veya 4.0.2 TypeScript sürümlerini kullanabilir. Seçilen TypeScript sürümünü şu komutu kullanarak yükleyebilirsiniz:

npm install typescript@4.0.2 --save-dev

Bu adımı atlarsanız, TypeScript sürüm 2.3.4 varsayılan olarak kullanılır.

Derleyici seçenekleri üzerinde tsconfig.jsoluşturma

Bu dosya, TypeScript dosyalarınızın JavaScript dosyalarına derlendiğinden emin olmanızı sağlar.

tsc --init

Örneğin, ES5 yerine ES6 standardına derlemek istiyoruz. ES6 standardının yapıldığından emin olmak için, yeni oluşturulan ' i açın tsconfig.json ve target alanı "ES6" olarak güncelleştirin.

Not

Komutun başarıyla çalışmasını sağlamak için, TypeScript 'in yerel makinenizde NPM ile küresel olarak yüklendiğinden emin olun.

Görev uygulama

Artık yapı iskelesi tamamlanana kadar özel görevimizi oluşturmuz.

Üzerinde task.js

Ardından, task.json buildAndReleaseTask klasöründe bir dosya oluşturacağız. task.jsonDosya derleme veya yayın görevini açıklar ve derleme/yayınlama sisteminin kullanıcıya yapılandırma seçeneklerini işlemek ve derleme/yayınlama sırasında hangi betiklerin yürütüleceğini bilmesi için kullandığı şeydir.

Aşağıdaki kodu kopyalayın ve {{placeholders}} görevin bilgileriyle değiştirin. En önemli yer tutucu, taskguid ve benzersiz olmalıdır. taskguid Microsoft 'un çevrimiçi Guidgen aracınıkullanarak oluşturabilirsiniz.

{
    "$schema": "https://raw.githubusercontent.com/Microsoft/azure-pipelines-task-lib/master/tasks.schema.json",
    "id": "{{taskguid}}",
    "name": "{{taskname}}",
    "friendlyName": "{{taskfriendlyname}}",
    "description": "{{taskdescription}}",
    "helpMarkDown": "",
    "category": "Utility",
    "author": "{{taskauthor}}",
    "version": {
        "Major": 0,
        "Minor": 1,
        "Patch": 0
    },
    "instanceNameFormat": "Echo $(samplestring)",
    "inputs": [
        {
            "name": "samplestring",
            "type": "string",
            "label": "Sample String",
            "defaultValue": "",
            "required": true,
            "helpMarkDown": "A sample string"
        }
    ],
    "execution": {
        "Node10": {
            "target": "index.js"
        }
    }
}

Bileşenlerdetask.js
Aşağıda, dosyanın bazı bileşenlerinin açıklamaları verilmiştir task.json :

Özellik Açıklama
id Göreviniz için benzersiz bir GUID.
name Boşluk içermeyen ad.
friendlyName Açıklayıcı ad (boşluklara izin verilir).
description Göreviniz için ne işe yönelik ayrıntılı açıklama.
author Derleme veya yayın görevinin geliştirilmesi için varlığı açıklayan kısa dize, örneğin: "Microsoft Corporation."
instanceNameFormat Görev, derleme veya sürüm adımı listesi içinde nasıl görüntülenir. $ (VariableName) kullanarak değişken değerlerini kullanabilirsiniz.
groups Görev özelliklerinin Kullanıcı arabiriminde mantıksal olarak gruplandırılabilen grupları açıklar.
inputs Derleme veya sürüm Göreviniz çalıştırıldığında kullanılacak girişler. Bu görev, sampleString adında bir girdi bekliyor.
execution Bu görev için betikler de dahil olmak üzere yürütme seçenekleri.

Not

Daha ayrıntılı bir şekilde dosya task.jsbakmak veya uzantınızın birden çok sürümünü nasıl paketleyeceğinizi öğrenmek için, derleme/Yayın görev başvurusunu inceleyin.

Dizin. TS

index.tsAşağıdaki kodu başvuru olarak kullanarak bir dosya oluşturun. Bu kod, görev çağrıldığında çalışır.

import tl = require('azure-pipelines-task-lib/task');

async function run() {
    try {
        const inputString: string | undefined = tl.getInput('samplestring', true);
        if (inputString == 'bad') {
            tl.setResult(tl.TaskResult.Failed, 'Bad input was given');
            return;
        }
        console.log('Hello', inputString);
    }
    catch (err) {
        tl.setResult(tl.TaskResult.Failed, err.message);
    }
}

run();

Se

İçinden bir dosya derlemek için buildAndReleaseTask klasöründen "TSC" yazın index.js index.ts .

Görevi çalıştırma

Bir aracı, PowerShell 'den ile görevi çalıştırabilir node index.js .

Aşağıdaki örnekte, girişler sağlanmadığından ( samplestring gerekli bir giriştir) görev başarısız olur.

node index.js
##vso[task.debug]agent.workFolder=undefined
##vso[task.debug]loading inputs and endpoints
##vso[task.debug]loaded 0
##vso[task.debug]task result: Failed
##vso[task.issue type=error;]Input required: samplestring
##vso[task.complete result=Failed;]Input required: samplestring

Bir çözüm olarak, girişi ayarlayabiliyoruz samplestring ve görevi yeniden çalıştırabiliriz.

$env:INPUT_SAMPLESTRING="Human"
node index.js
##vso[task.debug]agent.workFolder=undefined
##vso[task.debug]loading inputs and endpoints
##vso[task.debug]loading INPUT_SAMPLESTRING
##vso[task.debug]loaded 1
##vso[task.debug]Agent.ProxyUrl=undefined
##vso[task.debug]Agent.CAInfo=undefined
##vso[task.debug]Agent.ClientCert=undefined
##vso[task.debug]Agent.SkipCertValidation=undefined
##vso[task.debug]samplestring=Human
Hello Human

Bu kez görev, sağlandığı için başarılı oldu samplestring ve doğru şekilde "Merhaba insan" olarak alındı!

2. Adım: görev betiklerinizi birim testi

Birim testi hedefi, çağıran dış araçların değil, görev betiğini hızlı bir şekilde test olmaktır. Hem başarı hem de hata yollarının tüm yönlerini test etmek istiyoruz.

Test araçları 'nı yükler

Bu kılavuzda, Mocha 'yi test sürücüsü olarak kullanıyoruz.

npm install mocha --save-dev -g
npm install sync-request --save-dev
npm install @types/mocha --save-dev

Test paketi oluştur

testsAşağıdaki içeriğe sahip bir dosya içeren bir klasör oluşturun _suite.ts :

import * as path from 'path';
import * as assert from 'assert';
import * as ttm from 'azure-pipelines-task-lib/mock-test';

describe('Sample task tests', function () {

    before( function() {

    });

    after(() => {

    });

    it('should succeed with simple inputs', function(done: Mocha.Done) {
        // Add success test here
    });

    it('it should fail if tool returns 1', function(done: Mocha.Done) {
        // Add failure test here
    });    
});

İpucu

Test klasörünüzün buildAndReleaseTask klasöründe bulunması gerekir. Bir eşitleme-istek hatası alırsanız, komutuyla geçici olarak buildAndReleaseTask klasörüne eşitleme isteği ekleyerek bu sorunu çözebilirsiniz npm i --save-dev sync-request .

Başarı testi oluşturma

Başarı testi, araç uygun girdilere sahip olduğunda, hata veya uyarı olmadan başarılı olduğunu ve doğru çıktıyı döndürdüğünü doğrular.

Görev sahte Çalıştırıcısını içeren bir dosya oluşturun. Bu dosya oluşturma, görevi çalıştırmaya benzetir ve dış yöntemlerin tüm çağrılarını gizler.

success.tsAşağıdaki içeriklerle test dizininizde bir dosya oluşturun:

import ma = require('azure-pipelines-task-lib/mock-answer');
import tmrm = require('azure-pipelines-task-lib/mock-run');
import path = require('path');

let taskPath = path.join(__dirname, '..', 'index.js');
let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);

tmr.setInput('samplestring', 'human');

tmr.run();

Sonra, _suite.ts görev sahte Çalıştırıcısı 'nı çalıştırmak için dosyanıza aşağıdaki örnek başarı testini ekleyin:

it('should succeed with simple inputs', function(done: Mocha.Done) {
    this.timeout(1000);

    let tp = path.join(__dirname, 'success.js');
    let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);

    tr.run();
    console.log(tr.succeeded);
    assert.equal(tr.succeeded, true, 'should have succeeded');
    assert.equal(tr.warningIssues.length, 0, "should have no warnings");
    assert.equal(tr.errorIssues.length, 0, "should have no errors");
    console.log(tr.stdout);
    assert.equal(tr.stdout.indexOf('Hello human') >= 0, true, "should display Hello human");
    done();
});

Hata testi oluştur

Hata testi, araç hatalı veya tamamlanmamış bir girişi aldığında, faydalı çıkışın beklenen şekilde başarısız olduğunu doğrular.

İlk olarak, görev sahte Çalıştırıcısı 'nı oluşturacağız. Bunu yapmak için, failure.ts aşağıdaki içeriklerle test dizininizde bir dosya oluşturun:

import ma = require('azure-pipelines-task-lib/mock-answer');
import tmrm = require('azure-pipelines-task-lib/mock-run');
import path = require('path');

let taskPath = path.join(__dirname, '..', 'index.js');
let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);

tmr.setInput('samplestring', 'bad');

tmr.run();

Sonra, _suite.ts görev sahte Çalıştırıcısı 'nı çalıştırmak için dosyanıza aşağıdakini ekleyin:

it('it should fail if tool returns 1', function(done: Mocha.Done) {
    this.timeout(1000);

    let tp = path.join(__dirname, 'failure.js');
    let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);

    tr.run();
    console.log(tr.succeeded);
    assert.equal(tr.succeeded, false, 'should have failed');
    assert.equal(tr.warningIssues.length, 0, "should have no warnings");
    assert.equal(tr.errorIssues.length, 1, "should have 1 error issue");
    assert.equal(tr.errorIssues[0], 'Bad input was given', 'error issue output');
    assert.equal(tr.stdout.indexOf('Hello bad'), -1, "Should not display Hello bad");

    done();
});

Testleri çalıştırma

Testleri çalıştırmak için aşağıdaki komutları çalıştırın:

tsc
mocha tests/_suite.js

Her iki testin geçmesi gerekir. Testleri daha ayrıntılı çıktıyla (derleme konsolunda gördükleriniz) çalıştırmak istiyorsanız, ortam değişkenini ayarlayın: TASK_TEST_TRACE=1 .

$env:TASK_TEST_TRACE=1

3. Adım: Uzantı bildirim dosyası oluşturma

Uzantı bildirimi, uzantınızın tüm bilgilerini içerir. Görev klasörleriniz ve resimler klasörleriniz dahil olmak üzere dosyalarınıza bağlantılar içerir. extension-icon.png bir Resimler klasörü oluşturduğunuzdan emin olun. Aşağıdaki örnek, derleme veya yayın görevini içeren bir uzantı bildirimidir.

Aşağıdaki. JSON kodunu kopyalayın ve vss-extension.json dizininize dosyanız olarak kaydedin home . Bu dosyayı buildAndReleaseTask klasöründe oluşturmayın.

{
    "manifestVersion": 1,
    "id": "build-release-task",
    "name": "Fabrikam Build and Release Tools",
    "version": "0.0.1",
    "publisher": "fabrikam",
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "description": "Fabrikam ile derleme/serbest bırakma araçları. Bir derleme/yayın görevi içerir.",
    "categories": [
        "Azure Pipelines"
    ],
    "icons": {
        "default": "images/extension-icon.png"
    },
    "files": [
        {
            "path": "buildAndReleaseTask"
        }
    ],
    "contributions": [
        {
            "id": "custom-build-release-task",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "buildAndReleaseTask"
            }
        }
    ]
}

Not

Yayımcının yayımcı adı olarak değiştirilmesi gerekir. Şimdi bir yayımcı oluşturmak istiyorsanız, yönergeler için yayımcıyı oluşturma bölümüne gidin.

Katkılar

Özellik Açıklama
id Katkı tanımlayıcısı. Uzantı içinde benzersiz olmalıdır. Derleme veya yayın görevinin adıyla eşleşmesi gerekmez. Genellikle derleme veya yayın görev adı, katkı KIMLIĞIDIR.
type Katkı türü. MS. VSS-dağıtılmış-Task. Task olmalıdır.
targets Bu katkıdan "hedeflenmiş" katkıları. MS. VSS-dağıtılmış-Task. Tasks olmalıdır.
properties.name Görevin adı. Bu ad, karşılık gelen kendi kendine içerilen derleme veya yayın görevi ardışık düzeninin klasör adıyla eşleşmelidir.

Dosyalar

Özellik Açıklama
path Dizine göre dosya veya klasörün yolu home .

Not

Uzantı bildirim dosyası hakkında, özellikleri ve ne yaptıkları hakkında daha fazla bilgi için, Uzantı bildirim başvurusunuinceleyin.

4. Adım: uzantınızı paketleyin

Uzantınızı yazdıktan sonra, Visual Studio Market bir sonraki adım, tüm dosyalarınızı birlikte paketlemenize olanak sağlar. Tüm uzantılar VSıX 2,0 ile uyumlu. vsix dosyaları olarak paketlenmiştir. Microsoft, uzantınızı paketlemek için platformlar arası bir komut satırı arabirimi (CLı) sağlar.

Uzantınızı bir. vsix dosyasına paketleyerek TFX-CLI' y i n, uzantınızın ana dizinine gidin ve aşağıdaki komutu çalıştırın:

tfx extension create --manifest-globs vss-extension.json

Not

Bir uzantının veya tümleştirmenin sürümünün her güncelleştirmede artırılması gerekir.
Mevcut bir uzantıyı güncelleştirirken, bildirimde sürümü güncelleştirin veya --rev-version komut satırı anahtarını geçirin. Bu, uzantınızın Düzeltme Eki sürüm numarasını artırır ve yeni sürümü bildiriminiz için kaydeder. Bir güncelleştirmenin gerçekleşmesi için hem görev sürümünü hem de uzantı sürümünü Rev yapmanız gerekir. tfx extension create --manifest-globs vss-extension.json --rev-version Yalnızca uzantı sürümünü güncelleştirir, görev sürümünü değil. Daha fazla bilgi için bkz. GitHub 'Da derleme görevi.

Paketlenmiş uzantınızı bir. vsix dosyasında aldıktan sonra, uzantınızı Market 'e yayımlamaya hazırsınız demektir.

5. Adım: uzantınızı yayımlama

Yayımcısını oluşturma

Microsoft 'un uzantıları da dahil olmak üzere tüm uzantılar, bir yayımcı tarafından sağlanmakta olduğu şekilde tanımlanır. Zaten var olan bir yayımcının üyesi değilseniz, bir tane oluşturacaksınız.

  1. Visual Studio Market Yayımlama portalındaoturum açın.
  2. Zaten mevcut bir yayımcının üyesi değilseniz, bir yayımcı oluşturmanız istenir. Bir yayımcı oluşturmanız istenmez, sayfanın en altına gidin ve uzantıları Ilgili siteler altında Yayımla ' yı seçin.
    • Yayımcı için bir tanımlayıcı belirtin, örneğin: mycompany-myteam .
      • Bu tanımlayıcı, publisher uzantılarınızın bildirim dosyanızdaki özniteliği için değer olarak kullanılır.
    • Yayımcı için bir görünen ad belirtin, örneğin: My Team .
  3. Market Yayımcı Sözleşmesi ' ni gözden geçirin ve Oluştur' u seçin.

Yayımcı tanımlı. Gelecekteki bir sürümde, yayımcının uzantılarını görüntüleme ve yönetme izinleri verebilirsiniz. Kullanıcılar arasında bir kimlik bilgileri kümesi paylaşma gereksinimi olmadan, uzantıları ortak bir yayımcı altında yayımlamak daha kolay ve daha güvenlidir.

Uzantınızı karşıya yükleyin

Bir yayımcı oluşturduktan sonra, uzantınızı Market 'e yükleyebilirsiniz.

  • Yeni uzantıyı karşıya yükle düğmesini bulun, paketlenmiş. vsix dosyanıza gidin ve karşıya yükle' yi seçin.

Ayrıca, uzantınızı tfx extension publish tfx extension create tek bir adımda paketlemek ve yayımlamak için yerine komutunu kullanarak uzantınızı komut satırı aracılığıyla da yükleyebilirsiniz. İsterseniz, --share-with uzantınızı yayımlamadan sonra bir veya daha fazla hesapla paylaşmak için kullanabilirsiniz. Bir kişisel erişim belirtecine de ihtiyacınız olacak. Daha fazla bilgi için bkz. kişisel erişim belirteci alma.

tfx extension publish --manifest-globs your-manifest.json --share-with yourOrganization

Uzantınızı paylaşma

Uzantınızı karşıya yüklediğinize göre, bu, Market 'te yer aldığı ancak kimse onu göremez. Uygulamanızı yükleyip test edebilmeniz için kuruluşunuzla paylaşabilirsiniz.

  • Uzantınıza sağ tıklayın ve paylaşma' yı seçin ve kuruluşunuzun bilgilerini girin. Uzantınıza erişimi olmasını istediğiniz diğer hesaplarla paylaşabilirsiniz.

Önemli

Uzantıların genel olarak paylaşılması için yayımcılar doğrulanmalıdır. Daha fazla bilgi için bkz. Package/Publish/Install.

Uzantınızın Market 'te olduğuna ve paylaşıldığına göre, onu kullanmak isteyen herkesin yüklemesi gerekir.

6. Adım: uzantıyı Market 'e yayımlamak için derleme ve yayın işlem hattı oluşturma

Market 'teki özel görevi sürdürmek için Azure DevOps üzerinde bir derleme ve yayın işlem hattı oluşturun.

Önkoşullar

İşlem hattı tarafından kullanılan değişkenleri barındıracak bir işlem hattı kitaplığı değişken grubu oluşturun. Değişken grubu oluşturma hakkında daha fazla bilgi için bkz. değişken grupları ekleme ve kullanma. Azure DevOps kitaplığı sekmesinden veya CLı aracılığıyla değişken grupları yapabileceğinizi aklınızda bulundurun. Bir değişken grubu yapıldıktan sonra, işlem hattınızda o grup içindeki tüm değişkenleri kullanın. Değişken grubu kullanmahakkında daha fazla bilgi edinin.

Değişken grubunda aşağıdaki değişkenleri bildirin:

  • publisherId: Market yayımcısının KIMLIĞI.
  • extensionId: Dosyanızda vss-extension.jsolarak bildirildiği şekilde uzantınızın KIMLIĞI.
  • extensionName: Dosyanızda vss-extension.jsolarak bildirildiği şekilde uzantınızın adı.
  • artifactName: VSıX dosyası için oluşturulmakta olan yapıtın adı.

Yeni bir Visual Studio Market hizmet bağlantısı oluşturun ve tüm işlem hatları için erişim izinleri verin. Hizmet bağlantısı oluşturma hakkında daha fazla bilgi için bkz. hizmet bağlantıları.

Yeni hizmet bağlantı bölmesini gösteren ekran görüntüsü.

Yeni Visual Studio Market hizmet bağlantı bölmesini gösteren ekran görüntüsü.

YAML ile yeni bir işlem hattı oluşturmak için aşağıdaki örneği kullanın. İlk işlem hattınızı ve YAML şemasınıoluşturma hakkında daha fazla bilgi edinin.

trigger: 
- master

pool:
  vmImage: "ubuntu-latest"

variables:
  - group: variable-group # Rename to whatever you named your variable group in the prerequisite stage of step 6

stages:
  - stage: Run_and_publish_unit_tests
    jobs:
      - job:
        steps:
          - task: TfxInstaller@3
            inputs:
              version: "v0.7.x"
          - task: Npm@1
            inputs:
              command: 'install'
              workingDir: '/TaskDirectory' # Update to the name of the directory of your task
          - task: Bash@3
            displayName: Compile Javascript
            inputs:
              targetType: "inline"
              script: |
                cd TaskDirectory # Update to the name of the directory of your task
                tsc
          - task: Npm@1
            inputs:
              command: 'custom'
              workingDir: '/TestsDirectory' # Update to the name of the directory of your task's tests
              customCommand: 'testScript' # See the definition in the explanation section below - it may be called test
          - task: PublishTestResults@2
            inputs:
              testResultsFormat: 'JUnit'
              testResultsFiles: '**/ResultsFile.xml'
  - stage: Package_extension_and_publish_build_artifacts
    jobs:
      - job:
        steps:
          - task: TfxInstaller@3
            inputs:
              version: "v0.7.x"
          - task: Npm@1
            inputs:
              command: 'install'
              workingDir: '/TaskDirectory' # Update to the name of the directory of your task
          - task: Bash@3
            displayName: Compile Javascript
            inputs:
              targetType: "inline"
              script: |
                cd TaskDirectory # Update to the name of the directory of your task
                tsc
          - task: QueryAzureDevOpsExtensionVersion@3
            inputs:
              connectTo: 'VsTeam'
              connectedServiceName: 'ServiceConnection' # Change to whatever you named the service connection
              publisherId: '$(PublisherID)'
              extensionId: '$(ExtensionID)'
              versionAction: 'Patch'
              outputVariable: 'Task.Extension.Version'
          - task: PackageAzureDevOpsExtension@3
            inputs:
              rootFolder: '$(System.DefaultWorkingDirectory)'
              publisherId: '$(PublisherID)'
              extensionId: '$(ExtensionID)'
              extensionName: '$(ExtensionName)'
              extensionVersion: '$(Task.Extension.Version)'
              updateTasksVersion: true
              updateTasksVersionType: 'patch'
              extensionVisibility: 'private' # Change to public if you're publishing to the marketplace
              extensionPricing: 'free'
          - task: CopyFiles@2
            displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)"
            inputs:
              Contents: "**/*.vsix"
              TargetFolder: "$(Build.ArtifactStagingDirectory)"
          - task: PublishBuildArtifacts@1
            inputs:
              PathtoPublish: '$(Build.ArtifactStagingDirectory)'
              ArtifactName: '$(ArtifactName)'
              publishLocation: 'Container'
  - stage: Download_build_artifacts_and_publish_the_extension
    jobs:
      - job:
        steps:
          - task: TfxInstaller@3
            inputs:
              version: "v0.7.x"
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: "current"
              downloadType: "single"
              artifactName: "$(ArtifactName)"
              downloadPath: "$(System.DefaultWorkingDirectory)"
          - task: PublishAzureDevOpsExtension@3
            inputs:
              connectTo: 'VsTeam'
              connectedServiceName: 'ServiceConnection' # Change to whatever you named the service connection
              fileType: 'vsix'
              vsixFile: '/Publisher.*.vsix'
              publisherId: '$(PublisherID)'
              extensionId: '$(ExtensionID)'
              extensionName: '$(ExtensionName)'
              updateTasksVersion: false
              extensionVisibility: 'private' # Change to public if you're publishing to the marketplace
              extensionPricing: 'free'

CI ve PR Tetikleyicileri gibi tetikleyicilerle ilgili daha fazla yardım için bkz. işlem hatlarını tetikleyen olayları belirtme.

Not

Her iş yeni bir Kullanıcı Aracısı kullanır ve bağımlılıkların yüklenmesini gerektirir.

Ardışık düzen aşamaları

Bu bölüm, işlem hattı aşamalarını nasıl çalıştığını anlamanıza yardımcı olur.

Aşama: birim testlerini çalıştırma ve yayımlama

Bu aşama, birim testlerini çalıştırır ve test sonuçlarını Azure DevOps 'a yayımlar.

Birim testlerini çalıştırmak için, dosyadaki package.jsözel bir komut dosyası ekleyin. Örnek:

"scripts": {
    "testScript": "mocha ./TestFile --reporter xunit --reporter-option output=ResultsFile.xml"
},
  1. Derleme aracısında TFX-CLI 'yi yüklemek için "Azure DevOps için Node CLı (TFX-CLI)" ekleyin.

  2. "Install" komutuyla "NPM" görevini ekleyin ve klasörü package.jsdosya ile hedefleyin.

  3. TypeScript 'ı JavaScript 'e derlemek için "Bash" görevini ekleyin.

  4. "Özel" komutuyla "NPM" görevini ekleyin, birim testlerini içeren klasörü hedefleyin ve testScript komut olarak giriş yapın. Aşağıdaki girdileri kullanın:

    • Komut: özel
    • package.jsiçeren çalışma klasörü:/TestsDirectory
    • Komut ve bağımsız değişkenler: testScript
  5. "Test Sonuçları Yayımla" görevini ekleyin. Mocha XUnit Reporter kullanıyorsanız, sonuç biçiminin "JUnit" olduğundan ve "XUnit" olmadığından emin olun. Arama klasörünü kök dizine ayarlayın. Aşağıdaki girdileri kullanın:

    • Test sonucu biçimi: JUnit
    • Test sonuçları dosyaları: * */ResultsFile.xml
    • Arama klasörü: $ (System. DefaultWorkingDirectory)

Test sonuçları yayımlandıktan sonra, Testler sekmesinin altındaki çıktı şöyle görünmelidir:

Test sonucu örneği ekran görüntüsü.

Aşama: uzantıyı paketleyin ve derleme yapıtları yayımlayın

  1. Derleme aracısında TFX-CLI 'yi yüklemek için "Azure DevOps için Node CLı (TFX-CLI)" ekleyin.

  2. "Install" komutuyla "NPM" görevini ekleyin ve klasörü package.jsdosya ile hedefleyin.

  3. TypeScript 'ı JavaScript 'e derlemek için "Bash" görevini ekleyin.

  4. Mevcut uzantı sürümünü sorgulamak için "sorgu uzantısı sürümü" görevini ekleyin. Aşağıdaki girdileri kullanın:

    • Bağlan: Visual Studio Market
    • Visual Studio Market (hizmet bağlantısı): hizmet bağlantısı
    • Yayımcı KIMLIĞI: Visual Studio Market yayımcısının KIMLIĞI
    • Uzantı KIMLIĞI: dosyadaki vss-extension.jsuzantınızın KIMLIĞI
    • Sürümü artır: Düzeltme Eki
    • Çıkış değişkeni: Task. Extension. Version
  5. Uzantıları JSON bildirimine göre paketlemek için "paket uzantısı" görevini ekleyin. Aşağıdaki girdileri kullanın:

    • Kök bildirimler klasörü: bildirim dosyasını içeren kök dizine Işaret eder. Örneğin, $ (System. DefualtWorkingDirectory) kök dizindir.
    • Bildirim dosyası (ler): üzerinde vss-extension.js.
    • Yayımcı KIMLIĞI: Visual Studio Market yayımcısının KIMLIĞI.
    • Uzantı KIMLIĞI: dosyanızdaki vss-extension.jsuzantınızın KIMLIĞI.
    • Uzantı adı: dosyanızdaki vss-extension.jsuzantınızın adı.
    • Uzantı sürümü: $ (Task. Extension. Version).
    • Geçersiz kılma görevleri sürümü: checked (true).
    • Geçersiz kılma türü: yalnızca Patch (1.0. r) öğesini değiştirin.
    • Uzantı görünürlüğü: uzantı hala geliştirilmeye devam ediyorsa, değeri özel olarak ayarlayın. Uzantıyı herkese serbest bırakmak için değeri public olarak ayarlayın.
  6. Yayımlanan dosyaları kopyalamak için "dosyaları kopyala" görevini ekleyin. Aşağıdaki girdileri kullanın:

    • İçerik: bir yapıt olarak yayımlamak için kopyalanması gereken tüm dosyalar
    • Hedef klasör: dosyaların kopyalandığı klasör
      • Örneğin: $ (Build. ArtifactStagingDirectory)
  7. Yapıtları diğer işlerde veya işlem hatlarında kullanılmak üzere yayımlamak için "derleme yapılarını Yayımla" ekleyin. Aşağıdaki girdileri kullanın:

    • Yayımlanacak yol: yayımlanmakta olan dosyaları içeren klasörün yolu.
      • Örneğin: $ (Build. ArtifactStagingDirectory).
    • Yapıt adı: yapıt için verilen ad.
    • Yapıt yayımlama konumu: yapıtı sonraki işlerde kullanmak için "Azure Pipelines" seçeneğini belirleyin.

Aşama: derleme yapıtları Indirin ve uzantıyı yayımlayın

  1. Derleme aracısında TFX-CLI 'yi yüklemek için "Azure DevOps için Node CLı (TFX-CLI)" ekleyin.

  2. Yapıtları yeni bir iş üzerine indirmek için "derleme yapılarını Indir" görevini ekleyin. Aşağıdaki girdileri kullanın:

    • Tarafından üretilen yapıtları indir: yapıtı aynı işlem hattından yeni bir iş üzerine indiriyorsanız, "geçerli derleme" yi seçin. Yeni bir işlem hattına indiriyorsanız, "belirli derleme" i seçin.
    • İndirme türü: yayımlanan tüm dosyaları indirmek için "belirli Yapıt" seçeneğini belirleyin.
    • Yapıt adı: Yayınlanan yapıt adı.
    • Hedef dizin: dosyaların indirileceği klasör.
  3. İhtiyacınız olan son görev "uzantı Yayımla" görevidir. Aşağıdaki girdileri kullanın:

    • Bağlan: Visual Studio Market
    • Visual Studio Market bağlantısı: ServiceConnection
    • Giriş dosyası türü: VSıX dosyası
    • VSıX dosyası:/Publisher. *. vsix
    • Yayımcı KIMLIĞI: Visual Studio Market yayımcısının KIMLIĞI
    • Uzantı KIMLIĞI: dosyadaki vss-extension.jsuzantınızın KIMLIĞI
    • Uzantı adı: dosyadaki vss-extension.jsuzantınızın adı
    • Uzantı görünürlüğü: özel veya genel

İsteğe bağlı: uzantınızı yükleyip test edin

Yalnızca birkaç adımda sizinle paylaşılan bir uzantı yükleyebilirsiniz:

  1. Kuruluş denetim masasından ( https://dev.azure.com/{organization}/_admin ), proje koleksiyonu yönetim sayfasına gidin.
  2. Uzantılar sekmesinde, uzantınızı "benimle paylaşılan Uzantılar" grubunda bulun ve uzantı bağlantısını seçin.
  3. Uzantıyı yükler.

Uzantılar sekmesini göremiyorsanız, https://dev.azure.com/{organization}/_admin bir projenin yönetim sayfasına değil, Denetim Masası 'nda (proje koleksiyonu düzeyinde yönetim sayfası) olduğunuzdan emin olun.

Uzantılar sekmesini görmüyorsanız, uzantılar kuruluşunuz için etkin değildir. Visual Studio Iş ortağı programı 'na katılarak uzantılar özelliğine erken erişim sağlayabilirsiniz.

Azure DevOps uzantılarını paketleyip Visual Studio Market yayımlamak için derleme ve sürüm görevlerinin Azure DevOps uzantı görevleriniindirebilirsiniz.