कस्टम पैकेज स्रोतों का उपयोग करने के लिए TFS2015 Build(Build.vnext) और NuGet पैकेज को कैसे प्राप्त करें




tfsbuild vsts (7)

अपने प्रोजेक्ट में एक NuGet.config जोड़ें जो एक वैकल्पिक पैकेज स्थान निर्दिष्ट करता है। संकल्प के नियमों को अच्छी तरह से परिभाषित किया गया है और आधिकारिक दस्तावेजों में समझाया गया है।

मैं वीएस टीम सेवाओं के साथ हमारे TFS2015 Build ( TFSBuild vnext ) प्राप्त करने की कोशिश कर रहा हूं

इस प्रकार अब तक अधिकांश ब्लॉग और दस्तावेज़ीकरण मददगार साबित हुए हैं, जब कि कोई परियोजना बनाने की कोशिश करते हुए जो कि NuGet स्वचालित पैकेज पुनर्स्थापना के लिए कस्टम पैकेज स्रोत का उपयोग करता है।

मैंने सफलतापूर्वक एक टीम सर्विसेज बिल्ड एजेंट (निर्माण के लिए नया तंत्र) तैनात किया है और सभी ठीक से चलने लगते हैं जब तक नूगेट पैकेज को पुनर्स्थापित करने के लिए बिल्ड कार्य विफल रहे

विफलता कस्टम / निजी पैकेज स्रोत की वजह से स्थापित वीएस विन्यास से नहीं ली गई थी, इसलिए उन संकुल को नहीं मिला। डिफ़ॉल्ट NuGet पैकेज फ़ीड से पारंपरिक संकुल बिना किसी समस्या के पुनर्स्थापित करता था।

एजेंट का उपयोग करते समय मैं NuGet के उपयोग के लिए अतिरिक्त पैकेज स्रोतों को कैसे निर्दिष्ट करूं?

संपादित करें: vcastro ने NuGet इंस्टॉलर बिल्ड चरण के बारे में पूछा और उस बिल्ड स्टेप के कॉन्फ़िगरेशन में पथ को परिभाषित किया। उपरोक्त दृश्य स्टूडियो बिल्ड चरण का उपयोग कर रहा है और NuGet को पुनर्स्थापित करने के लिए एक एकीकृत विकल्प है। संदर्भ के लिए इस छवि को देखें:


टीम फाउंडेशन सर्वर 2015 के RTM में आपको "नूगाकेट इंस्टालर" प्रकार के एक बिल्ड चरण को जोड़ना होगा, और वास्तविक बिल्ड प्रक्रिया चलाने से पहले आपको समाधान फ़ाइल के पैकेज को पुनर्स्थापित करना होगा। इस कार्य में आप तर्क को पारित कर सकते हैं - -ConfigFile path/to/nuget.config जिसमें आपका रिपॉज़िटरी पथ है।

उदाहरण के लिए:

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


मैंने वेब पर छोटी सी सफलता हासिल कर ली है, लेकिन निम्नलिखित को नगण्य करने में मदद मिलेगी:

ठीक है ऐसा लगता है कि NuGet.config के लिए कॉन्फ़िगर किया गया पैकेज स्रोत प्रति उपयोगकर्ता खाता संग्रहीत है, जैसे

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

मेरी समस्या हल करने के लिए कठिन था, क्योंकि बिल्ड एजेंट Local System खाते के तहत एक Windows Service के रूप में चल रहा था। तो निर्माण के लिए NuGet कॉन्फ़िगरेशन प्राप्त करने के लिए, मुझे इसके बजाय निम्नलिखित पथ का उपयोग करना पड़ा:

  • 64-बिट Windows C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
  • 32-बिट विंडोज C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config सिस्टम 32 C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

आपको NuGet सबफ़ोल्डर और न्यूगेट.कॉन्फिग फ़ाइल बनाने के लिए एलीवेट की अनुमतियों की आवश्यकता हो सकती है।

नोट: मेरे पास Local Service खाते का उपयोग करने के लिए कोई हल नहीं है I उपरोक्त केवल Local System (या एक वास्तविक उपयोगकर्ता) खाते के लिए काम करता है


उदाहरण के लिए, एक समाधान (मेरे लिए काम करता है) tfs 2015 बिल्ड एजेंट सेवा (मेरी बिल्ड मशीन VSO एजेंट tsf.Agent-PC पर) के लिए खाता बदलता है, और उदाहरण के लिए Nuget.config को C: \ users \ tfsagent \ AppData में जोड़ें \ रोमिंग \ Nuget। बस इतना ही!


एक नया वीएसटीएस टास्क है जिसे "न्यूगेट इंस्टालर" कहा जाता है, इससे आपको आपकी न्यूगेट.कॉन्ग फ़ाइल में जांच करने और विभिन्न पैकेज स्रोतों को निर्दिष्ट करने की सुविधा मिलती है। MSBuild को चलाने से पहले यह कार्य चलाएं

यदि आप VSTS NuGet फ़ीड का उपयोग कर रहे हैं तो आपको पैकेजों को डाउनलोड करने के लिए फ़ीड के लिए बिल्ड सेवा खाते को जोड़ने की आवश्यकता होगी https://www.visualstudio.com/get-started/package/use/common-inities


  1. समाधान के nuget.config फ़ाइल में अपना कस्टम न्यूगेट फीड यूआरएल निर्दिष्ट करें इस फ़ाइल में कोई उपयोगकर्ता नाम और पासवर्ड न रखें।

    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="MyCompany" value="https://nuget.mycompany.com:443/nuget" />
    
  2. VSTS में अपनी बिल्ड परिभाषा में उपयोगकर्ता नाम और पासवर्ड चर बनाएँ वेरिएबल्स को एन्क्रिप्ट किया जा सकता है और इनमें से किसी भी बिल्ड लॉग आउटपुट में प्रदर्शित नहीं किया जाएगा। यहाँ मैं MyCompanyNugetUser और MyCompanyNugetPwd चर बनाऊँगा

  3. हमारे बिल्ड चरणों में, हम एक पावरशेल्ड स्क्रिप्ट को पहली कार्रवाई के रूप में जोड़ते हैं, यह यूज़रनेम और पासवर्ड चर को पढ़ाएगा और बिल्ड मशीन पर यूज़र लेवल nuget.config फाइल को अपडेट करेगा। नीचे मेरे इनलाइन पावरशेल्ड स्क्रिप्ट से कोड स्निपेट है:

    तर्क:

    $(MyCompanyNugetUser) $(MyCompanyNugetPwd)
    

    स्क्रिप्ट:

    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. इसके बाद, हम माइक्रोसॉफ्ट के टेम्पलेट्स से डिफ़ॉल्ट NuGet Restore चरण को निष्पादित करते हैं

यहां अधिक: https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/

HTH


अगर आपको इसे केवल यूडब्ल्यूपी पर काम करने में परेशानी हो रही है, तो सुनिश्चित करें कि आपके पास पैकेज नाम का मामला सही वर्तनी है। यदि मामला गलत है, तो (केवल यूडब्ल्यूपी के लिए) हमारा बिल्ड सर्वर बिल्ड में विफल रहता है।

उदाहरण के लिए, यदि आपके पास कॉम कम्पनी नामक एक पैकेज है। कॉम्पूनेंट्स और पैकेज को "install-package com.company.components " का उपयोग करते हुए अपडेट करें (प्रारंभिक अक्षर का मामला ध्यान दें) फिर यूडब्लूपी बिल्ड सर्वर पर बिल्ड विफल हो सकता है आपके स्थानीय स्टोर में पैकेज







nuget-package-restore