TFSの改善方法

以前、企業ブログを持っていなかったとき、Microsoft TFS(構内のVisual Studio Team Servives)を使用してソフトウェア開発ライフサイクルを管理し、テストを自動化する方法について書きました。 特に、私たちは毎日実行する1つのパッケージにさまざまなシステムでの自動テストの大規模なセットをまとめました。 これについては、DevOpsDaysMoscowカンファレンス( プレゼンテーションビデオプレゼンテーション )で詳しく説明しました。 実装中に、いくつかの問題が発生しました。









このブロックは、タスクの一意のID、名前、カテゴリ、バージョンを記述します。 タスクを作成するとき、これらのフィールドをすべて指定する必要があります。 instanceNameFormatフィールドは、デフォルトのVSTSアセンブリでタスクの名前がどのように見えるかを決定します。 パラメーターブロックのパラメーターを$(パラメーター名)の形式で含めることができます







パラメータブロック



パラメーターブロックは、タスクの入力パラメーター、その名前、説明、およびタイプを示します。 タスク設定ページで表示しやすいように、パラメーターをグループ化できます。 次のブロックはAutoDefectsタスクパラメーターです。







 { "groups": [ { "name": "authentication", "displayName": "Authentication", "isExpanded": false } ], "inputs": [ { "name": "Assignees", "type": "filePath", "label": "Assignees list file", "defaultValue": "assignees.json", "required": false, "helpMarkDown": "Bug assignees list in json format. Format: {\"testrunname\":\"username\"}" }, { "name": "authtype", "type": "pickList", "label": "Authentication type", "defaultValue": "oauth", "required": false, "helpMarkDown": "Authentication type to access the tfs rest api", "options": { "oauth": "OAuth", "NTLM": "NTLM", "Basic": "Basic" }, "groupName" : "authentication" }, { "name": "Username", "type": "string", "label": "Username", "defaultValue": "", "required": false, "helpMarkDown": "Username to access tfs rest api (NTLM and Basic types)", "groupName" : "authentication", "visibilityRule" : "authtype != OAuth" }, { "name": "Password", "type": "string", "label": "Password", "defaultValue": "", "required": false, "helpMarkDown": "Password to access tfs rest api (NTLM and Basic types)", "groupName" : "authentication", "visibilityRule" : "authtype != OAuth" } ] }
      
      





認証スキームを決定するパラメーターは、デフォルトでは折りたたまれている別のグループに配置されます。







最も一般的に使用されるパラメーターのタイプは次のとおりです。









実行単位



タスクのメインの実行可能ファイルへのリンクが含まれています







 { "execution": { "Node": { "target": "testtask.ts" } } }
      
      





ローカリゼーションユニット



 { "messages": { "taskSucceeded": "All done", "taskFailed": "Task Failed" } }
      
      





ビルドログファイルにタスクを記録するためのローカライズされた行のセットが含まれています。 上記のブロックよりも使用頻度が低い。 現在のローカル設定のメッセージは、task.loc( "messagename")を呼び出すことで受信できます。







メイン実行ファイル



メインの実行可能ファイルは、タスクの開始時にVSTSを実行するスクリプトです。 少なくとも、タスクの機能とエラー処理に必要なモジュールをインポートするためのコードが含まれている必要があります。 例:







 import tl = require('vsts-task-lib/task'); import trm = require('vsts-task-lib/toolrunner'); import path = require('path'); import fs = require('fs'); import Q = require("q"); import * as vm from 'vso-node-api'; import * as bi from 'vso-node-api/interfaces/BuildInterfaces'; import * as ci from 'vso-node-api/interfaces/CoreInterfaces'; import * as ti from 'vso-node-api/interfaces/TestInterfaces'; import * as wi from 'vso-node-api/interfaces/WorkItemTrackingInterfaces'; async function run() { tl.setResourcePath(path.join(__dirname, 'task.json')); let projId = tl.getVariable("System.TeamProjectId"); try { } catch(err) { console.log(err); console.log(err.stack); throw err; } } run() .then(r => tl.setResult(tl.TaskResult.Succeeded,tl.loc("taskSucceeded"))) .catch(r => tl.setResult(tl.TaskResult.Failed,tl.loc("taskFailed")))
      
      





ご覧のとおり、タスクはタスクごとにほとんど変化しない標準コンポーネントのセットです。 したがって、3番目のタスクを作成したときに、タスクの作成を自動化するというアイデアが浮上しました。 そのため、VSTSの拡張機能の開発を大幅に促進するブートストラップがありました。







どれくらい速い?



VSTSのタスクを作成するとき、タスク自体のコードを書く以外に何をする必要がありますか? 通常、手順は同じです。







  1. タスクスケルトンを作成する
  2. 分離されたコンポーネントにタスクを組み立てる
  3. VSTSに公開するためのvsixでのタスクのパック


これらの手順はすべて自動化して開発をスピードアップし、不必要な手作業を排除できます。 これらの手順を自動化するには、ブートストラップを使用できます。 コレクターのワークフローは、Microsoftのタスクコレクターに似ています。アセンブリのタスクは、プロジェクトのルートにあるmake-options.jsonファイルにリストされています。







 { "tasks": [ "AutoDefects", "ChainBuildsAwaiter", "ChainBuildsStarter", "TestTask" ], ... }
      
      





前提条件



拡張機能を作成するには、次のソフトウェアが必要です。









タスク作成



TaskNameタスクは次のコマンドで作成されます:

gulp generate –-name TaskName









コマンドの実行の結果、次のことが発生します。









骨格ファイルには、最低限必要なデータとコードのセットが含まれています。







プロジェクトタスクの組み立て



プロジェクトのタスクのアセンブリは、 gulp



によって実行されます







この場合、 make-options.jsonにリストされているすべてのタスクについて、次のことが発生します。









タスクのパッケージ化



パッキングタスクは、 gulp mkext [--all] [--exts ext1,ext2]









デフォルトでは、各タスクは個別のvsixファイルにパックされます。--allオプションが指定されている場合、すべてのタスクは1つの大きなvsixファイルに収集されます。







デフォルトでは、 make-options.jsonにリストされているすべてのタスクがパックされています。--extsオプションが指定されている場合、extensionパラメーターにリストされているタスクのみがパックされます。







私たちは開いています



GitHubで公開されているブートストラップ-フォーク、機能リクエスト、プルリクエストは大歓迎です。







この記事がMiscosoft VSTSへの関心を喚起することを本当に望んでいます。MiscosoftVSTSは、私の意見では、大企業だけでなく小規模の柔軟なチームにとっても優れたグループワークツールです。







コンスタンチン・ネラドフスキー、

テスト自動化責任者、

Otkritie Bank








All Articles