Thứ ba, 11/07/2017 | 00:00 GMT+7

Cách thiết lập đường ống tích hợp liên tục với Concourse CI trên Ubuntu 16.04

Concourse CI là một hệ thống tích hợp liên tục hiện đại, có thể mở rộng được thiết kế để tự động hóa các đường ống thử nghiệm với cú pháp khai báo, có thể tổng hợp. Trong các hướng dẫn trước, ta đã cài đặt Concourse trên server Ubuntu 16.04bảo mật giao diện user web bằng certificate SSL từ Let's Encrypt .

Trong hướng dẫn này, ta sẽ trình bày cách sử dụng Concourse để tự động chạy bộ thử nghiệm dự án của bạn khi các thay đổi mới được commit với repository . Để chứng minh, ta sẽ cấu hình một đường dẫn tích hợp liên tục cho ứng dụng “hello world” được viết bằng Hapi.js , một khung công tác web Node.js.

Để đảm bảo các quy trình xây dựng và kiểm tra luôn được giữ đồng bộ với mã mà chúng được liên kết, ta sẽ thêm các định nghĩa CI vào chính kho ứng dụng. Sau đó, ta sẽ sử dụng công cụ dòng lệnh fly của Concourse để tải đường ống vào Concourse. Cuối cùng, ta sẽ đẩy các thay đổi của bạn trở lại repository để vừa lưu chúng lâu dài hơn vừa để bắt đầu thử nghiệm mới trong quy trình làm việc CI mới.

Yêu cầu

Trước khi bắt đầu, bạn cần một server Ubuntu 16.04 với ít nhất 1G RAM . Hoàn thành các hướng dẫn sau để cài đặt user không phải root, cài đặt và cấu hình Concourse, cài đặt Nginx, lấy certificate TLS / SSL và cài đặt Reverse Proxy an toàn cho giao diện user web Concourse. Bạn cần một tên domain được trỏ đến server Concourse của bạn để bảo mật đúng cách:

Trong hướng dẫn này, hầu hết công việc sẽ được hoàn thành trên máy tính local của bạn chứ không phải server Concourse. Do đó, bạn cũng cần đảm bảo một số công cụ có sẵn trên máy local của bạn . Bạn cần một editor (một số ví dụ bạn có thể tìm thấy trên các hệ điều hành khác nhau là nano , vim , TextEdit, Sublime Text, Atom hoặc Notepad) để tạo và sửa đổi các file trong repository lưu trữ. Bạn cũng cần cài đặt và cài đặt Git trên hệ thống local của bạn , bạn có thể thực hiện điều này theo hướng dẫn Đóng góp cho Nguồn mở: Bắt đầu với Git của ta .

Khi bạn đã cài đặt server Concourse của bạn và cài đặt Git và editor trên máy tính local của bạn , hãy tiếp tục bên dưới.

Cài đặt local công cụ dòng lệnh Fly

Khi ta cài đặt Concourse trên server trong yêu cầu , ta đã cài đặt công cụ dòng lệnh fly trên server để ta có thể quản lý cá thể Concourse từ dòng lệnh. Tuy nhiên, để sử dụng hàng ngày, sẽ thuận tiện hơn khi cài đặt một bản sao của fly binary trên hệ thống local của bạn, nơi có sẵn các công cụ phát triển và mã nguồn thông thường của bạn.

Để nhận bản sao fly local trùng với version server của bạn, hãy truy cập version Concourse trong trình duyệt web :

https://your_concourse_url 

Nếu bạn đã đăng xuất hoặc nếu bạn chưa cấu hình đường dẫn, các liên kết để download fly cho các nền tảng khác nhau sẽ được hiển thị ở giữa cửa sổ:

Liên kết  download  lớn của Concourse bay

Nếu bạn đã đăng nhập và đã cấu hình đường dẫn, các liên kết download fly sẽ có sẵn ở góc dưới bên phải của màn hình:

Liên kết  download  phòng họp bay nhỏ

Nhấp vào biểu tượng đại diện cho hệ điều hành máy tính local của bạn để download file binary fly .

Tiếp theo, hãy làm theo hướng dẫn cụ thể của nền tảng để cài đặt fly trên hệ thống local của bạn.

Linux hoặc macOS

Nếu máy tính local của bạn chạy Linux hoặc macOS, hãy làm theo các hướng dẫn này sau khi download file binary thích hợp.

Đầu tiên, đánh dấu file binary đã download là file thực thi. Ta sẽ giả định bạn đã tải file xuống folder ~/Downloads , vì vậy hãy điều chỉnh vị trí download nếu cần:

  • chmod +x ~/Downloads/fly

Tiếp theo, cài đặt binary vào một vị trí trong PATH của bạn bằng lệnh :

  • sudo install ~/Downloads/fly /usr/local/bin

Bạn có thể xác minh file thực thi có sẵn bằng lệnh :

  • fly --version
Output
3.3.1

Nếu bạn có thể hiển thị version , fly đã được cài đặt thành công.

các cửa sổ

Nếu máy tính local của bạn chạy Windows, hãy nhấn phím Windows trên bàn phím, nhập powershell và nhấn ENTER .

Trong cửa sổ xuất hiện, hãy tạo một folder bin bằng lệnh :

  • mkdir bin

Tiếp theo, di chuyển file fly.exe từ folder Downloads của bạn sang folder bin mới bằng lệnh :

  • mv Downloads/fly.exe bin

Kiểm tra xem bạn đã có cấu hình PowerShell chưa:

  • Test-Path $profile

Nếu câu trả lời là True , bạn đã có một profile .

Nếu phản hồi là False , bạn cần tạo một phản hồi bằng lệnh :

  • New-Item -path $profile -type file -force
Output
Directory: C:\User\Sammy\Documents\WindowsPowerShell Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/9/2017 5:46 PM 0 Microsoft.PowerShell_profile.ps1

Sau khi bạn có một profile , hãy chỉnh sửa nó bằng editor :

  • notepad.exe $profile

Trong cửa sổ editor (sẽ trống nếu bạn phải tạo profile của bạn ), hãy thêm dòng sau:

Microsoft.PowerShell_profile.ps1
$env:path += ";C:\Users\Sammy\bin" 

Lưu file khi bạn hoàn tất.

Tiếp theo, đặt policy thực thi thành “RemoteSigned” cho user hiện tại để cho phép PowerShell đọc profile :

  • Set-ExecutionPolicy -scope CurrentUser RemoteSigned

Cuối cùng, nguồn cấu hình PowerShell bằng lệnh :

  • . $profile

Đến đây bạn có thể gọi file thực thi fly.exe từ bất kỳ vị trí nào. Kiểm tra điều này bằng cách để bản binary in version của nó:

  • fly.exe --version
Output
3.3.1

Trong suốt hướng dẫn này, bạn cần thay thế từng version của lệnh fly bằng fly.exe để trùng với lệnh Windows.

Xác thực với Server Phòng chờ

Sau khi cài đặt fly , hãy đăng nhập vào server Concourse từ xa của bạn để bạn có thể quản lý local môi trường CI của bạn . Một file binary fly đơn lẻ được dùng để liên hệ và quản lý nhiều server Concourse, do đó, lệnh sử dụng khái niệm gọi là “mục tiêu” làm nhãn để xác định server bạn muốn gửi lệnh.

Ta đang sử dụng main làm tên đích cho server Concourse của ta trong hướng dẫn này, nhưng bạn có thể thay thế bất kỳ tên đích nào bạn muốn. Nhập domain của server Concourse của bạn hoàn chỉnh với đặc tả giao thức https:// sau tùy chọn -c để chỉ ra vị trí server của bạn:

  • fly -t main login -c https://example.com

Bạn sẽ được yêu cầu nhập tên user và password mà bạn đã cấu hình trong file /etc/concourse/web_environment trên server Concourse:

Output
logging in to team 'main' username: sammy password: target saved

Khi bạn đã xác thực, công cụ fly sẽ tạo một file cấu hình có tên ~/.flyrc để lưu trữ thông tin đăng nhập của bạn cho các lệnh trong tương lai.

Lưu ý: Nếu bạn nâng cấp version Concourse sau này, bạn có thể cài đặt version phù hợp của lệnh fly bằng lệnh :

  • fly -t main sync

Thao tác này sẽ cập nhật file binary fly trên hệ thống của bạn trong khi vẫn giữ nguyên cấu hình của bạn.

Nhân bản và sao chép Kho lưu trữ Ví dụ

Đến đây bạn đã fly cài đặt trên hệ thống của bạn, ta có thể chuyển sang thành lập kho ta sẽ được sử dụng để chứng minh đường ống Concourse.

Trong trình duyệt web , hãy truy cập ứng dụng “hello hapi” trên GitHub mà ta sẽ lấy làm ví dụ. Ứng dụng này là một chương trình “chào thế giới” đơn giản với một vài bài kiểm tra đơn vị và tích hợp, được viết bằng Hapi.js , một khung công tác web Node.js.

Vì ví dụ này được sử dụng để chứng minh nhiều hệ thống tích hợp liên tục, bạn có thể nhận thấy một số file được dùng để xác định đường ống cho các hệ thống khác. Đối với Concourse, ta sẽ tạo đường ống tích hợp liên tục trong nhánh repository của riêng ta .

Để tạo nhánh của repository , hãy đăng nhập vào GitHub và chuyển đến kho dự án . Nhấp vào nút Fork ở góc trên bên phải để tạo bản sao của repository trong account của bạn:

xin chào kho fork hapi

Nếu bạn là thành viên của tổ chức GitHub, bạn có thể được hỏi nơi bạn muốn chuyển repository . Khi bạn chọn một account hoặc tổ chức, một bản sao của repository sẽ được thêm vào account của bạn.

Tiếp theo, trong một terminal trên máy tính local của bạn, hãy chuyển đến folder chính của bạn:

  • cd $HOME

Sao chép repository vào máy tính local của bạn bằng lệnh sau, thay thế tên user GitHub của bạn :

  • git clone git@github.com:your_github_user/hello_hapi

Một folder mới có tên hello_hapi sẽ được tạo trong folder chính của bạn. Nhập folder mới để bắt đầu:

  • cd hello_hapi

Ta sẽ xác định một đường ống tích hợp liên tục cho dự án ví dụ bên trong repository lưu trữ này. Trước khi thực hiện bất kỳ thay đổi nào, bạn nên tạo và chuyển sang một nhánh mới trong Git để tách biệt các thay đổi của ta :

  • git checkout -b pipeline
Output
Switched to a new branch 'pipeline'

Bây giờ ta có một chi nhánh mới để làm việc, ta có thể bắt đầu xác định quy trình tích hợp liên tục của bạn .

Cài đặt Quy trình Tích hợp Liên tục cho Ứng dụng

Ta sẽ xác định đường dẫn của bạn và tất cả các file liên quan của nó trong chính repository dự án. Điều này giúp đảm bảo các quy trình tích hợp liên tục luôn được giữ đồng bộ với mã mà nó kiểm tra.

Bộ thử nghiệm đã được xác định trong một folder được gọi là test . Nó bao gồm một bài kiểm tra đơn vị và hai bài kiểm tra tích hợp cơ bản. Lệnh chạy các bài kiểm tra được xác định trong file package.json dưới tên test trong đối tượng scripts . Trong môi trường có cài đặt npm và Node.js, bạn có thể chạy các bài kiểm tra bằng lệnh npm test (sau khi cài đặt các phụ thuộc dự án với npm install ). Đây là những quy trình mà ta cần để nhân rộng trong đường dẫn của bạn .

Để bắt đầu, hãy tạo một folder có tên là ci trong repository lưu trữ để chứa các tài sản tích hợp liên tục cho dự án. Ta cũng sẽ tạo hai folder con được gọi là ci/tasksci/scripts để chứa các định nghĩa nhiệm vụ riêng lẻ mà đường ống tham chiếu và các tập lệnh mà các việc gọi.

Tạo cấu trúc folder cần thiết bằng lệnh :

  • mkdir -p ci/{tasks,scripts}

Tiếp theo, ta có thể bắt đầu tạo các file riêng lẻ mà Concourse sẽ sử dụng.

Xác định đường ống

Tạo và mở một file có tên là pipeline.yml trong folder ci bằng editor của bạn ( ta sẽ hiển thị editor nano trong hướng dẫn này, nhưng bạn nên thay thế editor cho hệ thống của bạn ). Như phần mở rộng chỉ ra, file Concourse được xác định bằng cách sử dụng định dạng tuần tự hóa dữ liệu YAML :

  • nano ci/pipeline.yml

Bây giờ ta có thể bắt đầu cài đặt đường dẫn của bạn .

Xác định loại tài nguyên cache NPM

Bên trong file , ta sẽ bắt đầu bằng cách xác định một loại tài nguyên mới:

ci / pipe.yml
--- resource_types:   - name: npm-cache     type: docker-image     source:       repository: ymedlop/npm-cache-resource       tag: latest 

Để tách các quy trình trong tích hợp liên tục khỏi dữ liệu đi qua hệ thống, Concourse chuyển tải tất cả thông tin trạng thái thành các phần trừu tượng được gọi là tài nguyên . Tài nguyên là các nguồn dữ liệu bên ngoài mà Concourse có thể sử dụng để lấy thông tin từ hoặc đẩy thông tin đến. Đây là cách tất cả dữ liệu đi vào hệ thống tích hợp liên tục và cách tất cả dữ liệu được chia sẻ giữa các công việc. Concourse không cung cấp bất kỳ cơ chế nào để lưu trữ hoặc chuyển trạng thái nội bộ giữa các công việc.

Tiêu đề resource_types cho phép bạn xác định các loại tài nguyên mới mà bạn có thể sử dụng trong đường dẫn của bạn như thông báo qua email, tích hợp Twitter hoặc nguồn cấp dữ liệu RSS. Loại tài nguyên mới mà ta đang xác định cho Concourse biết cách sử dụng npm-cache-resource , một tài nguyên được cung cấp dưới dạng Docker image cho phép Concourse cài đặt các phụ thuộc của dự án Node.js và chia sẻ chúng giữa các công việc.

Xác định Tài nguyên Kho lưu trữ và Bộ nhớ đệm

Tiếp theo, ta cần xác định các tài nguyên thực tế cho đường ống:

ci / pipe.yml
. . .  resources:   - name: hello_hapi     type: git     source: &repo-source       uri: https://github.com/your_github_user/hello_hapi       branch: master   - name: dependency-cache     type: npm-cache     source:       <<: *repo-source       paths:         - package.json 

Phần này xác định hai tài nguyên mà các công việc Concourse CI cần để hoàn thành nhiệm vụ của chúng. Concourse sử dụng các định nghĩa tài nguyên để theo dõi các hệ thống ngược dòng để tìm các thay đổi và hiểu cách kéo tài nguyên xuống khi công việc yêu cầu chúng. Theo mặc định, Concourse kiểm tra từng tài nguyên cho các version mới mỗi phút một lần. Các công việc yêu cầu tài nguyên có đặt tùy chọn "kích hoạt" sẽ tự động bắt đầu một bản dựng mới khi có version mới.

Tài nguyên đầu tiên đại diện cho nhánh của repository hello_hapi trên GitHub. Dòng "nguồn" chứa ký tự liên kết YAML được gọi là "nguồn đại diện", nhãn này gắn nhãn phần tử để tham khảo trong tương lai. Điều này cho phép ta đưa nội dung của phần tử (định nghĩa “uri” và “nhánh”) vào một vị trí khác sau này trong tài liệu.

Tài nguyên thứ hai, được gọi là "bộ nhớ đệm phụ thuộc", sử dụng loại tài nguyên "npm- cache ẩn" mà ta đã xác định để download các phụ thuộc của dự án. Trong đặc tả "nguồn" của tài nguyên này, ta sử dụng dòng <<: *repo-source để tham chiếumở rộng các phần tử được trỏ đến bởi ký tự &repo-source . Thao tác này sẽ chèn cài đặt uri và chi nhánh từ tài nguyên kho ứng dụng của ta vào tài nguyên thứ hai này. Một phần tử bổ sung được gọi là "đường dẫn" trỏ đến file package.json nơi các phụ thuộc dự án được xác định.

Xác định công việc thu thập và kiểm tra dependencies

Cuối cùng, ta xác định các quy trình tích hợp liên tục thực tế bằng cách sử dụng các công việc Concourse:

ci / pipe.yml
. . .  jobs:   - name: Install dependencies     plan:       - get: hello_hapi         trigger: true       - get: dependency-cache   - name: Run tests     plan:       - get: hello_hapi         trigger: true         passed: [Install dependencies]       - get: dependency-cache         passed: [Install dependencies]       - task: run the test suite         file: hello_hapi/ci/tasks/run_tests.yml 

Trong phần này, ta xác định hai công việc, mỗi công việc bao gồm một tên và một kế hoạch. Lần lượt, mỗi kế hoạch của ta đều chứa các yếu tố “nhận được” và “nhiệm vụ”. Các mục tác vụ chỉ định cách thực hiện một hành động trong khi các mục nhận chỉ ra các phụ thuộc tài nguyên của tác vụ.

Công việc đầu tiên không có bất kỳ câu lệnh nhiệm vụ nào. Điều này hơi bất thường, nhưng có ý nghĩa khi ta xem xét những gì nó đang làm và cách nó được dùng . Câu lệnh get đầu tiên yêu cầu tài nguyên hello_hapi và chỉ định tùy chọn trigger: true . Điều này yêu cầu Concourse tự động tìm nạp repository và bắt đầu xây dựng mới công việc này mỗi khi phát hiện một commit mới trong repository lưu trữ hello_hapi .

Câu lệnh get thứ hai trong công việc đầu tiên ( get: dependency-cache ) yêu cầu tài nguyên mà ta đã xác định để download và lưu trữ các phụ thuộc Node.js của dự án. Câu lệnh này đánh giá các yêu cầu được tìm thấy trong file package.json và tải chúng xuống. Không có nhiệm vụ nào được xác định cho công việc này, không có hành động nào khác được thực hiện, nhưng các phần phụ thuộc đã download sẽ có sẵn cho các công việc tiếp theo.

Lưu ý : Trong ví dụ cụ thể này, chỉ có một công việc bổ sung duy nhất, do đó, lợi ích của việc lưu vào bộ nhớ đệm các phần phụ thuộc Node.js như một bước độc lập không được thực hiện đầy đủ (thêm các câu lệnh get vào công việc thử nghiệm sau đó là đủ để download các phụ thuộc). Tuy nhiên, hầu như tất cả các công việc với Node.js đều yêu cầu các phụ thuộc của dự án, vì vậy nếu bạn có các công việc riêng biệt có khả năng được thực hiện song song, thì lợi ích của cache phụ thuộc riêng sẽ trở nên rõ ràng hơn.

Công việc thứ hai ( name: Run tests ) bắt đầu bằng cách khai báo các phụ thuộc giống nhau với một điểm khác biệt đáng chú ý. Ràng buộc “đã qua” khiến các câu lệnh get chỉ trùng với các tài nguyên đã duyệt thành công các bước trước đó trong quy trình. Đây là cách mà dependencies giữa các công việc được hình thành để xâu chuỗi các quy trình đường ống với nhau.

Sau các câu lệnh get, một nhiệm vụ được gọi là “chạy bộ thử nghiệm” được xác định. Thay vì xác định các bước để hoàn thành nội tuyến, nó yêu cầu Concourse lấy định nghĩa từ một file trong repository lưu trữ mà nó đã tìm nạp. Ta sẽ tạo file này tiếp theo.

Khi bạn hoàn tất, đường dẫn hoàn chỉnh sẽ giống như sau:

ci / pipe.yml
--- resource_types:   - name: npm-cache     type: docker-image     source:       repository: ymedlop/npm-cache-resource       tag: latest  resources:   - name: hello_hapi     type: git     source: &repo-source       uri: https://github.com/your_github_user/hello_hapi       branch: master   - name: dependency-cache     type: npm-cache     source:       <<: *repo-source       paths:         - package.json  jobs:   - name: Install dependencies     plan:       - get: hello_hapi         trigger: true       - get: dependency-cache   - name: Run tests     plan:       - get: hello_hapi         trigger: true         passed: [Install dependencies]       - get: dependency-cache         passed: [Install dependencies]       - task: run the test suite         file: hello_hapi/ci/tasks/run_tests.yml 

Lưu file khi bạn hoàn tất.

Xác định Nhiệm vụ Kiểm tra

Trong khi định nghĩa đường ống phác thảo cấu trúc của quá trình tích hợp liên tục của ta , nó trì hoãn việc xác định nhiệm vụ thử nghiệm thực tế cho một file khác. Các việc extract giúp giữ cho định nghĩa đường ống ngắn gọn và dễ đọc hơn, nhưng yêu cầu bạn đọc nhiều file để hiểu toàn bộ quy trình.

Mở một file mới trong folder ci/tasks được gọi là run_tests.yml :

  • nano ci/tasks/run_tests.yml

Để xác định một tác vụ, bạn cần chỉ định loại hệ điều hành mà worker cần có, xác định hình ảnh được sử dụng để chạy các việc , đặt tên cho bất kỳ đầu vào hoặc kết quả nào mà tác vụ sẽ sử dụng và chỉ định lệnh để chạy.

Dán các nội dung sau để cài đặt nhiệm vụ thử nghiệm của ta :

ci / task / run_tests.yml
--- platform: linux  image_resource:   type: docker-image   source:     repository: node     tag: latest  inputs:   - name: hello_hapi   - name: dependency-cache  run:   path: hello_hapi/ci/scripts/run_tests.sh 

Trong cấu hình trên, ta chỉ định rằng tác vụ này yêu cầu một nhân viên Linux. Bản thân server Concourse có thể đáp ứng yêu cầu này mà không cần cấu hình bổ sung.

Tiếp theo, ta chỉ ra một hình ảnh sẽ được sử dụng bởi worker để chạy tác vụ. Mặc dù bạn có thể tạo và sử dụng các loại hình ảnh của riêng mình, nhưng trên thực tế, đây hầu như sẽ luôn là Docker image . Vì repository của ta là ứng dụng Node.js, ta chọn hình ảnh “nút” mới nhất để chạy thử nghiệm vì nó đã được cài đặt công cụ thích hợp.

Nhiệm vụ truy vấn có thể chỉ định đầu vào và kết quả để chỉ ra các tài nguyên mà nó cần truy cập và các tạo tác mà nó sẽ tạo ra. Các đầu vào tương ứng với các tài nguyên được kéo xuống ở cấp “công việc” trước đó. Nội dung của các tài nguyên này được cung cấp cho môi trường tác vụ dưới dạng folder cấp cao nhất có thể được thao tác trong quá trình chạy tác vụ. Tại đây, kho ứng dụng sẽ có sẵn trong folder hello_hapi và các phần phụ thuộc Node.js sẽ nằm trong một folder được gọi là dependency-cache . Bước thực hiện của bạn có thể cần phải di chuyển các file hoặc folder đến vị trí dự kiến của chúng khi bắt đầu tác vụ và đặt tạo tác ở vị trí kết quả khi kết thúc tác vụ.

Cuối cùng, mục run liệt kê đường dẫn đến lệnh để chạy. Mỗi tác vụ chỉ có thể là một lệnh duy nhất với các đối số, vì vậy mặc dù có thể xây dựng một dòng lệnh trong dòng bằng cách soạn chuỗi bash, nhưng việc trỏ tác vụ tới một file kịch bản sẽ phổ biến hơn. Trong trường hợp này, ta trỏ đến một tập lệnh trong folder đầu vào hello_hapi nằm tại hello_hapi/ci/scripts/run_tests.sh . Ta sẽ tạo kịch bản này tiếp theo.

Lưu file khi bạn hoàn tất.

Xác định tập lệnh thử nghiệm

Cuối cùng, ta cần tạo tập lệnh mà tác vụ sẽ thực thi. Mở một file mới có tên run_tests.sh tại ci/scripts/run_tests.sh :

  • nano ci/scripts/run_tests.sh

Tập lệnh này sẽ thao tác các đầu vào của môi trường thử nghiệm để di chuyển các mục đến đúng vị trí của chúng. Sau đó, nó sẽ chạy bộ thử nghiệm được xác định trong repository lưu trữ bằng cách chạy npm test .

Dán phần sau vào file mới:

ci / scripts / run_tests.sh
#!/usr/bin/env bash  set -e -u -x  mv dependency-cache/node_modules hello_hapi cd hello_hapi && npm test 

Đầu tiên, ta cho biết tập lệnh này nên được thực thi bởi trình thông dịch bash của containers Docker. Các tùy chọn set sửa đổi hành vi mặc định của shell để gây ra bất kỳ lỗi nào hoặc các biến chưa đặt để dừng thực thi tập lệnh và in từng lệnh khi chúng được thực thi. Những điều này giúp làm cho tập lệnh an toàn hơn và cho khả năng hiển thị cao hơn cho các mục đích gỡ lỗi.

Lệnh đầu tiên mà ta chạy sẽ di chuyển các phần phụ thuộc được lưu trong bộ nhớ cache, nằm trong folder node_modules , từ trong folder dependency-cache folder hello_hapi . Lưu ý , cả hai folder này đều có sẵn vì ta đã chỉ định chúng làm đầu vào trong định nghĩa nhiệm vụ. Vị trí mới này là nơi npm sẽ tìm kiếm các phụ thuộc đã download mà nó yêu cầu.

Sau đó, ta chuyển vào kho ứng dụng và chạy npm test để thực thi bộ thử nghiệm đã xác định.

Khi bạn hoàn tất, hãy lưu file .

Trước khi tiếp tục, hãy đánh dấu tập lệnh mới là có thể thực thi để có thể chạy trực tiếp:

  • chmod +x ci/scripts/run_tests.sh

Đường dẫn của ta và tất cả các file liên quan hiện đã được xác định.

Cài đặt đường ống trong phòng chờ

Trước khi ta hợp nhất nhánh pipeline trở lại main và đẩy nó lên GitHub, ta nên tiếp tục và tải đường ống của bạn vào Phòng chờ. Concourse sẽ theo dõi repository của ta để biết các commit mới và chạy các quy trình tích hợp liên tục của ta khi phát hiện các thay đổi.

Trong khi ta cần tải đường dẫn theo cách thủ công, khi Concourse thực thi đường dẫn, nó sẽ đọc các việc và tập lệnh từ các folder trong repository lưu trữ. Bất kỳ thay đổi nào đối với bản thân đường ống cần được reload vào Concourse để có hiệu lực, nhưng vì ta không xác định mọi thứ nội tuyến, các thay đổi đối với nhiệm vụ hoặc tập lệnh sẽ tự động được nhận thấy khi chúng được tải lên như một phần của commit .

Để cài đặt một đường dẫn mới, hãy nhắm đến server Phòng chờ của bạn bằng lệnh bay bằng hành động set-pipeline . Ta cần chuyển tên của đường ống mới với tùy chọn -p và chuyển file cấu hình đường ống với tùy chọn -c :

  • fly -t main set-pipeline -p hello_hapi -c ci/pipeline.yml

Bạn sẽ được yêu cầu xác nhận cấu hình trước khi tiếp tục. Nhập y và nhấn ENTER :

Output
. . . apply configuration? [yN]: y pipeline created! you can view your pipeline here: https://example.com/teams/main/pipelines/hello_hapi the pipeline is currently paused. to unpause, either: - run the unpause-pipeline command - click play next to the pipeline in the web ui

Như kết quả cho biết, đường ống đã được chấp nhận nhưng hiện đang bị tạm dừng. Bạn có thể hủy tạm dừng đường dẫn bằng fly hoặc giao diện user web. Ta sẽ sử dụng giao diện user web.

Trong trình duyệt web , hãy truy cập server Phòng chờ và đăng nhập. Bạn sẽ thấy đường dẫn mới của bạn được xác định một cách trực quan:

Phòng chờ không hoạt động đường ống

Các công việc đang chờ xử lý được thể hiện bằng các hộp màu xám và tài nguyên là các khối nhỏ hơn, tối. Các công việc được kích hoạt bởi các thay đổi tài nguyên được kết nối bằng các đường liền mạch trong khi các tài nguyên không kích hoạt sử dụng các đường đứt đoạn. Nguồn lực chảy ra khỏi công việc cho biết một ràng buộc passed đã được cài đặt cho công việc tiếp theo.

Tiêu đề màu xanh lam cho biết rằng đường dẫn hiện đang bị tạm dừng. Nhấp vào biểu tượng menu (ba đường ngang xếp chồng lên nhau) ở góc trên bên trái để mở menu. Bạn sẽ thấy một mục nhập cho đường dẫn của bạn (bạn có thể cần đăng xuất và đăng nhập lại nếu đường ống không hiển thị). Nhấp vào biểu tượng phát màu xanh lam bên cạnh đường dẫn để hủy tạm dừng:

Nghị luận bỏ tạm dừng đường ống

Đường ống bây giờ sẽ được bỏ tạm dừng và sẽ bắt đầu hoạt động.

Ngay từ đầu, các tài nguyên và công việc khác nhau có thể chuyển sang màu cam, cho thấy rằng đã xảy ra lỗi. Điều này xảy ra vì nhiều Docker image khác nhau cần được download và nhánh pipeline vẫn cần được hợp nhất vào nhánh main của repository của ta để cung cấp tác vụ và file tập lệnh.

Commit các thay đổi đối với Git

Bây giờ quá trình tích hợp liên tục được xác định, ta có thể commit nó vào repository git của ta và thêm nó vào Concourse.

Thêm folder ci mới vào khu vực dàn dựng bằng lệnh :

  • git add ci

Xác minh các file được commit bằng cách kiểm tra trạng thái:

  • git status
Output
On branch pipeline Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: ci/pipeline.yml new file: ci/scripts/run_tests.sh new file: ci/tasks/run_tests.yml

Commit các thay đổi bằng lệnh :

  • git commit -m 'Add Concourse pipeline'

Các thay đổi hiện được commit cho nhánh pipeline của ta . Ta có thể hợp nhất các chi nhánh trở lại vào master chi nhánh bằng cách chuyển các chi nhánh và sáp nhập:

  • git checkout master
  • git merge pipeline

Bây giờ, đẩy master chi nhánh với những thay đổi mới backup để GitHub:

  • git push origin master

Commit sẽ bắt đầu một bản dựng mới trong vòng 60 giây và Concourse sẽ có quyền truy cập vào các việc và tập lệnh của đường ống sau khi kéo xuống các thay đổi.

Xem bản dựng mới

Quay lại giao diện user web Concourse, một bản dựng mới sẽ bắt đầu tiến triển trong vòng một phút tới:

Phòng chờ chạy bộ thử nghiệm

Đường viền màu vàng cho biết rằng công việc hiện đang được tiến hành. Để theo dõi tiến trình, hãy nhấp vào công việc Chạy thử nghiệm để xem kết quả hiện tại. Khi công việc hoàn thành, kết quả kết quả hoàn chỉnh sẽ có sẵn và công việc sẽ chuyển sang màu xanh lục:

Kiểm tra thành công phòng luận

Nhấp vào biểu tượng trang chủ để quay lại màn hình đường ống chính. Trạng thái màu xanh lá cây của mỗi công việc cho biết rằng commit mới nhất đã vượt qua tất cả các giai đoạn của quy trình:

Hội nghị vượt qua tất cả các công việc

Đường ống sẽ tiếp tục giám sát repository và tự động chạy các thử nghiệm mới khi các thay đổi được commit .

Kết luận

Trong hướng dẫn này, ta cài đặt đường ống Phòng chờ để tự động theo dõi repository để biết các thay đổi. Khi các thay đổi được phát hiện, Concourse sẽ kéo version mới nhất của repository xuống và sử dụng containers Docker để cài đặt và lưu vào bộ nhớ cache các phụ thuộc của dự án. Sau đó, quá trình xây dựng sẽ chuyển sang giai đoạn thử nghiệm nơi các phần phụ thuộc được sao chép qua và bộ thử nghiệm của repository được chạy để kiểm tra xem có bất kỳ thay đổi vi phạm nào được đưa vào hay không.

Concourse cung cấp rất nhiều tính linh hoạt và sức mạnh để xác định các thủ tục thử nghiệm biệt lập và lưu trữ chúng trong chính repository . Nếu bạn muốn tìm hiểu thêm về cách tận dụng Concourse cho các dự án của riêng mình, hãy xem tài liệu chính thức .


Tags:

Các tin liên quan

Cách cài đặt Ruby on Rails với RVM trên Ubuntu 16.04
2017-07-03
Cách thiết lập đường ống tích hợp liên tục với Drone trên Ubuntu 16.04
2017-06-28
Cách thiết lập tích hợp liên tục với Buildbot trên Ubuntu 16.04
2017-06-28
Cách thiết lập đường ống tích hợp liên tục trong Jenkins trên Ubuntu 16.04
2017-06-16
Cách cài đặt và cấu hình Drone trên Ubuntu 16.04
2017-06-14
Cách giám sát cảnh báo Zabbix với Alerta trên Ubuntu 16.04
2017-06-13
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên Ubuntu 16.04
2017-06-08
how-to-config-an-orientdb-cluster-on-ubuntu-16-04
2017-06-02
Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên Ubuntu 16.04
2017-06-01
Cách bật SFTP mà không cần truy cập Shell trên Ubuntu 16.04
2017-05-31