*Текстът е предоставен от VSG Bulgaria
Добре дошли в нашата статия за безплатна DevOps автоматизация от край до край за .NET проекти. Днес ще ви покажем как да изградите автоматизиран процес за разработка, тестване, публикуване и сканиране на сигурността на вашия проект, като използвате безплатни технологии като GitHub Actions, Azure Static App и GitHub Pages. Следвайки стъпките в тази статия, вие ще можете да постигнете много по-бързо и ефективно изграждане и доставка на вашия .NET проект.
Без да губим време, да започнем!
В тази статия ще ви покажем как да използвате безплатните инструменти .NET и GitHub Actions за създаване на един цялостен DevOps процес. Ще се фокусираме върху петте основни стъпки:
• Създаване на проект и подготовка за релийз (GitFlow)
• Компилиране на проекта и създаване на артефакти – Continuous Integration (CI)
• Автоматично тестване (Unit, Selenium) – Continuous Testing (CT)
• Публикуване на проекта в уеб сървър – Continuous Delivery (CD)
• Автоматично сканиране за уязвимости – Continuous Security (CS)
Всички описани стъпки са разработени на примерен проект в GitHub на този линк 🔗 и са абсолютно безплатни. Проектът ще се развива с публикуването на следващите 2 статии, които ще включват:
• Статия 2:
o Управление на версиите в проектите
o Docker images
o Nuget и NPM регистрита за пакети
o + бонус теми
• Статия 3:
o Kubernetes
o Чат ботове за автоматизиране и интеграции (Skype, Microsoft Teams and etc.)
o Релийзи и автоматично публикуване на changelog
o + бонус теми естествено
Виж readme.md тук, което ще се развива с всяка статия!
Стъпка 1: Създаване на проект и подготовка за релийз
1.1 Създаване на GitHub репозитори: Отворете GitHub, създайте нов акаунт (ако е необходимо) и създайте репозитори за проекта си, като зададете име и настройки за видимост. За .gitignore темплейт може да използвате вече готовия за Visual Studio.
1.2 Създаване на Blazor проект с Visual Studio: Инсталирайте и отворете Visual Studio, създайте нов проект, изберете шаблона „Blazor WebAssembly Application“, задайте име и място за съхранение на проекта.
1.3 Качване на проекта в GitHub: Отворете проекта във Visual Studio, проверете кода и архитектурата, използвайте интегрирания Git клиент, за да направите commit и съхраните промените в репозиторито в GitHub.
Стъпка 2: Компилиране на проекта и създаване на артефакти (Continuous Integration)
След като сме създали нашия проект и сме готови да го пуснем в продукцията, следващата стъпка е да компилираме нашия код и да създадем артефакти, които ще се използват за разпространение на нашето приложение.
За това ще трябва да създадете workflow файл в хранилището. Файлът трябва да има името „dotnet-core.yml“ и да се намира в папката „.github/workflows“. Вътре във файла ще трябва да се добавят следните стъпки:
- Инсталиране на .NET Core SDK
- Компилиране на приложението
- Създаване на артефакт
Този workflow ще се изпълни всеки път, когато се пусне нов commit в главния ни бранч (main).
Той ще изпълни всички необходими стъпки за компилиране на проекта, включително:
- Сheckout на кода от GitHub репозитори
- Инсталиране на необходимата версия на .NET
- Инсталиране на всички външни пакети (nuget/npm packages)
- Компилиране на проекта в Release конфигурация
- Качване на създадените артефакти в GitHub
След като този workflow приключи успешно, имаме готови артефакти, които могат да бъдат използвани за разпространение на нашето приложение.
Линк към автоматизирания процес (GitHub action)!
Стъпка 3: Автоматично тестване (Continuous Testing)
В тази стъпка ще използваме GitHub Actions, за да изпълним автоматичните тестове на проекта, когато бъде добавен нов код или правим промени.
1.1 Създаване на тестова среда:
Създаваме тестова среда, която ще използваме за изпълнение на тестовете. Тя може да бъде базирана на Docker или да използва виртуални машини. В нашия случай ще използваме Docker.
1.2 Написване на тестове:
Написваме автоматизирани тестове, които да проверят дали функционалностите на проекта работят правилно. В .NET имаме много различни frameworks за тестване, като например NUnit, MSTest, xUnit и други.
1.3 Конфигуриране на GitHub Actions:
Добавяме конфигурационен файл в GitHub, който да казва на GitHub Actions как да изпълни тестовете. В този файл дефинираме каква тестова среда да се използва, какви тестове да се изпълнят и как да се докладва за резултатите.
GitHub Actions позволява на всеки commit да се изпълнява цял набор от тестове, за да гарантира, че новият код не разваля вече работеща функционалност. Това ни дава увереност, че кодът е в добро състояние и може да бъде пуснат в продукционна среда без да предизвиква проблеми.
Линк към автоматизирания процес със Selenium тестове (GitHub Action)!
Линк към автоматизирания процес със Unit тестове (GitHub Action)!
Стъпка 4: Публикуване на проекта в уеб сървър (Continuous Delivery)
GitHub предлага много интеграции с различни уеб услуги, които позволяват автоматизирано публикуване на приложението. В случая ще използваме GitHub Actions, за да публикуваме приложението в Azure Static App и Github Pages.
Azure Static App е уеб услуга, която позволява публикуване на статични уеб приложения в облака на Microsoft Azure. Github Pages, от друга страна, е услуга за публикуване на статични уеб сайтове, която предоставя GitHub.
За да публикуваме приложението в Azure Static App, трябва да направим следните стъпки:
- Създайте нова Azure Static App инстанция в Azure Portal.
- Настройте вашият инстанция, като зададете пътя до папката, която съдържа компилираните файлове на приложението.
- Създайте и конфигурирайте .yml файл за GitHub Actions. В този файл ще добавим инструкции за компилиране на приложението, качване на файловете в Azure Static App и публикуване на съобщение за успешно публикуване в Slack канал.
Линк към автоматизирания процес за публикуване в Azure Static Web App (GitHub Action)!
Линк към автоматизирания процес за публикуване в GitHub Pages (GitHub Action)!
Стъпка 5: Автоматично сканиране за уязвимости (Continuous security)
След като проектът е успешно тестван и публикуван, е време да го проверим за потенциални уязвимости в сигурността. За целта, можем да използваме OWASP ZAP и CodeQL инструментите, които са налични в GitHub Actions.
OWASP ZAP е безплатен инструмент за тестване на уеб приложения, който може да изпълнява различни видове сканиране за уязвимости, включително сканиране за Cross-Site Scripting (XSS), SQL injection и други. За да използваме OWASP ZAP в GitHub Actions, можем да използваме официално действие, наречено „ZAP Scan“. То позволява да конфигурираме сканирането и да получим доклад със съответните резултати.
CodeQL е инструмент, който може да помогне при откриването на потенциални проблеми за сигурността в кода. Той може да анализира кода за уязвимости, включително за SQL injection и други. За да използваме CodeQL в GitHub Actions, можем да използваме официалното действие, наречено „CodeQL Analysis“. То позволява да конфигурираме анализа на кода и да получим доклад с резултатите.
След като инструментите за сигурност са конфигурирани, можем да изпълним автоматични сканирания на нашия код, за да сме сигурни, че нямаме никакви потенциални уязвимости в сигурността. В случай че се открият такива проблеми, трябва да се поправят възможно най-бързо.
Линк към автоматизирания процес със OWASP ZAP (GitHub Action)!
Линк към автоматизирания процес със CodeQL (GitHub Action)!
Заключение
В заключение, DevOps практиките и инструментите, които бяха използвани в тази статия, са само малка част от възможностите, които предлага тази методология за софтуерна разработка и доставка. Подходът „от край до край“ на DevOps позволява на екипите да разработват и доставят софтуер по-бързо и по-ефективно, като в същото време осигурява по-високо качество и сигурност на приложенията.
С интегрирането на автоматичните тестове, публикуването в уеб сървър и автоматичните секюрити сканирания, екипите могат да работят по-бързо и да се фокусират върху разработката на нови функции и подобрения на приложенията, вместо да губят време в ръчните процеси на тестване и публикуване.
Накрая, е важно да се отбележи, че тази статия демонстрира как можем да използваме безплатни инструменти и услуги, за да постигнем успешна DevOps практика. Свободата и гъвкавостта на тези инструменти правят DevOps достъпен за всеки екип, независимо от големината или финансовите средства, с които разполага.
Последвайте ме в LinkedIn или следете DEV.BG за следващите статии.
Благодаря за четенето и нека силата бъде с вас!
Disclaimer: В статията, проектите и кода са използвани ботове и туулове: chatGPT (writing), GitHub Copilot (code), Resharper (code), Dependabot (dependency updates)