
Natknęłam się na Cake w ramach deploymentu botów w pracy. Cake pozwala pisać build skrypty w C#. Więc zamiast ręcznie uruchamiać skrypty, albo bawić się Powershellem, można je zaprogramować w znanym mi języku. Co lepsze, można stworzyć repozytorium i w nim trzymać cały kod związany z deploymentem. Pliki Cake mają rozszerzenie .cake
Cake działa zarówno na Windowsie, Linuxie, i macOs. Jego dokumentacja jest całkiem niezła – zachęcam do czytania. Dodatkowo jest to projekt opensource dostępny na GitHubie.
Jak tylko wyszukać Cake w google? Samo słowo „Cake” daje wyniki lekko odmienne od spodziewanych ;p

Polecam więc używanie pełnej nazwy „cake build”:

Możliwości Cake
Tasks
W Cake definiuje się Taski, które są jakąś określoną jednostką pracy.
Task("TestTask")
.Does(() =>
{
//...
});
Dependencies
Możemy definiować kolejność wywoływania tasków oraz je grupować:
Task("TestTask")
.IsDependentOn("Task1")
.IsDependentOn("Task2")
.IsDependentOn("Task3")
.Does(() =>
{
//...
});
Finally
Jeśli mamy potrzebę zdefiniować coś na koniec taska (obojętnie, czy zakończył się on powodzeniem, czy nie), korzystamy z bloku Finally():
Task("TestTask")
.Does(() =>
{
//...
})
.Finally(() =>
{
//...
});
Criteria
Chcemy wywołać task tylko w konkretnym przypadku np. w zależności od wartości zmiennej środowiskowej? Używamy Criteria():
var isLocalBuild = BuildSystem.IsLocalBuild;
Task("TestTask")
.WithCriteria(!isLocal)
.Does(() =>
{
//...
});
Setup i Teardown
Gdy potrzeba skonfigurować coś na początku lub końcu całego skryptu, można użyć odpowiednich metod Setup() i Teardown().
Setup(context =>
{
// Executed BEFORE the first task.
});
Teardown(context =>
{
// Executed AFTER the last task.
});
Add-in
Jeśli potrzebujemy jakiejś dodatkowej paczki np. do obługi plików, wystarczy w górnej części pliku zdefiniować jej źródło (najlepiej z określeniem konkretnej wersji) i dodać odpowiedni using:
#addin "nuget:https://api.nuget.org/v3/index.json?package=Cake.FileHelpers&version=3.1.0"
using Cake.FileHelpers;
A coś więcej?
Cake pozwala również na inne rzeczy m.in. współdzielenie kontekstu, taski asynchroniczne, error handling i wiele więcej. Zachęcam do czytania dokumentacji.
A o tym, jak wykorzystać Cake z konkretnymi przykładami będziecie mogli poczytać już w następnym wpisie.
Post powstał pod patronatem firmy, w której aktualnie pracuję: Objectivity.
Grafikę tytułową zaprojektował niezastąpiony zespół designu!
Podoba Ci się to, co tworzę? Chcesz dostawać informacje o:
– wydarzeniach, które organizuję lub wspieram (np. konferencje, meetupy, webinary)
– inicjatywach, które organizuję lub wspieram (np. GeekWeekWro, DevAdventCalendar)
– moich prelekcjach, kursach i szkoleniach
– wyróżnionych artykułach z mojego bloga
0% SPAMu, 100% informacji! Krótko i na temat.
Czy dobrze z zrozumiałem… Zamiast pisać skrypty w Powershellu, które później odpalam w CI/CD, mogę to zrobić przy użyciu Cake?
PolubieniePolubione przez 1 osoba
Dokładnie! Całą logikę piszesz w Cake, za pomocą C# 🙂
PolubieniePolubienie
To muszę to sprawdzić przy kolejnym projekcie 🙂 Chociaż polubiłem Powershella, co i tak czasem zdarza się, że googluje jak zrobić prostą rzecz, bo nie pamiętam dokładnie nazw poleceń.
PolubieniePolubione przez 1 osoba
Jeżeli lubisz PowerShell’a, to możesz także skorzystać z toola spokrewnionego z Cake, czyli Psake (https://github.com/psake/psake).
PolubieniePolubione przez 1 osoba
Dzięki za info. Powershell jest spoko, jednak wolę C# 🙂
PolubieniePolubione przez 1 osoba
Pingback: Cake.Deploy.ScriptRunner – programmer-girl