2015-07-13 20 views
22

Tôi đang cố gắng để có được TFS2015 Build (TFSBuild vnext) của chúng tôi cùng với Dịch vụ Đội VS.Làm thế nào để có được TFS2015 Build (Build.vnext) và gói NuGet khôi phục để sử dụng các nguồn gói tùy chỉnh

Vì vậy, đến nay hầu hết blogs and documentation đều hữu ích, ngoại trừ khi cố gắng xây dựng một dự án sử dụng nguồn gói tùy chỉnh để khôi phục gói tự động NuGet.

Tôi đã triển khai thành công một Team Services Build Agent (cơ chế mới cho các bản dựng) và tất cả dường như hoạt động tốt cho đến khi tác vụ xây dựng Khôi phục các gói NuGet thất bại.

Lỗi do nguồn gói tùy chỉnh/riêng tư không được chọn từ cấu hình VS đã cài đặt, do đó không thể tìm thấy các gói đó. Các gói truyền thống từ nguồn cấp dữ liệu gói NuGet mặc định đã khôi phục mà không có vấn đề.

Làm cách nào để chỉ định nguồn gói bổ sung cho NuGet sử dụng khi sử dụng tác nhân?

EDIT: vcastro hỏi về bước xây dựng Trình cài đặt NuGet và xác định đường dẫn trong cấu hình của bước xây dựng đó. Ở trên là sử dụng Visual Studio Build bước và tùy chọn tích hợp để có NuGet khôi phục gói. Tham khảo hình ảnh này để tham khảo: http://i.imgur.com/Hrqhhk2.png

+0

Tại sao không chỉ tạo máy chủ NuGet để lưu trữ các gói tùy chỉnh của bạn? –

+0

Đó là những gì chúng tôi đang làm. Vấn đề là làm thế nào để có NuGet (khi được điều hành bởi đại lý TFS 2015 Build mới) biết NuGet về (các) nguồn gói mới. Đây là những gì NuGet.Config cho, nhưng nó không chọn nó từ các thư mục cục bộ và chỉ các đường dẫn hồ sơ người dùng/dịch vụ (xem câu trả lời dưới đây). – Jaans

+0

Bạn có chỉ định đường dẫn đến nuget.exe của mình (nơi bạn có nuget.config tùy chỉnh) trong cài đặt nâng cao của Tác vụ Trình cài đặt Nuget không? Chúng tôi cũng đã có vấn đề này cho đến khi chúng tôi chỉ các nhiệm vụ xây dựng để nuget.exe của chúng tôi và nugget.config. – vcastro

Trả lời

6

Tôi đã scrounged web với rất ít thành công, nhưng sau không quan trọng sau đây sẽ giúp:

OK Dường như các nguồn gói cấu hình cho NuGet.config được lưu trữ cho mỗi tài khoản người dùng , ví dụ

c:\Users\<<username>>\AppData\Roaming\NuGet\NuGet.config

Vấn đề của tôi là khó khăn hơn để giải quyết, bởi vì các đại lý xây dựng đã được chạy như một Windows Service theo tài khoản Local System. Vì vậy, để có được cấu hình NuGet để cho việc xây dựng, tôi đã phải sử dụng đường dẫn sau để thay thế:

  • 64-bit Windows C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
  • 32-bit của Windows C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

Bạn có thể cần phải có cao quyền để tạo các thư mục con NuGetNuGet.Config.

Lưu ý: Tôi không có giải pháp để sử dụng tài khoản Local Service. Các công trình trên chỉ hoạt động cho tài khoản Local System (hoặc người dùng thực tế).

7

Thêm NuGet.config vào dự án của bạn chỉ định vị trí gói thay thế. Các quy tắc giải quyết được xác định rõ và được giải thích trong chính thức documentation.

+1

Cảm ơn Daniel. Tôi thực sự đã có một tập tin NuGet.Config trong cả hai cùng một vị trí thư mục và một thư mục con .NuGet, nhưng nó không hoạt động. Vì vậy, tôi không chắc chắn nếu TFS 2015 Build Agent mới ngăn chặn điều đó bằng cách nào đó. Cách duy nhất tôi có thể làm cho nó hoạt động là nếu tôi thêm nó vào các đường dẫn ở trên. – Jaans

17

Hoặc bạn cũng có thể thêm một bước xây dựng NuGet Installer trước bước Visual Studio Build trong cấu hình xây dựng của mình để khôi phục tất cả các gói NuGet.

Ở đó bạn có thể vượt qua vị trí của repo tin của bạn như là đối số để nuget.exe:

-source "https://www.nuget.org/api/v2/;http://mynugetserver"

+0

Làm việc cho tôi sau khi thử nhiều ý tưởng khác. Cũng bây giờ là phiên bản 3 https://www.nuget.org/api/v3/ –

2

Một giải pháp (công trình đối với tôi) là tài khoản thay đổi cho TFS 2015 dịch vụ đại lý xây dựng (trên máy xây dựng của tôi VSO Tác nhân tsf.Agent-PC) để tfsagent, ví dụ, và thêm Nuget.config vào C: \ Users \ tfsagent \ AppData \ Roaming \ Nuget. Đó là tất cả!

7

Có một nhiệm vụ VSTS mới có tên "NuGet Installer" cho phép bạn kiểm tra tệp NuGet.config và chỉ định các nguồn gói khác nhau. Chạy tác vụ này trước khi bạn chạy MSBuild.

Nếu bạn đang sử dụng VSTS NuGet thức ăn bạn sẽ cần phải thêm tài khoản xây dựng dịch vụ cho thức ăn để cho phép tải các gói https://www.visualstudio.com/get-started/package/use/common-identities

enter image description here

+2

Điều này làm việc tuyệt vời, tuy nhiên giao diện người dùng đã thay đổi và bây giờ không có đầu vào cho vị trí tệp cấu hình. Thay vào đó, thêm một NuGet Argument "-ConfigFile c: \ MyPath \ ToMy \ NuGet.config" –

0

Trong RTM của Team Foundation Server 2015 bạn phải thêm một bước xây dựng kiểu "NuGet Installer", và khôi phục các gói của tệp Solution trước khi bạn chạy quá trình xây dựng thực tế. Trong tác vụ này, bạn có thể chuyển đối số -ConfigFile path/to/nuget.config chứa đường dẫn lưu trữ của bạn.

Ví dụ:

<configuration> 
    <packageSources> 
    <add key="Internal Nuget" value="\\srv-nuget\Repo" /> 
    </packageSources> 
</configuration> 

enter image description here

1
  1. Chỉ định tùy chỉnh của bạn NuGet URL cấp dữ liệu trong tập tin nuget.config của giải pháp. Không lưu trữ bất kỳ tên người dùng nào & mật khẩu trong tệp này.

    <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
    <add key="MyCompany" value="https://nuget.mycompany.com:443/nuget" /> 
    
  2. Tạo tên & biến mật khẩu trong định nghĩa xây dựng của bạn trong VSTS. Các biến có thể được mã hóa và sẽ không được hiển thị trong bất kỳ đầu ra nhật ký xây dựng nào. Ở đây tôi sẽ tạo các biến số MyCompanyNugetUserMyCompanyNugetPwd.

  3. Trong các bước xây dựng của mình, chúng tôi thêm tập lệnh Powershell làm tác vụ đầu tiên, điều này sẽ đọc tên người dùng & biến mật khẩu và cập nhật tệp nuget.config cấp người dùng trên máy xây dựng.Dưới đây là đoạn mã từ inline Powershell kịch bản của tôi:

    Arguments:

    $(MyCompanyNugetUser) $(MyCompanyNugetPwd) 
    

    Script:

    param($user, $pwd) 
    
    $nugetFile = "$ENV:AGENT_HOMEDIRECTORY\agent\worker\tools\nuget.exe" 
    Write-Output "Looking for nuget.exe in $nugetFile" 
    
    if (-not (Test-Path $nugetFile)) 
    { 
        Write-Error "nuget.exe could not be located." 
        return 
    } 
    
    Write-Output "nuget.exe located" 
    
    $cmd = "$nugetFile sources add -name MyCompany -source https://nuget.mycompany.com:443/nuget -username $user -password $pwd -StorePasswordInClearText" 
    Write-Output $cmd 
    iex $cmd 
    
  4. Tiếp theo, chúng ta chỉ cần tiếp tục thực hiện mặc định NuGet Restore bước từ các mẫu của Microsoft

More đây: https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/

HTH

-1

Nếu bạn đang gặp khó khăn này để làm việc trên UWP ONLY, sau đó đảm bảo rằng bạn có trường hợp của các tên gói đúng chính tả. Nếu trường hợp là sai, thì (chỉ dành cho UWP) máy chủ xây dựng của chúng tôi không thành công.

ví dụ, nếu bạn có một gói phần mềm được gọi là Com.Company.Components và cập nhật các gói sử dụng "cài đặt gói com.company.components" (lưu ý trường hợp của bức thư ban đầu) sau đó UWP xây dựng trên máy chủ xây dựng có thể không tìm thấy gói trong cửa hàng địa phương của bạn.

+0

Tại sao downvote? Đây chính xác là những gì gây ra vấn đề trên máy chủ TFS của chúng tôi - Tôi tò mò là tại sao bạn nghĩ rằng điều này là không chính xác. – MercifulGiraffe

Các vấn đề liên quan