为TFS开发task拓展

179 阅读2分钟

先挂官方文档链接

第一步

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"
        }
    }
}

image.png

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的拓展中即可。

整体文件结构示例参考:

image.png

以上是开发一个拓展的过程。