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.