Nuget serwer mnie nie lubi

N

Brief

Dzisiaj temat podyktowany moim lekkim wk^@wem. Mianowicie zdenerwowałem się na serwer Nuget. Już mówię o co chodzi.

W pracy, w nowym projekcie, zaistniała potrzeba postawienia serwera Nugetowego. Dlaczego, komu i po co, nie będę tłumaczył. Nie ma to w tej chwili znaczenia.

To co ma znaczenie to, że trzeba było taki serwer zabezpieczyć, na razie „na szybko”. Pierwsze co mi przyszło do głowy, po utworzeniu apiKey, było utworzenie użytkownika dla danego Nuget source i zaktualizowanie konkretnego feeda o tego użytkownika i jego hasło.

Do dzieła

Robimy to tak:

nuget sources update -Name [name] -source [feedUrl] -User [username] -pass [password]

Komenda ta aktualizuje konkretne źródło paczek, o nazwę, adres url, użytkownika i hasło. Można jeszcze ustawić, żeby hasło było trzymane plain textem, albo np. ustawić to w innym pliku .config nugeta, niż główny plik, tymczasem ja nie o tym…

Ustawienia użytkownika i hasła są trzymane w pliku .config, w standardzie XML, w ten sposób :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
    <add key="SourceName" value="https://someNugetServerUrl/nuget/" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <packageManagement>
    <add key="format" value="0" />
    <add key="disabled" value="False" />
  </packageManagement>
  <packageSourceCredentials>
    <SourceName>
        <add key="Username" value="UserName" />
        <add key="Password" value="Password" />
      </SourceName>
  </packageSourceCredentials>
</configuration>

Jak widać mamy sekcję packageSources w której są zapisane źródła i adresy dla nich.
Źródło SourceName jest tym które nas interesuje i dla którego w sekcji packageSourceCredentials są ustawione poświadczenia Username i Password, dlatego wartość klucza Password w tym przypadku powinna być zahashowana.

Okey! Myślę sobie – super. Mam usera i hasło. Teraz ani nie zrobię restore, ani push bez tych danych. Szybko i przyjemnie.

A nie prawda!

Niespodzianka pierwsza

Okazuje się, że to jest tylko zabezpieczenie na przypadek pusha. Mało tego, użytkownika i hasło można podać tylko w trybie interactive w konsoli i co to oznacza? To oznacza, że trzeba robić ten push ręcznie. GitLab, Jenkins, żadne zewn. narzędzie nie będzie w stanie podać tych danych samoistnie.

No dobra, myślę sobie, z Gitlabem sobie poradzę, może chociaż komenda restore jest zabezpieczona i z poziomu VisualStudio, czy JetBrains Rider (czy czego tam ktokolwiek używa) będzie trzeba podać usera i password przy aktualizacji referencji do nowych wersji paczek, itp.

A nie prawda!

Niespodzianka druga

Komenda restore działa jak marzenie. Bez potrzeby podawania czegokolwiek.

Zawiodłem się trochę. Myślę – „trzeba kombinować inaczej. Restrictions over IP nie wchodzi w grę, ale już NTLM (Windows Server) będzie ok. Trzeba to wyłączyć i działać dalej.”

A nie prawda!

Niespodzianka trzecia

NIE DA SIĘ TEGO CHOLERSTWA WYŁĄCZYĆ

Użycie komendy aktualizującej ustawienia feda na nowo i nie pomaga:

nuget sources update -Name [name] -source [feedUrl]

Sekcja packageSourceCredentials zostaje w pliku .config nienaruszona.

Usunięcie danego feeda z pliku .config i dodanie go na nowo…

nuget sources remove -Name [name]
nuget sources add -Name [name] -source [feedUrl]

…też nie działa.

Przecież tego tak nie zostawię więc, zabieram się za research. Już po chwili okazuje się, że nie jestem sam.

Myślę sobie:
– „Uffffff… Bedzie rozwiązanie.”

Szukam dalej … szukam … szukam …

… i nic. Nawet nie ma wzmianki czy jest to bug czy może zamierzone działanie. Generalnie zostałem z feedem nugeta z któego może pobrać paczkę każdy, ale nie każdy wypchnie paczki na serwer.

Moi drodzy. Czy macie/znacie jakieś rozwiązanie?
Ja mam dość. Poddaję się. Zrobię nowy nuget serwer.

Lubisz rozwiązywać problemy? Zapraszam do kategorii – Leśne żale



Photo by jesse ramirez on Unsplash

About the author

Add comment

By Patryk

Autor serwisu

Patryk

Społecznościowe

Instagram

Newsletter



Historycznie

Tagi