Thứ tư, 08/10/2014 | 00:00 GMT+7

Cách thực hiện kiểm tra tích hợp liên tục với Drone.io trên CoreOS và Docker

Muốn có một giải pháp tích hợp liên tục cài đặt tối thiểu? Ai sẽ không! Drone.io sử dụng containers Docker để chạy các thử nghiệm của bạn và hoạt động với GitHub , GitLab (tự lưu trữ và dựa trên dịch vụ) và Bitbucket .

Drone được xây dựng bằng Go và sử dụng Docker. Nó có thể được chạy bên trong chính một containers với rất ít cấu hình.

Tích hợp liên tục là thực tiễn phát triển của việc thực hiện các commit thường xuyên đối với cơ sở mã của bạn, đồng thời xây dựng và thử nghiệm khi bạn tiếp tục. Điều này nghĩa là mã mới sẽ (hy vọng) tích hợp nhanh chóng và dễ dàng cơ sở mã hiện có của bạn. Vì tích hợp liên tục yêu cầu bạn phải xây dựng và kiểm tra mã của bạn thường xuyên, nó sẽ đẩy nhanh quá trình phát triển nếu bạn có thể xây dựng và kiểm tra tự động. Drone làm điều này; nó tự động hóa quá trình xây dựng và thử nghiệm.

Drone kéo mã tự động từ repository Git được lưu trữ, sau đó chạy các tập lệnh bạn xác định. Bạn có thể chạy bất kỳ bộ thử nghiệm nào và yêu cầu nó báo cáo lại cho bạn qua email hoặc cho biết trạng thái bằng huy hiệu trong README của bạn. Tích hợp của Drone với Docker nghĩa là nó có thể hỗ trợ một số lượng lớn các ngôn ngữ bao gồm PHP, Node, Ruby, Go và Python. Mỗi thử nghiệm sẽ tạo ra một containers mới dựa trên các hình ảnh được chỉ định từ Cơ quan đăng ký công cộng Docker. Điều này nghĩa là sự hỗ trợ cho các ngôn ngữ và ngăn xếp phát triển sẽ chỉ tăng lên khi nhiều hình ảnh được tạo ra. Bạn thậm chí có thể tự làm để phù hợp với ứng dụng cụ thể của bạn !

Trong hướng dẫn này, ta sẽ xem xét cách ta có thể chứa Drone.io để nó có thể chạy bằng CoreOS phân phối Linux tối thiểu.

Yêu cầu

  • Đã thêm ít nhất một SSH key vào account của bạn
  • Một server CoreOS Beta duy nhất (RAM 512 MB sẽ hoạt động tốt)

Bạn nên đọc phần Giới thiệu về CoreOS này trước khi tiếp tục nếu bạn chưa từng sử dụng hệ điều hành trước đây.

Nếu bạn không chắc chắn về cách cấu hình CoreOS bằng file cloud-config , bạn có thể tìm thêm thông tin, cùng với file cấu hình mẫu, tại đây ! Tệp cấu hình mẫu sẽ hoạt động cho hướng dẫn này.

Bước một - Chuẩn bị GitHub

Trước khi bắt đầu, ta cần bật quyền truy cập vào account GitHub của bạn qua oAuth. Ta sẽ tạo một cặp mã thông báo để sử dụng trong bước tiếp theo của việc cài đặt containers Drone.

Ta cần tạo các giá trị này từ account GitHub của bạn. Nhấp vào đây để chuyển đến trang cài đặt thích hợp trên GitHub, được gọi là Ứng dụng .

Nhấp vào nút Đăng ký ứng dụng mới ở phía trên bên phải. Điều này sẽ hiển thị một biểu mẫu mới để điền vào:

Đăng ký OAuth

Thêm tên ứng dụng của bạn. URL Trang chủ phải là http://YOUR_DROPLET_IP:8080/ . Thêm mô tả ứng dụng của bạn.

QUAN TRỌNG : Đảm bảo URL gọi lại Ủy quyền được đặt thành http://YOUR_DROPLET_IP:8080/api/auth/github.com để xác thực đúng cách!

Khi bạn đã cài đặt xong, hãy nhấp vào Đăng ký ứng dụng để được đưa đến trang thông tin của ứng dụng mới.

Bạn cần hai bit thông tin từ đây, ID khách hàngBí mật khách hàng . (Thực sự giữ bí mật cho khách hàng! Đây KHÔNG phải là điều bạn nên chia sẻ với bất kỳ ai!)

Các mã thông báo này sẽ được sử dụng để cho phép ứng dụng Drone của riêng ta thêm webhook vào bất kỳ repository GitHub nào mà ta thêm vào Drone thông qua console Dashboard .Webhooks sẽ kích hoạt trên mọi commit mới mà ta đẩy lên GitHub và điều này sẽ khiến Drone sao chép các thay đổi mới và chạy bản dựng.

Hãy ghi lại những mã thông báo này, vì ta cần chúng trong bước tiếp theo.

Bước hai - Viết Dockerfile

Khi bạn đã có sẵn CoreOS Server của bạn , hãy kết nối với nó qua SSH:

ssh -A core@YOUR_DROPLET_IP 

Tạo một folder mới có tên là droneio :

mkdir droneio cd droneio 

Do tính chất chỉ đọc của hệ thống file root của CoreOS, ta không thể cài đặt Drone.io trực tiếp. Trước tiên, ta cần chứa nó bằng Docker. Ta sẽ cài đặt một Dockerfile chứa hướng dẫn cài đặt Drone.io giống như ta làm trên hệ thống Ubuntu cổ phiếu.

Ta sẽ sử dụng soạn thảo văn bản terminal dựa trên vim trong phần này. Đây là editor mặc định trên CoreOS nên điều quan trọng là bạn phải tự làm quen với nó. Ta sẽ chỉ cho bạn từng bước cách sử dụng nó để mở và chỉnh sửa file .

Bây giờ đã đến lúc sử dụng vim để tạo Dockerfile của ta . Chạy lệnh:

vim Dockerfile 

Thao tác này sẽ mở vim và tạo một file mới có tên Dockerfile trong folder hiện tại của bạn.

Bây giờ vào chế độ chèn . Để thực hiện việc này, hãy nhấn phím i . Góc dưới cùng bên trái của terminal bây giờ sẽ nói: -- INSERT -- . Đến đây bạn có thể nhập hoặc dán nội dung Dockerfile.

Đây là toàn bộ Dockerfile. Comment có trong dòng cho mỗi phần. Bạn có thể sao chép chính xác file này:

# Pull from base Ubuntu image FROM ubuntu  # Do system updates and install dependencies RUN apt-get update RUN apt-get -y upgrade RUN sudo apt-get -y install git wget RUN apt-get clean  # Download Drone.io RUN wget http://downloads.drone.io/master/drone.deb RUN dpkg -i drone.deb  # Expose the Drone.io port EXPOSE 8080  ENV DRONE_SERVER_PORT 0.0.0.0:8080 ENV DRONE_DATABASE_DATASOURCE /var/lib/drone/drone.sqlite  # Define our GitHub oAuth keys below ENV DRONE_GITHUB_CLIENT <CLIENT_TOKEN_HERE> ENV DRONE_GITHUB_SECRET <CLIENT_SECRET_HERE>  # The command we'll be running when the container starts CMD /usr/local/bin/droned 

Thay thế <CLIENT_TOKEN_HERE><CLIENT_SECRET_HERE> bằng các mã được lưu ý từ bước trên.

Nhập lệnh bên dưới để lưu các thay đổi mà ta đã thực hiện. w yêu cầu vim ghi văn bản vào file và q sẽ khiến vim thoát ra.

:wq 

Tổng quan rất nhanh cho những người không quen thuộc với Dockerfiles:

  • FROM - Hình ảnh ta sẽ sử dụng cho containers của bạn
  • RUN - Chạy lệnh bên trong containers trong quá trình xây dựng
  • EXPOSE - Cho phép truy cập (các) cổng được chỉ định bên ngoài containers
  • CMD - Lệnh sẽ chạy khi khởi động containers
  • ENV - Đặt giá trị của một biến môi trường trong containers , được sử dụng ở đây cho cấu hình Drone

Để biết thêm thông tin về các loại câu lệnh bạn có thể thực hiện trong Dockerfiles, hãy đọc tài liệu Docker chính thức .

Đến đây, ta có thể xây dựng hình ảnh bằng lệnh sau:

docker build -t my_drone . 

Quá trình này sẽ mất vài phút để hoàn thành. Khi nó xây dựng thành công, ta có thể quay một containers bằng hình ảnh mới của ta .

Bước hai - Chạy Bộ chứa Drone

Drone.io cần một nơi để lưu trữ thông tin, vì vậy ta sẽ sử dụng file database SQLite. Tạo một file trống để bắt đầu với:

touch drone.sqlite 

Tệp này sẽ được Drone điền dữ liệu sau khi containers được cài đặt và chạy.

Việc chạy Drone khá đơn giản, nhưng ta cần thực hiện thêm một số bước đảm bảo rằng Drone có thể truy cập server Docker của server lưu trữ của ta . Cách dễ nhất để thực hiện việc này là sử dụng một ổ đĩa để liên kết file socket server với vị trí chứa file socket của containers . Lệnh để khởi động containers đúng cách như sau:

docker run -d --name="drone-ci" \     -p 8080:8080 \     -v /var/lib/drone/ \     -v /var/run/docker.sock:/var/run/docker.sock \     -v /home/core/droneio/drone.sqlite:/var/lib/drone/drone.sqlite \     my_drone 

Đi từng dòng một, ta hãy phân biệt chính xác những gì đang diễn ra:

  • docker run -d --name="drone-ci" - Trong phần này của lệnh, ta yêu cầu Docker chạy containers này ở chế độ nền, vì vậy ta không phải lo lắng về việc nó sẽ chết nếu ta ngắt kết nối khỏi SSH phiên họp. Ta cũng đặt cho nó một cái tên thân thiện là drone-ci , vì vậy ta có thể quản lý nó bằng lệnh docker .

  • -p 8080:8080 - Ở đây ta liên kết cổng 8080 từ server của ta vào cùng một cổng trong containers . Điều này cho phép ta truy cập giao diện của Drone bên ngoài mạng của containers đang chạy.

  • -v /var/lib/drone - Điều này cài đặt một dung lượng để lưu trữ trong containers .

  • -v /var/run/docker.sock:/var/run/docker.sock - Đây là thủ thuật cho phép containers Drone.io điều khiển hệ thống Docker của server . Ta đang liên kết vị trí của containers nơi có socket Docker UNIX với socket Docker UNIX của server thực tế. Nói cách khác, ta đang yêu cầu Drone sử dụng cài đặt Docker trên CoreOS server của ta , không phải bên trong containers mà Drone đang chạy. Điều này là do server đã được cài đặt Docker và containers thì không (nghĩa là containers Docker không chạy cài đặt Docker lồng nhau).

  • -v /home/core/droneio/drone.sqlite:/var/lib/drone/drone.sqlite \ - Liên kết file lưu trữ trống với database bên trong containers để giữ dữ liệu ta lưu trữ trong đó. Tệp này nằm ngoài containers trong trường hợp ta cần khôi phục dữ liệu từ nó hoặc database cần được sửa đổi bên ngoài vì lý do nào đó.

  • my_drone - Ta đang sử dụng hình ảnh mà ta đã tạo trước đó để chạy containers này.

Sau khi bạn thực hiện lệnh đó, nếu có bất kỳ lỗi nào xảy ra, hãy đảm bảo kiểm tra kỹ xem bạn đã tạo file database trống chưa và tất cả các đường dẫn đã được nhập chính xác chưa.

Để đảm bảo containers đang chạy, hãy kiểm tra nhanh trạng thái:

docker ps 

Đầu ra của bạn sẽ trông giống như sau:

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                             NAMES 6eddddd09900        my_drone:latest    "/bin/sh -c '/usr/lo   1 seconds ago       Up 1 seconds        0.0.0.0:8080->8080/tcp            drone-ci 

Vùng chứa của tôi không bắt đầu!

Nếu bạn đã chạy docker ps và không có kết quả, vui lòng kiểm tra lại lệnh docker run dài từ phía trên và đảm bảo bạn đã nhập chính xác. Bạn có thể thử chạy nó mà không bị ngắt dòng. Đồng thời đảm bảo bạn đã tạo file drone.sqlite trống trong đúng folder .

Để xây dựng lại containers và thử lại, ta cần xóa containers bị hỏng khỏi Docker; nếu không, nó sẽ phàn nàn về các containers có tên trùng lặp.

Loại bỏ containers cũ bằng cách sử dụng docker rm drone-ci ( lưu ý ta đã sử dụng tên mà ta đã đặt cho containers trong lệnh trên). Sau đó, hãy thử chạy lại lệnh docker run dài từ phần trước.

Nếu containers đã khởi động nhưng bạn không thể truy cập trang cài đặt, thì bạn nên thử khởi động lại nó. Dừng container bằng cách sử dụng docker stop drone-ci . Hoặc để dừng lại mạnh mẽ hơn, hãy sử dụng docker kill drone-ci . Sau đó, hãy thử khởi động lại bằng docker start drone-ci .

Nếu bạn muốn đào một số log containers , bạn có thể sử dụng lệnh docker logs drone-ci : docker logs drone-ci .

Bước 3 - Cài đặt Drone

Bây giờ ta đã sẵn sàng để cài đặt Drone với account ban đầu. Mở trình duyệt web và chuyển đến: http://YOUR_DROPLET_IP:8080/login . Bạn sẽ thấy một màn hình đăng nhập như bên dưới:

Đăng nhập Drone.io

Ta chỉ thấy GitHub vì đó là dịch vụ duy nhất mà ta đặt trong Dockerfile.

Bây giờ hãy nhấp vào nút GitHub , sau đó là nút Ủy quyền ứng dụng để bắt đầu quá trình đăng nhập và đồng bộ hóa.

Danh sách Repo

Đây là trang tổng quan chính của Drone, bạn có thể xem ba repository mới nhất trong account GitHub của bạn và mở rộng danh sách bằng cách nhấp vào “XÓA TẤT CẢ”. Nếu tất cả repo của bạn không xuất hiện, chỉ cần nhấp vào “SYNC” ở góc trên bên phải.

Hãy khám phá console .

Tiếp theo, ta cần cho phép truy cập vào các nguồn repository Git khác nhau của bạn.

Bước 5 - Chạy các bản dựng từ GitHub

Tìm tên của repository bạn muốn thêm vào Drone CI và chọn nó. Thao tác này sẽ kích hoạt Drone và thêm webhook vào repository của bạn.

Sau khi kích hoạt, bạn sẽ thấy trang trạng thái repository trống:

Luồng  commit

Bạn có thể khám phá một số cài đặt nâng cao hơn cho repository bằng cách sử dụng nút ở góc trên bên phải.

Tệp .drone.yml

Ta cần tạo một file mới trong repository lưu trữ có tên .drone.yml . Thao tác này sẽ ra lệnh cho Drone và cho nó biết cách xây dựng và kiểm tra mã trong repository lưu trữ GitHub. Đây là một file rất đơn giản mà ta sẽ sử dụng để kiểm tra xem Drone có được cài đặt đúng cách hay không.

image: dockerfile/nginx script:   - echo hello world 
  • image xác định image cơ sở mà ta đang lấy từ đó (hình ảnh có thể từ register Docker công khai, register riêng tư hoặc được xây dựng local ). Trong trường hợp này, ta đang sử dụng hình ảnh Nginx.
  • script chỉ đơn giản là xác định các lệnh mà Drone nên thực hiện và theo thứ tự nào. Bạn có thể xác định nhiều hơn một lệnh script bằng một lệnh khác - <command here> trên một dòng mới. (Đảm bảo rằng các tab thẳng hàng!)

Tập lệnh này chỉ lặp lại "hello world" để chứng minh rằng Drone đang hoạt động. Nó không thực sự kiểm tra bất kỳ điều gì về mã của bạn.

Trong một kịch bản xây dựng và thử nghiệm thực tế, bạn muốn Drone sử dụng Docker image phù hợp với môi trường production của bạn và bạn muốn các tập lệnh kiểm tra mã trong repository lưu trữ.

Bây giờ, commit file .drone.yml của bạn vào repository của bạn. Commit này và bất kỳ commit nào khác mà bạn thực hiện trong tương lai (đối với các file nào, không chỉ file .drone.yml ), sẽ kích hoạt Drone webhook được đặt trong repository lưu trữ của bạn. Drone bây giờ phải làm việc chăm chỉ để kéo hình ảnh cơ sở và chạy các tập lệnh xây dựng của bạn!

Drone sẽ phát hiện commit mới, sao chép bất kỳ thay đổi nào được thực hiện đối với mã và làm theo hướng dẫn được xác định trong file .drone.yml . Nó sẽ hiển thị một thông báo ở cuối trang để cho bạn biết bản dựng đang chạy, hãy nhấp vào nó để xem trang trạng thái bản dựng.

Nhân viên bay không người lái

Quá trình xây dựng sẽ mất vài phút vì Drone cần lấy hình ảnh từ register công khai Docker.

Nếu bản dựng vượt qua, bạn có thể nhấp vào commit để xem thêm chi tiết. Bạn sẽ thấy kết quả tương tự như sau:

$ git clone --depth=50 --recursive --branch=master git://github.com/captainshar/dronetest.git /var/cache/drone/src/github.com/captainshar/dronetest $ git checkout -qf 9908588ae4e4abcba8afb5029baad5c49a835ba4 $ echo hello world hello world $ exit 0 

Bạn cũng có thể thấy một vài cảnh báo liên quan đến Perl; Tốt rồi.

Nếu bạn đã hoàn thành tất cả các bước này và quá trình xây dựng của bạn vượt qua, giờ đây bạn đã có nhân viên Drone.io cá nhân của riêng mình sẵn sàng xây dựng và kiểm tra hầu hết mọi dự án dựa trên ngôn ngữ!

Drone cũng hỗ trợ Bitbucket và GitLab, và các quy trình cài đặt sử dụng OAuth tương đối giống với Github. Bạn có thể cần chỉnh sửa Dockerfile và xây dựng lại containers bằng cách sử dụng các biến môi trường chính xác:

DRONE_BITBUCKET_CLIENT DRONE_BITBUCKET_SECRET DRONE_GITLAB_URL ... 

Bước tiếp theo

Đến đây bạn đã có Drone sẵn sàng để chạy các bản dựng, bạn có thể sửa đổi .drone.yml để thực hiện một số thử nghiệm nâng cao hơn.

Ví dụ: nếu bạn muốn kiểm tra một ứng dụng Node bằng khung kiểm tra như Karma hoặc Mocha, bạn có thể thay đổi phần image node chính thức và thay đổi phần tập lệnh để thực thi npm và chạy thử nghiệm! Hãy xem qua register Docker để biết những hình ảnh có thể phù hợp với ứng dụng của bạn.

Nếu bạn muốn thực sự ưa thích, bạn có thể xem xét một thứ gọi là Drone Wall để cung cấp bảng hiển thị tất cả các trạng thái xây dựng của bạn.

Hãy vui vẻ khi chỉ huy Drone của bạn!


Tags:

Các tin liên quan