VSTS / TFS Build仅在提交并推送Git标记时运行NPM任务

时间:2018-01-29 12:32:09

标签: node.js git continuous-integration azure-devops

Microsoft docs上,它声明您可以为特定的构建任务设置条件。例如,在定义的Git分支的特定版本上运行构建。

但是,只有当提交包含git-tag时,是否也可以使VSTS构建NPM包?

更新1:命令$ git describesource)似乎是解决方案的一部分。此命令采用最后一个提交哈希并匹配它以查看是否有注释标记。但是,它并不等于我们在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包并使用类似的功能也可以。去试试吧。

1 个答案:

答案 0 :(得分:3)

是的,当构建提交包含标记时,可以条件运行任务。

但由于没有这样的预定义变量来记录构建提交$(BUILD.SOURCEVERSION)的标记,因此您应该添加步骤(添加变量和PowerShell任务)以检查是否有标记构建提交。详细步骤如下:

1。使用默认值0添加变量(例如result)。该变量用于检查构建提交是否包含标记。

enter image description here

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'))

enter image description here