6

Tôi đang cố gắng tự động hóa Đường ống triển khai cho đơn đăng ký của mình. Đây là kiến ​​trúc tự động hóa, tôi đã đưa ra: Automation ArchitectureMã AWSBuild/codePipeline với khung máy chủ

Như bạn thấy, tôi đang sử dụng codePipelinecodeBuild để tự động hóa việc triển khai của tôi. Phụ trợ của tôi dựa trên Serverless Framework, triển khai các hàm lambda khi kích hoạt lệnh sls deploy. Đây là lý do, tôi không sử dụng codeDeploy để triển khai truyền thống. buildspec.yml tập tin trông như thế này:

version: 0.1 

phases: 
    install: 
    commands: 
     – apt-get -y update 
     – npm install -g [email protected] 
    build: 
    commands: 
     – cd nj2jp/serverless && npm install 
    post_build: 
    commands: 
     – serverless deploy –verbose 

artifacts: 
    files: 
    – serverless.yml 
    discard-paths: yes 

Bây giờ, tôi có 3 câu hỏi liên quan đến CodeBuildserverless:

Câu hỏi 1: Lệnh sls deploy phụ thuộc vào một tập tin gọi là config.yml chứa các bí mật như mật khẩu db. Tệp này sẽ không được kiểm tra vào git. Bạn nghĩ gì là cách tốt nhất có thể để bao gồm config.yml trong codeBuild?

Câu hỏi 2:rollbacks có thể được thực hiện với AWS, nếu chúng ta phải triển khai các ứng dụng EC2 truyền thống sử dụng codeDeploy. Trong trường hợp không có máy chủ, chúng tôi không sử dụng mã số Dẫn dụng và không cần máy chủ cũng hỗ trợ các tính năng rollback. Làm thế nào để chúng tôi tận dụng rollback không có máy chủ trong số codePipeline?

Câu hỏi 3: Mã kích hoạtPipeline khi số Yêu cầu kéo xảy ra. Tôi thấy một số bài viết nói rằng, nó không được hỗ trợ bởi codePipeline. Nhưng những bài đăng đó từ năm ngoái, Yêu cầu kéo có được hỗ trợ bởi codePipeline không?

Hack câu trả lời (Không đúng, nhưng công trình Cần câu trả lời tốt hơn từ bạn..)

Trả lời 1: File config.yml thể được lưu trong một tin S3 xô và có thể được kéo đến codeBuild như một phần của thiết lập pre-build hoặc Chúng tôi có thể thêm tất cả bí mật vào các biến Env của CodeBuild. Tôi không thích tùy chọn thứ hai, vì tôi muốn có nhất quán trên tất cả các môi trường. Bất kỳ giải pháp tốt hơn cho vấn đề này?

Trả lời 2: Tôi không thể nghĩ ra một lỗi cho việc này. Tìm kiếm câu trả lời từ bạn.

Trả lời 3: Tôi đã xem qua một số bài đăng trên blog rằng sử dụng [APIGateway + Lambda + S3] để kích hoạt codePipeline cho các yêu cầu kéo. Nhưng tôi cảm thấy, tính năng này phải được cung cấp như một tính năng vượt trội. Có bất kỳ cập nhật nào trên codePipeline cho tính năng này không?

Trả lời

3

Câu hỏi 1

Nếu bạn muốn gắn bó với config.yml, thì cách duy nhất của bạn để làm cho nó hoạt động là thông qua hacks tương tự như những gì bạn đã làm vì nó không phải là phiên bản được kiểm soát.

Điều tôi đề nghị là để biến môi trường của bạn được lưu trữ trong Cửa hàng thông số EC2 mà bạn có thể tham chiếu trong CodeBuild buildspec.yml của mình. Các biến này có thể truy cập được trong serverless.yml của bạn bằng cách sử dụng ${env:VARIABLE_NAME}.

Để phát triển địa phương, bạn cũng nên sử dụng các biến môi trường thực tế so với lưu trữ chúng trong config.yml. Các công cụ như direnv thật tuyệt vời.

Câu hỏi 2

Bạn có thể làm rollbacks thủ công bằng cách chạy lại công việc CodeBuild trước. Tôi không thể nghĩ ra một cách dễ dàng để làm điều đó tự động như những gì CodeDeploy làm. Có thể một hàm Lambda có thể thực hiện một bài kiểm tra sau khi triển khai và nếu nó không thành công, nó có thể kích hoạt việc chạy lại công việc CodeBuild trước đó.

Câu hỏi 3

CodePipelines được gắn với một chi nhánh duy nhất để làm cho nó hoạt động trên các ngành PR, bạn phải làm hacks như bài viết mà bạn đề cập. Tôi đã sử dụng Cổng API + Lambda + CodeBuild (Không CodePipeline) để thực hiện việc này.

+0

Câu trả lời tuyệt vời !! Câu trả lời của bạn hoàn toàn hợp lý. Chỉ cần tò mò, Làm thế nào để bạn quản lý các môi trường (bí mật) trên các ngành khác nhau (prod, dev & stg). Tôi đang sử dụng tệp '.env' rõ ràng cho mỗi môi trường như' .env.prod', '.env.dev' và' .env.stg'. Tất cả những điều này không được kiểm tra vào git. –

+1

Bí mật của tôi đều được lưu trữ trong Cửa hàng thông số EC2. Nhà phát triển, dàn dựng và sản xuất của tôi đang sử dụng các tài khoản AWS riêng biệt. Vì vậy, tôi có thể dễ dàng sử dụng cùng tên biến mà không phải lo lắng về các xung đột. – dashmug

+0

Ah tốt đẹp !! Nhưng làm thế nào để bạn quản lý nó trong môi trường địa phương? Giống như nó sẽ là biến tương tự nhưng giá trị khác nhau. Bạn có phiên bản kiểm soát các tập tin env quá? Nếu có, điều đó có ý nghĩa. Tôi nghĩ, nó là tốt cho repos tư nhân. –

Các vấn đề liên quan