如何在Visual Studio Team Services中作为构建的一部分签入文件?

时间:2015-12-28 17:08:20

标签: powershell team-build azure-devops

我正在尝试弄清楚如何在构建过程中关闭循环,我们在构建过程中将版本号应用于AssemblyInfo。*文件。

我们正在从内部部署的tfs迁移到visual studio团队服务。我们当前的许多内部版本都会更新版本号以使其与内部版本号保持同步,并在构建期间将这些文件重新检入源代码控制。

我已成功使用script located on msdn作为示例开始自定义构建过程。

我现在正在尝试将文件检回到源代码管理中,但我收到错误:

#[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection.
#[error]Process completed with exit code 100 and had 1 error(s) written to the error stream.

我目前正在使用tf.exe尝试执行此操作。首先获取powershell脚本顶部的工具路径;

# get the tf command line tool path
$tfexe = [System.IO.Path]::GetFullPath($env:VS140COMNTOOLS + "..\..\common7\ide\tf.exe")
if (-Not (Test-Path $tfexe))
{
    Write-Error "Could not find tf.exe at '$tfexe'"
    exit 1
}
else
{
    Write-Host "Found tf.exe at '$tfexe'"
}

然后修改循环以签出文件,然后再检查文件。

# Apply the version to the assembly property files
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include "*Properties*","My Project" | 
    ?{ $_.PSIsContainer } | 
    foreach { gci -Path $_.FullName -Recurse -include AssemblyInfo.* }
if($files)
{
    Write-Host "Will apply $NewVersion to $($files.count) files."

    foreach ($file in $files) {

        #Write-Host "Attempting to checkout file '$file'"
        & ($tfexe) vc checkout $file

        $filecontent = Get-Content($file)
        attrib $file -r
        $filecontent -replace $VersionRegex, $NewVersion | Out-File $file
        Write-Host "$file.FullName - version applied"
    }

    # Checkin pending changes together
    ##[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection.
    ##[error]Process completed with exit code 100 and had 1 error(s) written to the error stream.
    Write-Host "Attempting to checkin files"
    $comment = "Applied $NewVersion to $($files.count) files.  ***NO_CI***"
    & ($tfexe) vc checkin /comment:"$comment" /noprompt
}

这是正确的方法吗?如果构建服务没有被授权访问,那么它是如何获取代码,编译它,然后在某个地方发布工件?

2 个答案:

答案 0 :(得分:6)

我不建议每次都检查汇编版本,而是建议使用[assembly: AssemblyVersion("1.2.*")]通配符支持(我删除[AssemblyFileVersion]以便它自动匹配。

在构建出现问题后,以多种方式检入已更改的文件:

  • 索引源和符号功能将使用与更改集关联的代码不匹配的源。这将破坏高级调试方案。
  • 高级测试功能中断并可能会建议不需要的测试或更改集
  • 历史记录因**NO_CI**变更集
  • 而变得杂乱无章
  • 它打破了语义版本控制,因为这些类型的脚本不会破坏API更改,并可能导致有趣的行为。

我创建了一个新的构建任务,允许您使用任务签入文件:

使用tfx控制台将其添加到visualstudio团队基础服务或TFS 2015实例中:

tfx build tasks upload -taskpath path\to\project\root

我仍在努力寻找添加和删除的方法,但是我遇到了客户端对象模型的问题,除了编辑之外没有其他任何问题。

看起来调用tf addtf delete实际上会在构建脚本中与此签入任务结合使用。

了解更多信息:

答案 1 :(得分:3)

正如我之前评论过的那样。

  

我宁愿放弃Route::get('login', ['middleware' => ['qwickAuth'], 'uses' =>'WebController@login']); 文件上的更改而不是将它们检入源控件。

在我的情况下,我使用uses作为内部版本号格式

enter image description here

所以我永远不会从a AssemblyInfo.*文件中读回版本,那么保存这些信息有什么意义呢?

无论1.$(date:yy).$(date:MMdd)$(rev:.r)

存储的值如何,内部版本号格式都会再次生成版本

如果要将源代码与特定版本同步,可以使用相同的内部版本号格式标记源代码。

enter image description here