{"id":31797,"date":"2025-08-18T05:00:00","date_gmt":"2025-08-18T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=31797"},"modified":"2025-08-05T08:43:50","modified_gmt":"2025-08-05T06:43:50","slug":"automatyzacja-pipeline-kluczem-do-sukcesu-projektow-w-devops-dla-d365-fo-czesc-iii-praktyka","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/automatyzacja-pipeline-kluczem-do-sukcesu-projektow-w-devops-dla-d365-fo-czesc-iii-praktyka\/","title":{"rendered":"Automatyzacja pipeline kluczem do sukcesu projekt\u00f3w w DevOps dla D365 F&amp;O. Cz\u0119\u015b\u0107 III \u2013 praktyka"},"content":{"rendered":"\n<p>Dwa moje <a href=\"https:\/\/sii.pl\/blog\/author\/tomasz-sobestianczyk\/\" target=\"_blank\" rel=\"noopener\" title=\"\">poprzednie artyku\u0142y<\/a> wprowadzi\u0142y Was w \u015bwiat Pipeline, praktyk DevOps w zakresie budowania i weryfikacji kodu X++ oraz korzy\u015bci z wykorzystywania DevOps Pipelines dla D365 F&amp;O.<\/p>\n\n\n\n<p>W trzeciej cz\u0119\u015bci serii ponownie przedstawi\u0119 praktyczne informacje dotycz\u0105cych u\u017cycia automatyzacji zada\u0144 za pomoc\u0105 Pipeline DevOps (b\u0119d\u0119 u\u017cywa\u0142 polskiego s\u0142owa \u201epotok\u201d zamiast angielskiego \u201epipeline\u201d) na przyk\u0142adzie systemu ERP D365 F&amp;O wdra\u017canego przez&nbsp;<a href=\"https:\/\/sii.pl\/oferta\/enterprise-platforms\/microsoft\/dynamics-365-erp\/\" target=\"_blank\" rel=\"noreferrer noopener\">moje Centrum Kompetencyjne<\/a>. Skupi\u0119 si\u0119 m.in. na <strong>u\u017cyciu automatu potoku DevOps do innych czynno\u015bci ni\u017c tylko sprawdzanie wytwarzanego kodu przez naszych programist\u00f3w za pomoc\u0105 automatu potoku DevOps<\/strong>.<\/p>\n\n\n\n<p>W artykule opisz\u0119&nbsp;<strong>r\u00f3\u017cne sposoby wdro\u017cenia i u\u017cywania potok\u00f3w DevOps<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Kopiowanie branchy\/plik\u00f3w w ramach repozytorium<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Aby utworzy\u0107 potok DevOps, kt\u00f3ry kopiuje plik w obr\u0119bie ga\u0142\u0119zi, np. DEV, mo\u017cesz u\u017cy\u0107 potok\u00f3w Azure DevOps lub innego dowolnego narz\u0119dzia CI\/CD obs\u0142uguj\u0105cego operacje na plikach. W tym artykule przedstawi\u0119 przyk\u0142ad z wykorzystaniem potok\u00f3w Azure DevOps.<br>Oto jak mo\u017cesz utworzy\u0107 taki potok dla skopiowania pliku:\n<ul class=\"wp-block-list\">\n<li>Utw\u00f3rz potok lub utw\u00f3rz\/edytuj plik xml w katalogu g\u0142\u00f3wnym repozytorium. Zdefiniuj konfiguracj\u0119 potoku do kopiowania pliku<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ntrigger:\n- SAT\npool:\n  vmImage: windows-latest&#039;\n\nsteps:\n- script: |\n    echo &quot;Kopiowanie pliku...&quot;\n    cp path\/to\/source\/file path\/to\/destination\/\n  displayName: &#039;Kopiowanie pliku&#039;\n<\/pre><\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Aby utworzy\u0107 potok DevOps, kt\u00f3ry kopiuje pliki z jednej ga\u0142\u0119zi, np. DEV do SAT, mo\u017cesz u\u017cy\u0107 potok\u00f3w Azure DevOps do stworzenia ca\u0142ego procesu kopiowania plik\u00f3w:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"384\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1024x384.png\" alt=\"Kopiowanie plik\u00f3w mi\u0119dzy ga\u0142\u0119ziami DEV oraz SAT\" class=\"wp-image-31798\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1024x384.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-300x112.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-768x288.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1-1536x576.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image1.png 1700w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ryc. 1 Kopiowanie plik\u00f3w mi\u0119dzy ga\u0142\u0119ziami DEV oraz SAT<\/figcaption><\/figure>\n\n\n\n<p>oraz u\u017cy\u0107 polece\u0144:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ntf add D:\\a\\9\\s\\SAT\\ \/recursive \/noignore .....\ntf checkin D:\\a\\9\\s\\SAT\\ \/recursive \/comment:&quot;DEV to SAT&quot; .....\n<\/pre><\/div>\n\n\n<p>Takie dzia\u0142anie pozwala stworzy\u0107 potok dla kopiowania plik\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Automatyczne od\u015bwie\u017cenie encji w aplikacji D365 F&amp;O<\/strong><\/h2>\n\n\n\n<p>Konsultanci i programi\u015bci po jakichkolwiek zmianach w encjach w D365 F&amp;O musz\u0105 od\u015bwie\u017ca\u0107 r\u0119cznie list\u0119 encji danych na \u015brodowisku. Dzi\u0119ki <a href=\"https:\/\/github.com\/d365collaborative\/d365fo.integrations\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >dodatkowi d365fo.integrations<\/a> jest mo\u017cliwo\u015b\u0107 zautomatyzowania tego procesu za pomoc\u0105 potok\u00f3w DevOps. <strong>Dzi\u0119ki temu modu\u0142owi b\u0119dziesz m\u00f3g\u0142 od\u015bwie\u017cy\u0107 list\u0119 encji nawet w \u015brodowisku produkcyjnym.<\/strong><\/p>\n\n\n\n<p>Aby rozpocz\u0105\u0107, potrzebujemy rejestracji aplikacji w portalu Azure oraz konfiguracji w systemie D365. W ramach rejestracji aplikacji w portalu Azure konieczne b\u0119d\u0105:<\/p>\n\n\n\n<ol style=\"list-style-type:lower-alpha\" class=\"wp-block-list\">\n<li>Identyfikator klienta zarejestrowanej aplikacji us\u0142ugi Azure AD.<\/li>\n\n\n\n<li>Identyfikator klucza klienta zarejestrowanej aplikacji us\u0142ugi Azure AD.<\/li>\n\n\n\n<li>Identyfikator GUID dzier\u017cawy us\u0142ugi Azure AD, w kt\u00f3rej utworzono zarejestrowan\u0105 aplikacj\u0119.<\/li>\n<\/ol>\n\n\n\n<p>Potrzebujesz tak\u017ce zainstalowa\u0107 plik <a href=\"https:\/\/github.com\/d365collaborative\/d365fo.integrations\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >d365fo.integrations<\/a>. Otw\u00f3rz wiersz polecenia programu PowerShell z podwy\u017cszonym poziomem uprawnie\u0144 i u\u017cyj nast\u0119puj\u0105cego polecenia.<\/p>\n\n\n\n<p>Install-Module -Name d365fo.integrations<\/p>\n\n\n\n<p>Ponadto, utw\u00f3rz potok DevOps:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"374\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1024x374.png\" alt=\"Potok DevOps dla od\u015bwie\u017cenia encji\" class=\"wp-image-31800\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1024x374.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-300x110.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-768x281.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2-1536x561.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image2.png 1601w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ryc. 2 Potok DevOps dla od\u015bwie\u017cenia encji<\/figcaption><\/figure>\n\n\n\n<p>Dla skryptu PowerShell potrzebujesz uzupe\u0142ni\u0107 skrypt:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nInstall-PackageProvider nuget -Scope CurrentUser -Force -Confirm:$false\nwrite-host &quot;pakiet nuget zainstalowany&quot;\n Install-Module -Name AZ -AllowClobber -Scope CurrentUser -Force -Confirm:$False -SkipPublisherCheck\nwrite-host &quot;az zainstalowany&quot;\n Install-Module -Name d365fo.integrations  -AllowClobber -Scope CurrentUser -Force -Confirm:$false\nwrite-host &quot;d365fo.integrations zainstalowany&quot;\n Add-D365ODataConfig -Name &quot;D365EntityRefresh&quot; -Tenant &quot;AzureTenantId&quot; -url &quot;https:\/\/yourenvironment.sandbox.operations.dynamics.com&quot; -ClientId &quot;AzureApplicationId&quot; -ClientSecret &quot;AzureApplicationClientSecret&quot;\nwrite-host &quot;konfiguracja dodana&quot;\n Set-D365ActiveODataConfig -Name D365EntityRefresh\nwrite-host &quot;standardowa konfiguracja&quot;\n $token = Get-D365ODataToken\nwrite-host &quot;token wygenerowany&quot;\n Invoke-D365DmfInit -verbose -Token $token\nwrite-host &quot;dmf inicjalny - wywo\u0142any&quot;\n<\/pre><\/div>\n\n\n<p>Takie dzia\u0142anie pozwala stworzy\u0107 potok dla od\u015bwie\u017cenia encji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Automatyczna kopia zapasowa \u015brodowisk D365 za pomoc\u0105 potok\u00f3w DevOps<\/strong><\/h2>\n\n\n\n<p>Za pomoc\u0105 potoku DevOps mo\u017cesz zautomatyzowa\u0107 kopi\u0119 zapasow\u0105 \u015brodowisk D365 F&amp;O. Istnieje API Database Movement, kt\u00f3re pozwala to zrobi\u0107. Sii w swoich projektach wdro\u017ceniowych u klient\u00f3w bardzo cz\u0119sto wykorzystuje ten mechanizm.<\/p>\n\n\n\n<p>W celu stworzenia automatycznej kopii zapasowej \u015brodowisk D365 powiniene\u015b utworzy\u0107 potok DevOps z dwoma zadaniami.<\/p>\n\n\n\n<p>Dodatkowo, tak jak w przypadku potoku dla od\u015bwie\u017cania encji, nale\u017cy zarejestrowa\u0107 aplikacj\u0119 oraz zebra\u0107 informacje i parametry potrzebne do konfiguracji.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"510\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1024x510.png\" alt=\"Potok DevOps dla kopii zapasowej \u015brodowiska D365\" class=\"wp-image-31802\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1024x510.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-300x150.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-768x383.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3-1536x766.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/image3.png 1645w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ryc. 3 Potok DevOps dla kopii zapasowej \u015brodowiska D365<\/figcaption><\/figure>\n\n\n\n<p>Dla skryptu powershell Token mo\u017cesz u\u017cy\u0107:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$tokenUrl = &quot;https:\/\/login.microsoftonline.com\/common\/oauth2\/token&quot;\n$tokenBody = @{\ngrant_type = &quot;password&quot;\nclient_id = &quot;$(CLIENTID)&quot;\nclient_secret = &quot;$(CLIENTSECRET)&quot;\nresource = &quot;https:\/\/lcsapi.lcs.dynamics.com&quot;\nusername = &quot;$(USERNAME)&quot;\npassword = &quot;$(PASSWORD)&quot;\n}\n$tokenResponse = Invoke-RestMethod -Method &#039;POST&#039; -Uri $tokenUrl -Body $tokenBody\n$token = $tokenResponse.access_token\nWrite-Host $token\nWrite-Host &quot;##vso&#x5B;task.setvariable variable=TOKENOUT;isOutput=true]$token&quot;\n<\/pre><\/div>\n\n\n<p>Dla skryptu powershell Backup mo\u017cesz u\u017cy\u0107:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$cstzone = &#x5B;System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId( (Get-Date), \u2018W. Europe Standard Time\u2019)\n$filedate = Get-Date $cstzone -f \u201cyyy-MM-dd\u201d\n$BackupName = \u201cGolderbackup-$filedate\u201d\nWrite-Output $BackupName\n$refreshUrl = \u201chttps:\/\/lcsapi.lcs.dynamics.com\/databasemovement\/v1\/export\/project\/$(LCSPROJID)\/environment\/$(SAT)\/backupName\/$BackupName\u201d\n$refreshHeader = @{\nAuthorization = \u201cSii $(task1.TOKENOUT)\u201d\n\u201cx-ms-version\u201d = \u20182017-09-15\u2019\n\u201cContent-Type\u201d = \u201capplication\/json\u201d\n}\n$refreshResponse = Invoke-RestMethod $refreshUrl -Method \u2018POST\u2019 -Headers $refreshHeader\nWrite-Output $refreshResponse\n<\/pre><\/div>\n\n\n<p>Takie dzia\u0142anie pozwala stworzy\u0107 potok dla automatyzacji kopii zapasowych \u015brodowisk D365 F&amp;O.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/oferty-pracy\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-m.jpg\" alt=\"oferty pracy\" class=\"wp-image-31804\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-m.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/praca-m-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Na zako\u0144czenie<\/strong><\/h2>\n\n\n\n<p>W artykule skupi\u0142em si\u0119 na kolejnych aspektach praktycznych dotycz\u0105cych automatyzacji zada\u0144 za pomoc\u0105 potok\u00f3w DevOps na przyk\u0142adzie systemu ERP D365 F&amp;O wdra\u017canego przez moje <a href=\"https:\/\/sii.pl\/oferta\/enterprise-platforms\/microsoft\/dynamics-365-erp\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Centrum Kompetencyjne<\/a>. Skupi\u0142em si\u0119 na cz\u0119\u015bci administracyjnej czyli m.in. automatycznej kopii \u015brodowisk. Mam nadziej\u0119, \u017ce artyku\u0142 b\u0119dzie dla Was pomocny.<\/p>\n\n\n\n<p>W kolejnych cz\u0119\u015bciach przedstawi\u0119 dalsze mo\u017cliwo\u015bci potok\u00f3w DevOps.<\/p>\n\n\n\n<p>Poprzednie wpisy znajdziecie tutaj:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/automatyzacja-pipeline-kluczem-do-sukcesu-projektow-w-devops-dla-d365-fo-czesc-i\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Automatyzacja pipeline kluczem do sukcesu projekt\u00f3w w DevOps dla D365 F&amp;O. Cz\u0119\u015b\u0107 I <\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/automatyzacja-pipeline-kluczem-do-sukcesu-projektow-w-devops-dla-d365-fo-czesc-ii-praktyka\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Automatyzacja pipeline kluczem do sukcesu projekt\u00f3w w DevOps dla D365 F&amp;O. Cz\u0119\u015b\u0107 II \u2013 praktyka<\/a><\/li>\n<\/ul>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;31797&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;3&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 3)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Automatyzacja pipeline kluczem do sukcesu projekt\u00f3w w DevOps dla D365 F\\u0026amp;O. Cz\u0119\u015b\u0107 III \u2013 praktyka&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 3)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dwa moje poprzednie artyku\u0142y wprowadzi\u0142y Was w \u015bwiat Pipeline, praktyk DevOps w zakresie budowania i weryfikacji kodu X++ oraz korzy\u015bci &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/automatyzacja-pipeline-kluczem-do-sukcesu-projektow-w-devops-dla-d365-fo-czesc-iii-praktyka\/\">Continued<\/a><\/p>\n","protected":false},"author":156,"featured_media":31807,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2656,2654,1546,1512],"class_list":["post-31797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-pipeline-devops","tag-d365-fo","tag-przeglad-narzedzi","tag-poradnik"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/08\/Programming-2.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31797"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/156"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=31797"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31797\/revisions"}],"predecessor-version":[{"id":31809,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/31797\/revisions\/31809"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/31807"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=31797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=31797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=31797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}