自己开发一个 vsts agent 的 task
vsts 中支持自定义Build/Release的过程Task
目标:做一个可以读取 Xamarin.Android 所生成的 APK 的 基本信息的 task ,包括 package(包名) / application label(应用标题 )/version name(版本号)/version code(版本代码)
下面简述流程

1.下载并安装 Visual Studio Code(http://code.visualstudio.com ),当然使用 Visual Studio 或者其它任何开发工具也可以
2.下载并安装最新版本 nodejs(https://nodejs.org),如果是直接安装的 vs 这些应该直接都有了
3.建立自己的项目文件夹,如 d:\code\home
4.通过 npm 安装编译工具 tfx-cli
npm i -g tfx-cli
5.在自己的项目文件夹中建立一个 vss-extension.json 文件,这个文件中说明了当前扩展包的信息,以及扩展包中包含哪些任务
{
    "manifestVersion": ,
    "id": "zou-tasks",
    "name": "Zou Tasks",
    "version": "1.0.4",
    "publisher": "zoujian",
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "description": "Tools for building & publish",
    "categories": [
        "Build and release"
    ],
    "icons": {
        "default": "extension-icon.png"
    },
    "files": [
        {
            "path": "extract-xamarin-android-manifest"
        }
    ],
    "contributions": [
        {
            "id": "extract-xamarin-android-manifest",
            "type": "ms.vss-distributed-task.task",
            "targets": [
                "ms.vss-distributed-task.tasks"
            ],
            "properties": {
                "name": "extract-xamarin-android-manifest"
            }
        }
    ]
}
6.以上面扩展信息中所示,扩展包中包含了一个叫 extract-xamarin-android-manifest(我的任务) 的插件,文件夹结构是这样的
extension-icon.png (vsix的图标)
vss-extension.json
extract-xamarin-android-manifest
  - extract.ps1 (任务的对应脚本,是在task.json中配置的此名称)
  - icon.png (任务的图标)
  - task.json (任务的配置文件)
其中 task.json 是最主要的文件,我当前的这个扩展是读取 Xamarin.Android 的项目,并且读取出生成 apk 的基础信息,包含 application 的 label,packagename,version name,version code
{
  "id": "f1821fab-78d1-4c22-a0e4-f98f40fd7079",//任务的唯一id
  "name": "extract-xamarin-android-manifest",//任务名称
  "friendlyName": "extract xamarin android info",//友好任务名
  "description": "extract xamarin android info",
  "author": "zoujian",
  "helpMarkDown": "[More Information](https://github.com/chsword/zou-vsts-tasks)",//帮助(就是显示时后面的吧号)
  "category": "Utility",//类别,工具
  "visibility": [
    "Build",
    "Release"
  ],
  "demands": [
    "DotNetFramework"
  ],
  "version": {//版本
    "Major": "1",
    "Minor": "0",
    "Patch": "4"
  },
  "minimumAgentVersion": "1.83.0",//支持vso agent的版本
  "instanceNameFormat": "ExtractXamarinAndroidManifest",//实例名
  "groups": [//如果输入参数要分组的话,建一个
    {
      "name": "output",
      "displayName": "Output",
      "isExpanded": true
    }
  ],
  "inputs": [//各种输入参数
    {
      "name": "pathXamarinAndroidProject",
      "type": "filePath",
      "label": "Xamarin Android project Path",
      "defaultValue": "",
      "required": true,
      "helpMarkDown": "Path which Xamarin Android project exisis."
    },
    {
      "name": "configuration",
      "type": "string",
      "label": "Configuration",
      "defaultValue": "$(BuildConfiguration)",
      "required": true
    },
    {
      "name": "outputVariable",
      "type": "string",
      "label": "outputVariable",
      "required": true,
      "defaultValue": "android",
      "groupName": "output",
      "helpMarkDown": "Provide a name for the variable for the android info. eg. set the outputVariable 'android', after task running, will return 'android.PackageName','android.ApplicationLabel','android.VersionName','android.VersionCode'."
    }
  ],
  "execution": {//实际执行的过程,我这里是执行了一个powershell脚本,有兴趣的同学可以看下,就是读取了apk的AndroidManifest的xml结构
    "PowerShell": {
      "target": "$(currentDirectory)\\extract.ps1",
      "argumentFormat": "",
      "workingDirectory": "$(currentDirectory)"
    }
  }
}
7.要编译为VSIX的话,执行 tfx extension create --manifest-globs vss-extension.json
8.tfs或vso中导入vsix,过程不说述
9.可以直接在tfs中使用了
实际使用时,如此配置参数:

源代码:https://github.com/chsword/zou-vsts-tasks
引用 :
官方task:https://github.com/Microsoft/vsts-tasks
官方文档:https://www.visualstudio.com/zh-cn/docs/build/define/variables
自己开发一个 vsts agent 的 task的更多相关文章
- (原创)发布一个c++11开发的轻量级的并行Task库TaskCpp
		TaskCpp简介 TaskCpp是c++11开发的一个跨平台的并行task库,它的设计思路来源于微软的并行计算库ppl和intel的并行计算库tbb,关于ppl和tbb我在前面有介绍.既然已经有了这 ... 
- 使用Swift开发一个MacOS的菜单状态栏App
		猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/52054107 ... 
- 拥抱.NET Core,如何开发一个跨平台类库 (1)
		在此前的文章中详细介绍了使用.NET Core的基本知识,如果还没有看,可以先去了解“拥抱.NET Core,学习.NET Core的基础知识补遗”,以便接下来的阅读. 在本文将介绍如何配置类库项目支 ... 
- 【如何快速的开发一个完整的iOS直播app】(播放篇)
		原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,集成ijkpl ... 
- 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务
		[源码下载] 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后 ... 
- Office365开发系列——开发一个全功能的Word Add-In
		2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ... 
- 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)
		汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai Python3 与 C# 基础语法对比:https://www.cnblogs.com/ ... 
- 基于c++11新标准开发一个支持多线程高并发的网络库
		背景 新的c++11标准出后,c++语法得到了非常多的扩展,比起以往不论什么时候都要灵活和高效,提高了程序编码的效率,为软件开发者节省了不少的时间. 之前我也写过基于ACE的网络server框架,但A ... 
- Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序
		Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序 引子 上期给大家介绍了如何使用如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓 ... 
随机推荐
- Web.config配置数据库连接
			web.config配置数据库连接 第一种:取连接字符串 string connString = System.Web.Configuration.WebConfigurationManager. ... 
- java Byte[] to String(hex)
			1. 字节数组转换成16进制字符展示 2.代码 package com.goodfan; public class ByteArrayToString { private static char[] ... 
- Android实现播放器功能
			package com.example.yzj.android_7_27; import android.content.ContentResolver;import android.content. ... 
- ABP使用及框架解析系列 - [Unit of Work part.2-框架实现]
			前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开 ... 
- 美女jquery图片播放器插件
			相册在线查看http://keleyi.com/keleyi/phtml/image/6.htm 可全屏,可拖动,可自动播放的jquery图片展示插件 使用说明:1.引用css文件:<link ... 
- canvas实现抽奖大转盘
			这里不给用JS,下面地址有效果以及详细代码 效果地址:http://sandbox.runjs.cn/show/d2et4rys 
- [JS]笔记15之客户端存储cookie
			-->本地存储发展情况 -->什么是cookie -->cookie优缺点 -->cookie的设置.读取.删除 -->cookie应用 本地存储发展情况 一.什么是co ... 
- SharePoint 2013 定制搜索显示模板
			前言 之前我们已经介绍了一些关于搜索的相关配置,当然,用户关于搜索的要求可能是各种各样.有时候,用户会说,你们的显示结果太Low了,确实是:不过,在SharePoint中,我们可以很容易的定制搜索结果 ... 
- SPF邮件伪造漏洞测试脚本
			测试脚本: # -*- coding: utf-8 -*- import socket,select,base64,os,re,time,datetime class mail: def __init ... 
- iOS之2016面试题一
			序言 招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深.本篇文章为群里的小伙伴们去宝库公司的笔试题,由笔者整理并提供笔者个人参考答 ... 
