第一步
1、创建TestTask文件夹,在TestTask文件夹创建一个文件夹Task,使用npm init进行初始化,创建package.json文件,可以全部选择默认。
2、在文件夹Task中运行以下命令,添加azure-pipelines-task-lib 库。
npm install azure-pipelines-task-lib --save
3、在文件夹Task中运行以下命令安装TypeScript类型。
npm install @types/node --save-dev
npm install @types/q --save-dev
4、在文件夹Task中运行以下命令,创建一个 .gitignore文件,并将node_modules文件忽略掉。echo node_modules > .gitignore
5、在文件夹Task中运行以下命令安装typescript。npm install typescript@4.0.2 --save-dev
6、在文件夹Task中运行以下命令,创建tsconfig.json编译器选项 ,tsc --init(此命令若无法执行,可使用npx tsc --init)。
例如,我们要编译为ES6标准而不是ES5,可以将新生成的 tsconfig.json并更新 target字段为“ es6”。
7、在文件夹Task中创建task.json文件。 task.json文件描述了构建或发布任务,是构建/发布系统用来向用户呈现配置选项并了解在构建/发布时要执行哪些脚本的工具。 复制以下代码并替换 {{placeholders}}与您的任务的信息。 最重要的占位符是 taskguid,并且必须是唯一的。 您可以生成 taskguid通过使用 Microsoft的在线GuidGen工具 生成。
{
"$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"
}
}
}
8、在文件夹Task中创建index.ts文件,该文件是项目启动时主要运行的逻辑部分。遵循如下结构:
import tl = require('azure-pipelines-task-lib/task');
async function run() {
try {
......
}
}
catch (err) {
tl.setResult(tl.TaskResult.Failed, err.message);
}
}
run();
9、在TestTask文件夹中创建拓展任务清单配置文件vss-extension.json。
{
"manifestVersion": 1,
"id": "build-release-task",
"name": "Fabrikam Build and Release Tools",
"version": "0.0.1",
"publisher": "fabrikam",
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"description": "Tools for building/releasing with Fabrikam. Includes one build/release task.",
"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"
}
}
]
}
第二步
1、在Task文件夹中运行npx tsc将index.ts编译为index.js文件。
2、在TestTask文件夹中运行以下命令进行打包。tfx extension create --manifest-globs vss-extension.json
之后将打包后的vsix文件上传到TFS的拓展中即可。
整体文件结构示例参考:
以上是开发一个拓展的过程。