2015-12-28 113 views
6

我想弄清楚如何關閉我們的構建過程中的循環,我們將版本號作爲構建過程的一部分應用於AssemblyInfo。*文件。如何將文件簽入爲Visual Studio Team Services中構建的一部分?

我們正在從內部tfs遷移到視覺演播室團隊服務。我們目前的許多內部部署版本都會更新版本號以使其與內部版本號保持同步,並在構建期間將這些文件還原到源代碼控制中。

我已經成功使用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 
} 

這是在做正確的方法?如果構建服務沒有被授權訪問,它會如何獲取代碼,編譯它,然後在某處發佈工件?

+1

我寧願放棄對'集信息的變化*'文件比檢查它們到源控制。 –

+0

@ JuanM.Elosegui爲什麼? –

+1

同意。因爲簽入的源代碼與用於構建的變更集記錄的內容不匹配,不符合符號和索引源,打破高級調試方案,混亂的歷史記錄,並消除了大多數開發人員的「版本」概念,導致他們在檢查重大更改,主要版本等時不會正確增加。我建議使用'1.2。*',並讓構建服務器自動應用修訂版,同時手動控制主版本和次版本。 – jessehouwing

回答

6

我不建議在程序集的版本,每次來檢查,而不是我建議使用[assembly: AssemblyVersion("1.2.*")]通配符支持(我刪除[AssemblyFileVersion]所以它會自動匹配。

檢查中內部版本發生更改後的文件存在多種問題:

  • 索引源和符號功能將使用與變更集關聯的代碼不匹配的源。將打破高級調試場景。
  • 先進的測試功能,打破並可能暗示不必要的檢查或變更
  • 歷史堆滿了**NO_CI**變更
  • 它打破了語義版本,因爲這些類型的腳本打破API變化不因子,並可能導致滑稽的行爲。

我創建了一個新的建設任務,這將允許你使用任務簽入文件:

將它添加到TFS 2015年的您的VisualStudio在線使用tfx控制檯的實例:

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

我仍在努力尋找添加和刪除的方式,但我遇到了客戶端對象模型的問題,不知何故掛起除編輯之外的其他任何東西。

它看起來好像調用tf addtf delete實際上將在構建腳本中與此簽入任務結合使用。

欲瞭解更多信息:

+0

我想現在,因爲我沒有一個強有力的論點反對不檢查文件我會遵循不做檢查的建議。 –

3

正如我以前所評論的。

I would rather discard the changes on AssemblyInfo.* files than check them into the source control.

在我來說,我使用1.$(date:yy).$(date:MMdd)$(rev:.r)作爲構建數字格式

enter image description here

所以我永遠不會讀回從一個AssemblyInfo.*文件的版本,那麼什麼是保存該信息點?

的版本號格式將再次生成的版本,無論存儲的AssemblyInfo.*

如果你想,你可以使用同一個版本號的格式標記源代碼中的特定版本同步源代碼的價值。

enter image description here

相關問題