CI/CD¶
CI stands for "Continuous Integration" and CD stands for "Continuous Deployment".
The goal of CI/CD is to have a fully automated process of deploying new versions of AMY to a server. Currently it is only working for testing stage, but could be extended to production at some point, too.
During CI stage, the following happens:
- Code is pushed to GitHub.
- GitHub Actions runs tests.
- If tests pass, then a new Docker image is built and pushed to AWS Elastic Container Registry (ECR).
Then CD stage starts:
- A new version of AMY is deployed to testing stage.
The CI/CD pipeline is run by GitHub Actions. It
is defined in .github/workflows/cicd_develop.yml
(for develop
branch) file.
Note that there is another workflow .github/workflows/cicd_main.yml
that is run only
for the main
branch, but it doesn't contain any other steps (stages) than test
.
Stage details¶
Test¶
There is a separate test
stage for CI/CD defined in .github/workflows/test.yml
file
and included in the main cicd_develop.yml
file. It installs all the dependencies,
sets up database and runs tests.
Build¶
The build
stage is defined in .github/workflows/cicd_develop.yml
file. After logging
in to AWS ECR, it builds a Docker image and pushes it to AWS ECR with last commit hash
as a image tag.
Deploy¶
The deploy
stage is defined in .github/workflows/cicd_develop.yml
file. It is only
run when GitHub Actions is triggered by a push to develop
branch, either through
a PR merge or direct push.
Deployment uses an AWS Elastic Container Service (ECS)
task definition downloaded to a GitHub agent. Then this file has the image tag updated
to the one that was built in the build
stage. Then the task definition is uploaded to
AWS ECS and a new task is started.