2017-08-28 63 views
0

我正在嘗試爲相當大的解決方案設置自動構建+部署。單個解決方案在「$(Build.ArtifactStagingDirectory)」位置生成2個zip文件夾,並且這些文件夾包含所有正確的文件。爲了測試/故障排除的目的,我只查看其中一個zip文件,但最終這兩個站點都必須以這種方式部署。VSTS在線門戶:在發佈時取消構建文件夾

但是,要獲得實際的文件,您必須通過不必要的子文件夾。爲了進一步複雜化,基於構建配置的某些元素(其中一些歸因於git倉庫中的文件夾結構),其中大約8個是可變的。

我不想要這些子文件夾中的任何一個。另一個問題是我實際上並不想要一個100%的平面文件;我需要包含子文件夾的2個文件夾才能包含在finally-extracted目錄中。 (最終目錄是IIS站點的物理路徑。)有沒有辦法做到這一點?

我曾嘗試:

  • 以生成的壓縮文件,它解壓到一個臨時目錄,並重新包裝,所有的構建機器上。

    • 爲了得到這個工作,我不得不手動指定14個子目錄。另外,我無法使用「發佈工件」將生成的zip上傳到VSTS,所以我不知道如何將它放到服務器上。
  • 從VSTS下載已發佈的zip文件,在發佈計算機上本地解壓縮,然後將內容複製到正確的目錄中。

    • 這隻有當我手動指定目錄中包含的14個文件夾時才起作用。我試圖用通配符隱藏14個文件夾,但是隻能成功地複製過多的嵌套結構 - 我猜「源文件夾」參數不支持通配符(我必須在「內容」部分實際執行或任務失敗)。
  • 在複製對話框中使用「拼合文件夾」高級選項。

    • 這將刪除所有文件夾結構,這不是我想要的。我需要在最終目錄中包含2個包含子文件夾的文件夾。

如果這是不可能僅部分平由生成步驟生成的ZIP,我會很感激一些幫助搞清楚我是多麼可怕的這個錯綜複雜的路徑可以拉出使用變量。

+0

嘗試我的解決方案後,結果如何? –

回答

0

這是MSBuild部署/發佈到包操作,並且在部署到服務器後,文件夾結構將不會保留。

您可以指定/p:PackageTempRootDir="" msbuild參數來忽略項目路徑的文件夾結構。

另一種方法是,您可以通過FileSystem方法發佈項目,然後通過存檔文件任務存檔文件。

+0

我不確定你的意思是「在部署到服務器後文件夾結構不會保留」 - 它非常重要,這就是100%的問題。我必須解壓縮zip文件(只需用IIS部署它們不會將文件放在需要的地方)。我認爲PackageTempRootDir參數將* help *,但它仍然不能真正解決我的問題。它只是減少了額外的嵌套文件夾的數量,我必須~4。 – thecoloryes

+0

@thecoloryes如何將包部署到IIS?使用WinRM IIS Web應用程序部署或Azure Web應用程序部署任務時,只需將已發佈的結果文件部署到服務器而不需要額外的嵌套文件夾。使用/ p:PackageTempRootDir =「」msbuild參數,它將刪除項目路徑的文件夾結構,但具有Content \ D_C \ PackageTmp。您可以通過FileSystem方法發佈項目。 –

+0

我在我的發行版定義中使用「IIS Web App部署(預覽)」任務。我無法從構建定義中做到這一點,因爲構建和發佈機器不僅是唯一的,而且在不同的領域,所以我不能在構建機器上獲得WinRM來與發佈機器通信。最初我想使用FileSystem發佈到共享網絡驅動器,但「複製文件」任務有寫入共享驅動器的權限問題,所以我不得不使用服務器方法。我認爲你提到的論點是我最接近我真正想要的。 – thecoloryes

相關問題