在Microsoft docs上,它声明您可以为特定的构建任务设置条件。例如,在定义的Git分支的特定版本上运行构建。
但是,只有当提交包含git-tag时,是否也可以使VSTS构建NPM包?
更新1:命令$ git describe
(source)似乎是解决方案的一部分。此命令采用最后一个提交哈希并匹配它以查看是否有注释标记。但是,它并不等于我们在VSTS的自定义条件中所需的布尔值。
更新2:使用npm git-describe您可以返回最近的提交是否有注释标记。 gulp任务的示例:
/** Example of a gulp task using git describe */
var gulp = require('gulp');
var {gitDescribeSync} = require('git-describe');
/**
* @function
* @name checkGitTag
* @description Returns wether or not the latest commit has a tag
* @returns {(String|null)} Git tag or null if no git tag exists on the commit
*/
var checkGitTag = function() {
var gitInfo = gitDescribeSync();
// output the result to debug
console.log(gitInfo.tag);
// gitInfo.tag seems to contain the logic needed
};
gulp.task('checkGitTag', checkGitTag);
module.exports = checkGitTag;
可能通过在构建服务器上安装NPM包并使用类似的功能也可以。去试试吧。
答案 0 :(得分:3)
是的,当构建提交包含标记时,可以条件运行任务。
但由于没有这样的预定义变量来记录构建提交$(BUILD.SOURCEVERSION)
的标记,因此您应该添加步骤(添加变量和PowerShell任务)以检查是否有标记构建提交。详细步骤如下:
1。使用默认值0添加变量(例如result
)。该变量用于检查构建提交是否包含标记。
2. 然后在要进行条件运行的任务之前添加 PowerShell任务,并在PowerShell脚本中添加如下:
$tag=$(git tag --contains $(BUILD.SOURCEVERSION))
if($tag)
{
Write-Host "##vso[task.setvariable variable=result]1"
echo "The build version $(BUILD.SOURCEVERSION) contains tag(s)"
}
else
{
Write-Host "##vso[task.setvariable variable=result]0"
echo "The build version $(BUILD.SOURCEVERSION) does not contain any tags"
}
3。最后,只有在提交包含标记时才要为要运行的任务设置自定义条件,如下所示:
and(succeeded(), eq(variables['result'], '1'))