<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure Developer CLI | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/azure-developer-cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/azure-developer-cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Hooki azd w Python, TypeScript i .NET: koniec ze skryptami shell</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI obsługuje teraz hooki w Python, JavaScript, TypeScript i .NET. Koniec z przełączaniem się na Bash tylko po to, żeby uruchomić skrypt migracji.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jeśli kiedykolwiek miałeś projekt w całości napisany w .NET i mimo to musiałeś pisać skrypty Bash dla hooków azd — znasz ten ból. Po co przełączać się na składnię shell w kroku pre-provisioning, skoro reszta projektu to C#?&lt;/p&gt;
&lt;p&gt;Ta frustracja ma teraz oficjalne rozwiązanie. Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;właśnie wprowadził obsługę wielu języków dla hooków&lt;/a&gt;, i jest dokładnie tak dobre, jak brzmi.&lt;/p&gt;
&lt;h2 id="czym-są-hooki"&gt;Czym są hooki&lt;/h2&gt;
&lt;p&gt;Hooki to skrypty wykonywane w kluczowych punktach cyklu życia &lt;code&gt;azd&lt;/code&gt; — przed provisioningiem, po deploymencie i nie tylko. Definiuje się je w &lt;code&gt;azure.yaml&lt;/code&gt; i pozwalają na wstrzyknięcie własnej logiki bez modyfikowania CLI.&lt;/p&gt;
&lt;p&gt;Wcześniej obsługiwane były tylko Bash i PowerShell. Teraz można używać &lt;strong&gt;Pythona, JavaScript, TypeScript lub .NET&lt;/strong&gt; — resztą zajmuje się &lt;code&gt;azd&lt;/code&gt; automatycznie.&lt;/p&gt;
&lt;h2 id="jak-działa-wykrywanie"&gt;Jak działa wykrywanie&lt;/h2&gt;
&lt;p&gt;Wystarczy wskazać hook na plik, a &lt;code&gt;azd&lt;/code&gt; wywnioskuje język z rozszerzenia:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bez dodatkowej konfiguracji. Jeśli rozszerzenie jest niejednoznaczne, można jawnie podać &lt;code&gt;kind: python&lt;/code&gt; (lub odpowiedni język).&lt;/p&gt;
&lt;h2 id="ważne-szczegóły-według-języka"&gt;Ważne szczegóły według języka&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Umieść &lt;code&gt;requirements.txt&lt;/code&gt; lub &lt;code&gt;pyproject.toml&lt;/code&gt; obok skryptu (lub w dowolnym katalogu nadrzędnym). &lt;code&gt;azd&lt;/code&gt; automatycznie tworzy środowisko wirtualne, instaluje zależności i uruchamia skrypt.&lt;/p&gt;
&lt;h3 id="javascript-i-typescript"&gt;JavaScript i TypeScript&lt;/h3&gt;
&lt;p&gt;Ten sam wzorzec — &lt;code&gt;package.json&lt;/code&gt; blisko skryptu, a &lt;code&gt;azd&lt;/code&gt; najpierw wykona &lt;code&gt;npm install&lt;/code&gt;. Dla TypeScript używa &lt;code&gt;npx tsx&lt;/code&gt; bez etapu kompilacji i bez &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Dwa dostępne tryby:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tryb projektu&lt;/strong&gt;: jeśli obok skryptu jest &lt;code&gt;.csproj&lt;/code&gt;, &lt;code&gt;azd&lt;/code&gt; automatycznie uruchamia &lt;code&gt;dotnet restore&lt;/code&gt; i &lt;code&gt;dotnet build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tryb single-file&lt;/strong&gt;: na .NET 10+ samodzielne pliki &lt;code&gt;.cs&lt;/code&gt; uruchamiają się bezpośrednio przez &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Plik projektu nie jest wymagany.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="konfiguracja-dla-konkretnego-executora"&gt;Konfiguracja dla konkretnego executora&lt;/h2&gt;
&lt;p&gt;Każdy język obsługuje opcjonalny blok &lt;code&gt;config&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="dlaczego-to-ważne-dla-programistów-net"&gt;Dlaczego to ważne dla programistów .NET&lt;/h2&gt;
&lt;p&gt;Hooki były ostatnim miejscem w projekcie opartym na azd, które wymuszało zmianę języka. Teraz cały pipeline deploymentu — od kodu aplikacji po hooki cyklu życia — może żyć w jednym języku. Można ponownie wykorzystywać istniejące narzędzia .NET w hookach, referencować współdzielone biblioteki i porzucić utrzymywanie skryptów shell.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Jedna z tych zmian, które wydają się drobne, ale naprawdę redukują codzienne tarcia w pracy z azd. Obsługa wielu języków dla hooków jest dostępna teraz — pełna dokumentacja w &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;oficjalnym poście&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: Konfiguracja projektu z AI i inteligentne rozwiązywanie błędów</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI integruje się teraz z GitHub Copilot, żeby wygenerować infrastrukturę projektu i naprawiać błędy wdrożeń — bez wychodzenia z terminala.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Oryginalną wersję angielską znajdziesz &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, gdy chcesz wdrożyć istniejącą aplikację na Azure i patrzysz na pusty &lt;code&gt;azure.yaml&lt;/code&gt;, próbując przypomnieć sobie, czy Twoje Express API powinno używać Container Apps czy App Service? Ten moment właśnie stał się znacznie krótszy.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) integruje się teraz z GitHub Copilot na dwa konkretne sposoby: scaffolding projektu wspomagany przez AI podczas &lt;code&gt;azd init&lt;/code&gt; oraz inteligentne rozwiązywanie błędów gdy wdrożenia kończą się niepowodzeniem. Obie funkcje działają całkowicie w terminalu.&lt;/p&gt;
&lt;h2 id="konfiguracja-z-copilotem-podczas-azd-init"&gt;Konfiguracja z Copilotem podczas azd init&lt;/h2&gt;
&lt;p&gt;Po uruchomieniu &lt;code&gt;azd init&lt;/code&gt; pojawia się opcja &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Wybierz ją, a Copilot przeanalizuje Twój codebase i wygeneruje &lt;code&gt;azure.yaml&lt;/code&gt;, szablony infrastruktury oraz moduły Bicep — na podstawie Twojego rzeczywistego kodu.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Wybierz: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wymagania:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 lub nowszy&lt;/strong&gt; — sprawdź przez &lt;code&gt;azd version&lt;/code&gt; lub zaktualizuj przez &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktywna subskrypcja GitHub Copilot&lt;/strong&gt; (Individual, Business lub Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;azd&lt;/code&gt; poprosi o logowanie jeśli potrzeba&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To co uważam za naprawdę użyteczne: działa w obu kierunkach. Budujesz od zera? Copilot pomaga skonfigurować właściwe usługi Azure od początku. Masz istniejącą aplikację do wdrożenia? Wskaż Copilotem na nią — konfiguracja zostanie wygenerowana bez konieczności restrukturyzacji kodu.&lt;/p&gt;
&lt;h3 id="co-faktycznie-robi"&gt;Co faktycznie robi&lt;/h3&gt;
&lt;p&gt;Powiedzmy, że masz Node.js Express API z zależnością od PostgreSQL. Zamiast ręcznie wybierać między Container Apps a App Service, a potem pisać Bicep od zera, Copilot wykrywa Twój stack i generuje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; z właściwymi ustawieniami &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; i &lt;code&gt;build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Moduł Bicep dla Azure Container Apps&lt;/li&gt;
&lt;li&gt;Moduł Bicep dla Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przed jakąkolwiek zmianą przeprowadzane są wstępne sprawdzenia — weryfikuje czystość katalogu roboczego git, pyta z wyprzedzeniem o zgodę na narzędzia serwera MCP. Nic nie dzieje się bez Twojej wiedzy.&lt;/p&gt;
&lt;h2 id="rozwiązywanie-błędów-z-copilotem"&gt;Rozwiązywanie błędów z Copilotem&lt;/h2&gt;
&lt;p&gt;Błędy wdrożenia są nieuniknione. Brakujące parametry, problemy z uprawnieniami, dostępność SKU — a komunikat o błędzie rzadko mówi to, co naprawdę musisz wiedzieć: &lt;em&gt;jak to naprawić&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Bez Copilota pętla wygląda tak: skopiuj błąd → szukaj w dokumentacji → czytaj trzy niepowiązane odpowiedzi na Stack Overflow → uruchom kilka poleceń &lt;code&gt;az&lt;/code&gt; CLI → spróbuj ponownie. Z Copilotem w &lt;code&gt;azd&lt;/code&gt; ta pętla znika. Gdy jakiekolwiek polecenie &lt;code&gt;azd&lt;/code&gt; kończy się błędem, natychmiast oferuje cztery opcje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — wyjaśnienie w zrozumiałym języku, co poszło nie tak&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instrukcje krok po kroku jak naprawić problem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — pełna analiza + Copilot stosuje poprawkę (za Twoją zgodą) + opcjonalne ponowienie&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — samodzielna obsługa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kluczowa kwestia: Copilot ma już kontekst Twojego projektu, nieudanego polecenia i szczegółów błędu. Jego sugestie są specyficzne dla &lt;em&gt;Twojej sytuacji&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="ustawianie-domyślnego-zachowania"&gt;Ustawianie domyślnego zachowania&lt;/h3&gt;
&lt;p&gt;Jeśli zawsze wybierasz tę samą opcję, pomiń interaktywny monit:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wartości: &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. Możesz też włączyć automatyczną naprawę i ponowienie:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Powrót do trybu interaktywnego w dowolnym momencie:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Uruchom &lt;code&gt;azd update&lt;/code&gt; po najnowszą wersję i wypróbuj &lt;code&gt;azd init&lt;/code&gt; w swoim następnym projekcie.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;oryginalny komunikat tutaj&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>