Cách thiết lập đường ống tích hợp liên tục với GitLab CI trên Ubuntu 16.04
GitLab Community Edition là nhà cung cấp repository Git tự lưu trữ với các tính năng bổ sung để giúp quản lý dự án và phát triển phần mềm. Một trong những tính năng có giá trị nhất mà GitLab cung cấp là công cụ phân phối và tích hợp liên tục bên trong được gọi là GitLab CI .Trong hướng dẫn này, ta sẽ trình bày cách cài đặt GitLab CI để theo dõi các thay đổi trong repository lưu trữ của bạn và chạy các thử nghiệm tự động để xác thực mã mới. Ta sẽ bắt đầu với một cài đặt GitLab đang chạy, nơi ta sẽ sao chép một repository ví dụ cho một ứng dụng Node.js cơ bản. Sau khi cấu hình quy trình CI của ta , khi một commit mới được đẩy vào repository , GitLab sẽ sử dụng CI runner để thực thi bộ thử nghiệm dựa trên mã trong một containers Docker riêng biệt.
Yêu cầu
Trước khi bắt đầu, bạn cần cài đặt môi trường ban đầu. Ta cần một server GitLab an toàn được cấu hình để lưu trữ mã và quản lý các quy trình CI / CD của ta . Ngoài ra, ta cần một nơi để chạy các bài kiểm tra tự động. Đây có thể là cùng một server mà GitLab được cài đặt trên hoặc một server riêng biệt. Các phần dưới đây trình bày các yêu cầu một cách chi tiết hơn.
Server GitLab được bảo mật bằng SSL
Để lưu trữ mã nguồn và cấu hình các việc CI / CD của ta , ta cần cài đặt version GitLab trên server Ubuntu 16.04. GitLab hiện khuyến nghị server có ít nhất 2 lõi CPU và 4GB RAM . Để bảo vệ mã của bạn không bị lộ hoặc giả mạo, version GitLab sẽ được bảo vệ bằng SSL bằng Let's Encrypt. Server của bạn cần có domain hoặc domain phụ được liên kết với nó để hoàn thành bước này.
Bạn có thể hoàn thành các yêu cầu này bằng cách sử dụng các hướng dẫn sau:
- Cài đặt server ban đầu với Ubuntu 16.04 : Tạo user
sudo
và cấu hình firewall cơ bản - Cách cài đặt và cấu hình GitLab trên Ubuntu 16.04 : Cài đặt GitLab trên server và bảo vệ nó bằng certificate Let's Encrypt TLS / SSL
Ta sẽ trình bày cách chia sẻ các trình chạy CI / CD (các thành phần chạy các bài kiểm tra tự động) giữa các dự án và cách khóa chúng vào các dự án đơn lẻ. Nếu bạn muốn chia sẻ những người chạy CI giữa các dự án, ta đặc biệt khuyên bạn nên hạn chế hoặc tắt đăng ký công khai. Nếu bạn không sửa đổi cài đặt của bạn trong khi cài đặt, hãy quay lại và làm theo bước tùy chọn từ bài viết cài đặt GitLab về hạn chế hoặc tắt đăng ký để ngăn chặn sự lạm dụng của các bên bên ngoài.
Một hoặc nhiều server để sử dụng làm trình chạy GitLab CI
GitLab CI Runners là server kiểm tra mã và chạy các bài kiểm tra tự động để xác nhận các thay đổi mới. Để cô lập môi trường thử nghiệm, ta sẽ chạy tất cả các thử nghiệm tự động của bạn trong containers Docker. Để thực hiện việc này, ta cần cài đặt Docker trên server hoặc các server sẽ chạy thử nghiệm.
Bước này có thể được hoàn thành trên server GitLab hoặc trên một server Ubuntu 16.04 khác để cung cấp thêm tính cách ly và tránh tranh chấp tài nguyên. Các hướng dẫn sau đây sẽ cài đặt Docker trên server bạn muốn sử dụng để chạy các bài kiểm tra của bạn :
- Cài đặt server ban đầu với Ubuntu 16.04 : Tạo user
sudo
và cấu hình firewall cơ bản (bạn không phải hoàn thành lại việc này nếu bạn đang cài đặt trình chạy CI trên server GitLab) - Cách cài đặt và sử dụng Docker trên Ubuntu 16.04 : Làm theo bước 1 và 2 để cài đặt Docker trên server
Khi đã sẵn sàng để bắt đầu, hãy tiếp tục với hướng dẫn này.
Sao chép Kho lưu trữ Ví dụ từ GitHub
Để bắt đầu, ta sẽ tạo một dự án mới trong GitLab có chứa ứng dụng Node.js mẫu. Ta sẽ nhập repository root trực tiếp từ GitHub để không phải tải lên theo cách thủ công.
Đăng nhập vào GitLab và nhấp vào biểu tượng dấu cộng ở góc trên bên phải và chọn Dự án mới để thêm dự án mới:
Trên trang dự án mới, hãy nhấp vào tab Nhập dự án :
Tiếp theo, nhấp vào nút Repo by URL . Mặc dù có tùy chọn nhập GitHub, nó yêu cầu mã thông báo truy cập Cá nhân và được sử dụng để nhập repository và thông tin bổ sung. Ta chỉ quan tâm đến mã và lịch sử Git, vì vậy việc nhập bằng URL dễ dàng hơn.
Trong trường URL repository Git , hãy nhập URL repository GitHub sau:
https://github.com/do-community/hello_hapi.git
Nó sẽ giống như thế này:
Vì đây là một cuộc trình diễn, nên có lẽ tốt nhất bạn nên giữ cho repository được đánh dấu Riêng tư . Khi bạn hoàn tất, hãy nhấp vào Tạo dự án .
Dự án mới sẽ được tạo dựa trên repository được nhập từ GitHub.
Tìm hiểu file .gitlab-ci.yml
GitLab CI tìm kiếm một file có tên .gitlab-ci.yml
trong mỗi repository để xác định cách nó sẽ kiểm tra mã. Kho lưu trữ ta đã nhập có gitlab-ci.yml
đã được cấu hình cho dự án. Bạn có thể tìm hiểu thêm về định dạng này bằng cách đọc tài liệu tham khảo .gitlab-ci.yml
Nhấp vào .gitlab-ci.yml
trong giao diện GitLab cho dự án ta vừa tạo. Cấu hình CI sẽ giống như sau:
image: node:latest stages: - build - test cache: paths: - node_modules/ install_dependencies: stage: build script: - npm install artifacts: paths: - node_modules/ test_with_lab: stage: test script: npm test
Tệp sử dụng cú pháp cấu hình GitLab CI YAML để xác định các hành động cần được thực hiện, thứ tự chúng phải thực hiện, chúng sẽ được chạy trong điều kiện nào và các tài nguyên cần thiết để hoàn thành mỗi tác vụ. Khi viết các file GitLab CI của bạn , bạn có thể truy cập trình liên kết cú pháp bằng cách truy cập /ci/lint
trong version GitLab của bạn để xác thực rằng file của bạn được định dạng đúng.
Tệp cấu hình bắt đầu bằng cách khai báo image
Docker sẽ được sử dụng để chạy bộ thử nghiệm. Vì Hapi là một khung Node.js, ta đang sử dụng hình ảnh Node.js mới nhất:
image: node:latest
Tiếp theo, ta xác định rõ ràng các giai đoạn tích hợp liên tục khác nhau sẽ chạy:
stages: - build - test
Các tên bạn chọn ở đây là tùy ý, nhưng thứ tự sẽ xác định thứ tự thực hiện cho các bước sẽ tiếp theo. Giai đoạn là các thẻ mà bạn có thể áp dụng cho từng công việc. GitLab sẽ chạy song song các công việc của cùng một giai đoạn và sẽ đợi để thực thi giai đoạn tiếp theo cho đến khi tất cả các công việc ở giai đoạn hiện tại hoàn tất. Nếu không có giai đoạn nào được xác định, GitLab sẽ sử dụng ba giai đoạn được gọi là build
, test
, deploy
và gán tất cả các công việc cho giai đoạn test
theo mặc định.
Sau khi xác định các giai đoạn, cấu hình bao gồm một định nghĩa cache
:
cache: paths: - node_modules/
Điều này chỉ định các file hoặc folder có thể được lưu vào bộ nhớ đệm (lưu để sử dụng sau này) giữa các lần chạy hoặc các giai đoạn. Điều này có thể giúp giảm lượng thời gian cần thiết để chạy các công việc dựa vào các tài nguyên có thể không thay đổi giữa các lần chạy. Ở đây, ta đang lưu vào bộ nhớ đệm folder node_modules
, đây là nơi npm
sẽ cài đặt các phụ thuộc mà nó download .
Công việc đầu tiên của ta được gọi là install_dependencies
:
install_dependencies: stage: build script: - npm install artifacts: paths: - node_modules/
Công việc có thể được đặt tên bất kỳ thứ gì, nhưng vì tên sẽ được sử dụng trong giao diện user GitLab nên tên mô tả rất hữu ích. Thông thường, npm install
có thể được kết hợp với các giai đoạn thử nghiệm tiếp theo, nhưng để chứng minh tốt hơn sự tương tác giữa các giai đoạn, ta đang extract bước này để chạy trong giai đoạn của chính nó.
Ta đánh dấu giai đoạn một cách rõ ràng là "xây dựng" với chỉ thị stage
. Tiếp theo, ta chỉ định các lệnh thực sự để chạy bằng cách sử dụng chỉ thị script
. Bạn có thể bao gồm nhiều lệnh bằng cách thêm các dòng bổ sung trong phần script
.
Phần phụ artifacts
được sử dụng để chỉ định đường dẫn file hoặc folder để lưu và chuyển giữa các giai đoạn. Vì lệnh npm install
đặt các phụ thuộc cho dự án, bước tiếp theo của ta cần quyền truy cập vào các file đã download . Khai báo đường dẫn node_modules
đảm bảo giai đoạn tiếp theo sẽ có quyền truy cập vào các file . Chúng cũng sẽ có sẵn để xem hoặc download trong giao diện user GitLab sau khi thử nghiệm, vì vậy điều này cũng hữu ích cho việc xây dựng các tạo tác như file binary . Nếu bạn muốn lưu mọi thứ được tạo trong giai đoạn này, hãy thay thế toàn bộ phần paths
bằng không theo untracked: true
.
Cuối cùng, công việc thứ hai được gọi là test_with_lab
khai báo lệnh sẽ thực sự chạy bộ thử nghiệm:
test_with_lab: stage: test script: npm test
Ta đặt điều này trong giai đoạn test
. Vì đây là giai đoạn sau, nó có quyền truy cập vào các tạo tác được tạo ra bởi giai đoạn build
, là những phụ thuộc của dự án trong trường hợp của ta . Ở đây, phần script
trình bày cú pháp YAML một dòng được dùng khi chỉ có một mục duy nhất. Ta cũng có thể sử dụng cùng một cú pháp này trong công việc trước vì chỉ có một lệnh được chỉ định.
Đến đây bạn đã có ý tưởng cơ bản về cách .gitlab-ci.yml
xác định các việc CI / CD, ta có thể xác định một hoặc nhiều trình chạy có khả năng thực hiện kế hoạch thử nghiệm.
Kích hoạt Chạy Tích hợp Liên tục
Vì repository của ta bao gồm .gitlab-ci.yml
, bất kỳ commit mới nào sẽ kích hoạt một lần chạy CI mới. Nếu không có người chạy nào, cuộc chạy CI sẽ được đặt thành “đang chờ xử lý”. Trước khi ta xác định một người chạy, hãy kích hoạt một lần chạy CI để xem một công việc trông như thế nào ở trạng thái đang chờ xử lý. Sau khi có người chạy, nó sẽ ngay lập tức bắt đầu đường chạy đang chờ xử lý.
Trở lại trong hello_hapi
GitLab xem kho dự án, bấm vào dấu cộng bên cạnh tên chi nhánh và dự án và chọn file mới từ menu:
Trên trang tiếp theo, nhập dummy_file
vào trường Tên file và nhập một số văn bản vào cửa sổ chỉnh sửa chính:
Nhấp vào Commit thay đổi ở dưới cùng khi bạn hoàn tất.
Bây giờ, quay lại trang chính của dự án. Một biểu tượng nhỏ bị tạm dừng sẽ được đính kèm vào commit mới nhất . Nếu bạn di chuột qua biểu tượng, nó sẽ hiển thị “ Commit : đang chờ xử lý”:
Điều này nghĩa là các bài kiểm tra xác nhận các thay đổi mã vẫn chưa được chạy.
Để biết thêm thông tin, hãy chuyển đến đầu trang và nhấp vào Đường ống . Bạn sẽ được đưa đến trang tổng quan về đường dẫn, nơi bạn có thể thấy rằng quá trình chạy CI được đánh dấu là đang chờ xử lý và được gắn nhãn là "bị kẹt":
Lưu ý: Dọc theo bên tay phải là nút cho công cụ CI Lint . Đây là nơi bạn có thể kiểm tra cú pháp của bất kỳ gitlab-ci.yml
nào bạn viết.
Từ đây, bạn có thể nhấp vào trạng thái đang chờ xử lý để biết thêm chi tiết về quá trình chạy. Chế độ xem này hiển thị các giai đoạn khác nhau trong quá trình chạy của ta , cũng như các công việc riêng lẻ liên quan đến từng giai đoạn:
Cuối cùng, nhấp vào công việc install_dependencies . Điều này sẽ cung cấp cho bạn các chi tiết cụ thể về những gì đang trì hoãn việc chạy:
Ở đây, thông báo cho biết rằng công việc đang bế tắc vì thiếu người chạy. Điều này được mong đợi vì ta chưa cấu hình bất kỳ. Sau khi có một người chạy, có thể sử dụng cùng một giao diện này để xem kết quả. Đây cũng là vị trí mà bạn có thể download các hiện vật được tạo ra trong quá trình xây dựng.
Bây giờ ta đã biết một công việc đang chờ xử lý trông như thế nào, ta có thể chỉ định một người chạy CI cho dự án của bạn để nhận công việc đang chờ xử lý.
Cài đặt Dịch vụ GitLab CI Runner
Bây giờ ta đã sẵn sàng để cài đặt một trình chạy GitLab CI. Để thực hiện việc này, ta cần cài đặt gói Á hậu GitLab CI trên hệ thống và khởi động dịch vụ Á hậu GitLab. Dịch vụ có thể chạy nhiều version Á hậu cho các dự án khác nhau.
Như đã đề cập trong yêu cầu , bạn có thể hoàn thành các bước này trên cùng một server lưu trữ version GitLab của bạn hoặc một server khác nếu bạn cần đảm bảo tránh tranh chấp tài nguyên. Lưu ý bất kỳ server nào bạn chọn, bạn cần cài đặt Docker cho cấu hình ta sẽ sử dụng.
Quá trình cài đặt dịch vụ Á hậu GitLab CI tương tự như quá trình được sử dụng để cài đặt chính GitLab. Ta sẽ download một tập lệnh để thêm repository GitLab vào danh sách nguồn apt
của ta . Sau khi chạy script, ta sẽ download gói runner. Sau đó, ta có thể cấu hình nó để phục vụ version GitLab của ta .
Bắt đầu bằng cách download version mới nhất của tập lệnh cấu hình repository Á hậu GitLab CI vào /tmp
(đây là một repository khác với repository được sử dụng bởi server GitLab):
- curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh -o /tmp/gl-runner.deb.sh
Vui lòng kiểm tra tập lệnh đã download đảm bảo rằng bạn thấy phù hợp với các hành động mà nó sẽ thực hiện. Bạn cũng có thể tìm thấy version được lưu trữ trên server của tập lệnh tại đây :
- less /tmp/gl-runner.deb.sh
Khi thấy ổn với sự an toàn của tập lệnh, hãy chạy trình cài đặt:
- sudo bash /tmp/gl-runner.deb.sh
Tập lệnh sẽ cài đặt server của bạn để sử dụng các repository được duy trì của GitLab. Điều này cho phép bạn quản lý các gói Á hậu GitLab bằng cùng các công cụ quản lý gói mà bạn sử dụng cho các gói hệ thống khác của bạn . Sau khi hoàn tất, bạn có thể tiến hành cài đặt bằng apt-get
:
- sudo apt-get install gitlab-runner
Thao tác này sẽ cài đặt gói Á hậu GitLab CI trên hệ thống và khởi động dịch vụ Á hậu GitLab.
Cài đặt trình chạy GitLab
Tiếp theo, ta cần cài đặt một trình chạy GitLab CI để nó có thể bắt đầu chấp nhận công việc.
Để làm điều này, ta cần mã thông báo người chạy GitLab để người chạy có thể xác thực với server GitLab. Loại mã thông báo ta cần phụ thuộc vào cách ta muốn sử dụng người chạy này.
Người chạy dự án cụ thể sẽ hữu ích nếu bạn có yêu cầu cụ thể đối với người chạy. Ví dụ: nếu gitlab-ci.yml
của bạn xác định các nhiệm vụ triển khai yêu cầu thông tin đăng nhập, thì một trình chạy cụ thể có thể được yêu cầu để xác thực chính xác vào môi trường triển khai. Nếu dự án của bạn có các bước cần nhiều tài nguyên trong quy trình CI, thì đây cũng có thể là một ý tưởng hay. Một người chạy dự án cụ thể sẽ không nhận công việc từ các dự án khác.
Mặt khác, một trình chạy chung là một trình chạy đa năng được dùng bởi nhiều dự án. Người chạy sẽ nhận công việc từ các dự án theo một thuật toán tính số lượng công việc hiện đang được chạy cho mỗi dự án. Loại người chạy này linh hoạt hơn. Bạn cần đăng nhập vào GitLab bằng account quản trị để cài đặt người chạy được chia sẻ.
Ta sẽ trình bày cách nhận mã người chạy cho cả hai loại người chạy này bên dưới. Chọn phương pháp phù hợp với bạn nhất.
Thu thập thông tin để đăng ký người chạy theo dự án cụ thể
Nếu bạn muốn người chạy được gắn với một dự án cụ thể, hãy bắt đầu bằng cách chuyển đến trang của dự án trong giao diện GitLab.
Từ đây, hãy nhấp vào mục Cài đặt ở menu bên trái. Sau đó, nhấp vào mục CI / CD trong menu con:
Trên trang này, bạn sẽ thấy phần cài đặt Người chạy . Nhấp vào nút Mở rộng để xem thêm chi tiết. Trong giao diện chi tiết, phía bên trái sẽ giải thích cách đăng ký một người chạy dự án cụ thể. Sao chép mã thông báo đăng ký được hiển thị ở bước 4 của hướng dẫn:
Nếu bạn muốn tắt bất kỳ người chạy được chia sẻ nào đang hoạt động cho dự án này, bạn có thể thực hiện bằng cách nhấp vào nút Tắt người chạy được chia sẻ ở phía bên phải. Đây là tùy chọn.
Khi đã sẵn sàng , hãy bỏ qua để tìm hiểu cách đăng ký người chạy của bạn bằng cách sử dụng các phần thông tin bạn thu thập được từ trang này.
Thu thập thông tin để đăng ký người chơi được chia sẻ
Để tìm thông tin cần thiết để đăng ký một người chạy chung, bạn cần phải đăng nhập bằng account quản trị.
Bắt đầu bằng cách nhấp vào biểu tượng cờ lê trong thanh chuyển trên cùng để truy cập khu vực quản trị. Trong phần Tổng quan của menu bên trái, nhấp vào Người chạy để truy cập trang cấu hình Người chạy được chia sẻ:
Sao chép mã thông báo đăng ký được hiển thị ở đầu trang:
Ta sẽ sử dụng mã thông báo này để đăng ký người chạy GitLab CI cho dự án.
Đăng ký GitLab CI Runner với Server GitLab
Đến đây bạn đã có mã thông báo, hãy quay lại server nơi dịch vụ Á hậu GitLab CI của bạn được cài đặt.
Để đăng ký một người chạy mới, hãy nhập lệnh sau:
- sudo gitlab-runner register
Bạn sẽ được hỏi một loạt câu hỏi để cấu hình người chạy:
Vui lòng nhập URL điều phối viên gitlab-ci (ví dụ: https://gitlab.com/ )
Nhập domain của server GitLab của bạn, sử dụng https://
để chỉ định SSL. Bạn có thể tùy chọn thêm /ci
vào cuối domain của bạn , nhưng các version gần đây sẽ tự động chuyển hướng.
Vui lòng nhập mã thông báo gitlab-ci cho người chạy này
Mã thông báo bạn đã sao chép trong phần cuối cùng.
Vui lòng nhập mô tả gitlab-ci cho người chạy này
Một cái tên cho người chạy đặc biệt này. Điều này sẽ hiển thị trong danh sách người chạy của dịch vụ chạy trên dòng lệnh và trong giao diện GitLab.
Vui lòng nhập thẻ gitlab-ci cho người chạy này (phân tách bằng dấu phẩy)
Đây là những thẻ mà bạn có thể gán cho người chạy. Các công việc GitLab có thể thể hiện các yêu cầu đối với các thẻ này đảm bảo chúng được chạy trên server lưu trữ với các phụ thuộc chính xác.
Bạn có thể để trống trong trường hợp này.
Có khóa Runner với dự án hiện tại hay không [true / false]
Chỉ định người chạy vào dự án cụ thể. Nó không thể được sử dụng bởi các dự án khác.
Chọn "false" ở đây.
Vui lòng nhập trình thực thi
Phương pháp mà người chạy sử dụng để hoàn thành công việc.
Chọn "docker" ở đây.
Vui lòng nhập Docker image mặc định (ví dụ: ruby: 2.1)
Hình ảnh mặc định được sử dụng để chạy công việc khi .gitlab-ci.yml
không bao gồm đặc tả hình ảnh. Tốt nhất là chỉ định một hình ảnh chung ở đây và xác định các hình ảnh cụ thể hơn trong .gitlab-ci.yml
của bạn như ta đã làm.
Ta sẽ nhập “alpine: mới nhất” ở đây dưới dạng một mặc định nhỏ và an toàn.
Sau khi trả lời các dấu nhắc , một trình chạy mới sẽ được tạo có khả năng chạy các việc CI / CD của dự án của bạn.
Bạn có thể xem những người chạy mà dịch vụ người chạy GitLab CI hiện có sẵn bằng lệnh :
- sudo gitlab-runner list
OutputListing configured runners ConfigFile=/etc/gitlab-runner/config.toml example-runner Executor=docker Token=e746250e282d197baa83c67eda2c0b URL=https://example.com
Bây giờ ta đã có sẵn một trình chạy, ta có thể quay lại dự án trong GitLab.
Xem CI / CD Run trong GitLab
Quay lại trình duyệt web , quay lại dự án của bạn trong GitLab. Tùy thuộc vào thời gian kể từ khi bạn đăng ký người chạy, người chạy có thể đang chạy:
Hoặc nó có thể đã hoàn thành rồi:
Dù trạng thái nào, hãy nhấp vào biểu tượng đang chạy hoặc đã vượt qua (hoặc không thành công nếu bạn gặp sự cố) để xem trạng thái hiện tại của lần chạy CI. Bạn có thể có một cái nhìn tương tự bằng cách nhấp vào menu Đường ống trên cùng.
Bạn sẽ được đưa đến trang tổng quan về đường dẫn, nơi bạn có thể thấy trạng thái của GitLab CI đang chạy:
Dưới tiêu đề Giai đoạn , sẽ có một vòng tròn cho biết trạng thái của từng giai đoạn trong quá trình chạy. Nếu bạn nhấp vào giai đoạn, bạn có thể thấy các công việc riêng lẻ được liên kết với giai đoạn:
Nhấp vào công việc install_dependencies trong giai đoạn xây dựng . Điều này sẽ đưa bạn đến trang tổng quan về công việc:
Bây giờ, thay vì hiển thị thông báo về việc không có người chạy nào, kết quả của công việc được hiển thị. Trong trường hợp của ta , điều này nghĩa là bạn có thể xem kết quả của npm
cài đặt từng gói.
Dọc theo bên tay phải, bạn cũng có thể thấy một số mục khác. Bạn có thể xem các công việc khác bằng cách thay đổi Giai đoạn và nhấp vào các bước chạy bên dưới. Bạn cũng có thể xem hoặc download bất kỳ hiện vật nào được tạo ra bởi quá trình chạy.
Kết luận
Trong hướng dẫn này, ta đã thêm một dự án trình diễn vào version GitLab để giới thiệu khả năng tích hợp và triển khai liên tục của GitLab CI. Ta đã thảo luận về cách xác định đường dẫn trong gitlab-ci.yml
để xây dựng và kiểm tra các ứng dụng của bạn cũng như cách phân công công việc cho các giai đoạn để xác định mối quan hệ của chúng với nhau. Sau đó, ta cài đặt một người chạy GitLab CI để nhận các công việc CI cho dự án của ta và trình bày cách tìm thông tin về các lần chạy GitLab CI riêng lẻ.
Các tin liên quan
Cách cài đặt Swift và Vapor trên Ubuntu 16.042018-01-25
Cách cài đặt và cấu hình GitLab trên Ubuntu 16.04
2018-01-24
Cách cài đặt và bảo mật Grafana trên Ubuntu 16.04
2017-12-27
Cách cài đặt Prometheus trên Ubuntu 16.04
2017-12-14
Cách theo dõi cảnh báo Nagios với Alerta trên Ubuntu 16.04
2017-12-13
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên Ubuntu 14.04
2017-12-01
Cách cài đặt và sử dụng TensorFlow trên Ubuntu 16.04
2017-12-01
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên Ubuntu 14.04
2017-12-01
Cách cài đặt Jenkins trên Ubuntu 16.04
2017-11-29
Cách tạo thiết lập tính khả dụng cao với Heartbeat và IP nổi trên Ubuntu 16.04
2017-11-22