CI/CD za pomocą AWS Copilot
W poprzednim artykule o AppRunner pokazałem w jaki sposób łatwo wdrożyć w AWS skalowalną aplikację opartą o kontenery. Dziś zajmiemy się zbudowaniem procesu CI/CD za pomocą AWS Copilot.
Zakładam, że mamy nasze źródła w repozytorium na GitHubie. Możecie zrobić forka z mojego lub utworzyć nowe.
Mamy więc działającą aplikację w AWS App Runner, źródła w repozytorium. Przechodzimy do działania.
CI/CD za pomocą AWS Copilot
AWS Copilot potrafi utworzyć dla nas proces CI/CD. Cały proces deploymentu aplikacji będzie mógł być dzięki temu zautomatyzowany, a developerzy pracujący razem z nami nie będą musieli nawet instalować Copilota.
Aby zaincjalizować tworzenie pipeline wydajemy polecenie copilot pipeline init
.
zostaniemy zapytani o środowisko
oraz repozytorium kodu
Po chwili na dysku pojawią się dwa dodatkowe pliki z definicjami buildspec.yml oraz pipeline.yml.
Jeżeli jesteś, tak jak ja, niepoprawny politycznie, i nadal używasz brancha master zamiast main lub tworzysz proces dla jeszcze innego brancha musisz wyedytować plik pipeline.yml
# The manifest for the "pipeline-pipeline-blog-apprunner-copilot-pipeline" pipeline. # This YAML file defines your pipeline: the source repository it tracks and the order of the environments to deploy to. # For more info: https://aws.github.io/copilot-cli/docs/manifest/pipeline/ # The name of the pipeline. name: pipeline-pipeline-blog-apprunner-copilot-pipeline # The version of the schema used in this template. version: 1 # This section defines your source, changes to which trigger your pipeline. source: # The name of the provider that is used to store the source artifacts. # (i.e. GitHub, Bitbucket, CodeCommit) provider: GitHub # Additional properties that further specify the location of the artifacts. properties: branch: main repository: https://github.com/PrzemekMalak/blog-apprunner-copilot-pipeline # Optional: specify the name of an existing CodeStar Connections connection. # connection_name: a-connection # This section defines the order of the environments your pipeline will deploy to. stages: - # The name of the environment. name: test # Optional: flag for manual approval action before deployment. # requires_approval: true # Optional: use test commands to validate this stage of your build. # test_commands: [echo 'running tests', make test]
i zmienić branch:main
na, w poim przypadku, branch:master
Dodajemy zmiany do repozytorium, czyli standardowo git add .
git commit -m 'Pipeline'
git push
Następnym krokiem jest aktualizacja pipeline za pomocą polecenia copilot pipeline update
Tu musimy się na chwilę zatrzymać i zerknąć w to co widać na konsoli. Copilot tworzy dodatkowo połączenie do naszego konta na GitHub-ie i konieczne jest wykonanie przez nas autoryzacji dostępu do GitHub w konsoli AWS.
Po chwili wszystko powinno być gotowe.
Jeżeli wszystko do tej pory się powiodło, to możemy rozpocząć zmiany w kodzie. Zamieńmy jedną funkcję hello
func hello(w http.ResponseWriter, r *http.Request) { s := "Hello from App Runner. HostName: " + name() + " IP Address: " + ip() fmt.Fprintln(w, s) }
a następnie wypchnijmy wszsytko do repozytorium git add .
git commit -m 'Hello added'
git push
Możemy po chwili sprawdzić co dzieje się z naszym pipline CI/CD copilot pipeline show
oraz status samego deploymentu copilot pipeline status
To samo można oczywiście podejrzeć także w konsoli AWS.
Jeżeli wszystko po drodze się powiodło, to możemy sprawdzić jak teraz działa nasza aplikacja. Łączymy się więc z serwisem curl https://8bcwmhg6rh.eu-west-1.awsapprunner.com/
i sprawdzamy czy zwracana jest nowa zawartość.
Na końcu, jeżeli nie będziecie więcej używali zarówno aplikacji jak i procesu CI/CD to kasujemy je za pomocą poleceń copilot pipeline delete
oraz copilot app delete
.