我想爲我們的構建服務器(windows機器)編寫一個腳本。壓縮不包含二進制文件的源代碼
一部分是提取二進制文件並刪除所有調試文件。我已經有了這個代碼。
第二部分是獲取項目的源文件(WPF)並壓縮它,不包括/ bin /和/ obj /文件夾。
到目前爲止,我已經得到了什麼是:
#
# Get and zip Sourcefiles
#
# Get relevant folders and files
[string[]]$FolderExcludes = @('*bin*', '*obj*')
$Folders = Get-ChildItem -Directory -Recurse -Exclude $FolderExcludes | %{
$allowed = $true
foreach ($exclude in $FolderExcludes) {
if ((Split-Path $_.FullName -Parent) -ilike $exclude) {
$allowed = $false
break
}
}
if ($allowed) {
$_
}
}
[string[]]$FileExcludes = @('*.git*', 'sonar-project.properties')
$Files = $Folders | Get-ChildItem -File | %{
$allowed = $true
foreach ($exclude in $FileExcludes) {
if ($_.Name -ilike $exclude) {
$allowed = $false
break
}
}
if ($allowed) {
$_.FullName
}
}
$Files
的文件列表中包含了我要壓縮所有文件。但是當我做
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
$Files | %{ sz a -mx=9 "$SourcePath\$ArtifactPath.zip" $_ }
它獲取所有文件並將它們放入根目錄。
當我嘗試壓縮文件夾時,7zip會佔用所有文件夾,包括bin和obj,幷包含隱藏的.git文件夾(我們不傾向於使用源代碼發佈)。
那麼我如何壓縮沒有bin/obj文件夾的源文件,並且不會破壞zip文件中的文件路徑?
順便說一句我試圖刪除文件夾,在構建過程後複製二進制文件到他們的出口文件夾之後,但在PowerShell中似乎舉行的文件,所以我不能在那個時候:(
刪除一個更愚蠢的想法是複製所有這些,並刪除bin和obj文件夾..但它似乎是非常低效的。
而且我不需要使用7zip。我完全用winzip或其他任何東西。只想壓縮源代碼。
您使用哪個版本的PS。 PS 5本地支持使用compress-archive和expand-archive cmdlet進行zip歸檔。 – autosvet
是的,我使用PS 5(Windows 10,還沒有1607)。除了命令,compress-archive是否有用? – ecth