CI, CD với TravisCI và AWS Elastic Beanstalk
Có rất nhiều công cụ để sử dụng cho việc CI, CD một dự án, ở bài viết này chúng ta sẽ cùng tìm hiểu về cách để làm việc với TravisCI.
1. Tìm hiểu về TravisCI
Travis là một dịch vụ (service) CI, miễn phí và là open source. Trong đó CI là viết tắt của từ Continuous Integrantion, nghĩa là tích hợp liên tục.
Travis CI cùng đã từng được giới thiệu ở blog vietnamlab. Các bạn có thể tham khảo thêm ở đây.
2. Tìm hiểu về AWS Elastic Beanstalk
AWS Elastic Beanstalk là một dịch vụ dễ sử dụng để triển khai và mở rộng các ứng dụng web và dịch vụ . Bạn có thể dễ dàng tải mã của bạn lên và Elastic Beanstalk sẽ tự động xử lý việc triển khai, từ cung cấp công suất, cân bằng tải, tự động điều chỉnh quy mô đến giám sát trạng thái ứng dụng. Đồng thời, bạn vẫn có toàn quyền kiểm những tài nguyên AWS vận hành ứng dụng của bạn và có thể truy cập các tài nguyên quan trọng vào bất kỳ lúc nào.
Nói một cách đơn giản thì EB giống như một dịch vụ giúp bạn tự động sử dụng các dịch vụ khác của AWS như EC2, VPC, S3 v.v...
3. Thiết lập Elastic Beanstalk
3.1 Thiết lập permission cho user.
Ở service IAM, chúng ta thêm permission AWSElasticBeanStalkFullAccess.
3.2 Tạo application và enviroment
Truy cập vào link này. Chọn platform và chọn Create enviroment. Ở đây chúng ta sẽ chọn docker. Ở mục Application code tạm thời chọn Sample application. Chúng ta sẽ dùng TravisCI để update version lại sau. Ở bước này chúng ta sẽ phải memo lại một số thông tin như application name, và enviroment name để cung cấp cho quá trình deploy ở Travis.
3.3 Memo lại bucket name
Truy cập dịch vụ S3. Lưu lại bucket name của bucket vừa được tạo ra bởi EB.
3.4 Thiết lập file Dockerrun.aws.json
Ở thư mực gốc của dự án. Chúng ta sẽ tạo một file Dockerrun.aws.json. Có nội dung như sau:
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "ltdat1095/backend:latest",
"Update": "true"
},
"Ports": [
{
"ContainerPort": 8080,
"HostPort": 8080
}
]
}
Với name sẽ là tên của image đã được build và push lên dockerhub.
3.5 Thiết lập file travis
Ở thư mục gốc của dự án. Chúng ta tạo file .travis.yml với nội dung như sau
dist: bionic
sudo: required
services:
- docker
notifications:
email: false
script:
- docker build -t $DOCKER_ID/backend:latest -f ./ops/production/Dockerfile .
after_success:
- echo "$DOCKER_PASS" | docker login -u $DOCKER_ID --password-stdin
- docker push $DOCKER_ID/backend:latest
deploy:
edge: true
provider: elasticbeanstalk
region: ap-southeast-1
app: $AWS_EB_APP
env: $AWS_EB_ENV
bucker_name: $AWS_BUCKER_NAME
bucker_path: backend
on:
branch : master
access_key_id: $AWS_ACCESS_ID
secret_access_key: $AWS_ACCESS_SECRET
Với đoạn code trên kịch bản deploy của chúng ta sẽ là:
- Build docker image với
- Push docker image đó lên docker hub
- Deploy lên EB với các thông số đã thu được ở các bước trước đó.
3.6 Thiết lập các biến môi trường cho Travis
Ở Dashboard của Travis, click chọn More Options -> Settings và thêm các biến môi trường đã thu được vào Travis.
Đến đây thì mọi thứ đã xong chúng ta chỉ cần push code lên nhánh master và chờ Travis, EB làm hết phần việc còn lại nữa thôi
4. Tham khảo:
https://blog.vietnamlab.vn/2017/03/17/tim-hieu-travis-ci-github-voi-project-php/