Thứ sáu, 01/02/2019 | 00:00 GMT+7

Cách thực hiện kiểm tra liên tục các vai trò không thể phục hồi bằng Molecule và Travis CI trên Ubuntu 18.04

Ansible là một công cụ quản lý cấu hình không cần tác nhân sử dụng các mẫu YAML để xác định danh sách các việc được thực hiện trên server . Trong Ansible, role là một tập hợp các biến, nhiệm vụ, file , mẫu và module được sử dụng cùng nhau để thực hiện một chức năng đơn lẻ, phức tạp.

Molecule là một công cụ để thực hiện kiểm tra tự động các role Ansible, được thiết kế đặc biệt để hỗ trợ phát triển các role được viết và duy trì một cách nhất quán. Các bài kiểm tra đơn vị của Molecule cho phép các nhà phát triển kiểm tra các role đồng thời trên nhiều môi trường và dưới các thông số khác nhau. Điều quan trọng là các nhà phát triển phải liên tục chạy các bài kiểm tra đối với mã thường xuyên thay đổi; dòng công việc này đảm bảo các role tiếp tục hoạt động khi bạn cập nhật các thư viện mã. Chạy Molecule bằng công cụ tích hợp liên tục, như Travis CI , cho phép các bài kiểm tra chạy liên tục, đảm bảo các đóng góp cho mã của bạn không tạo ra các thay đổi vi phạm.

Trong hướng dẫn này, bạn sẽ sử dụng role cơ sở được tạo sẵn để cài đặt và cấu hình web server Apache và firewall trên server Ubuntu và CentOS. Sau đó, bạn sẽ khởi tạo một kịch bản Phân tử trong role đó để tạo các bài kiểm tra và đảm bảo role đó hoạt động như dự định trong môi trường mục tiêu của bạn. Sau khi cấu hình Molecule, bạn sẽ sử dụng Travis CI để liên tục kiểm tra role mới tạo của bạn . Mỗi khi có thay đổi đối với mã của bạn, Travis CI sẽ chạy molecule test đảm bảo rằng role vẫn hoạt động chính xác.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần :

Bước 1 - Tạo repository role cơ sở

Bạn sẽ sử dụng một role tạo sẵn gọi là ansible-apache để cài đặt Apache và cấu hình firewall trên các bản phân phối dựa trên Debian và Red Hat. Bạn sẽ phân nhánh và sử dụng role này làm cơ sở và sau đó xây dựng các bài kiểm tra Phân tử trên đó. Forking cho phép bạn tạo bản sao của một repository để bạn có thể áp dụng các thay đổi đối với nó mà không làm xáo trộn dự án root .

Bắt đầu bằng cách tạo một nhánh của role ansible-apache . Đi tới repository ansible-apache và nhấp vào nút Fork .

Khi bạn đã phân nhánh repository , GitHub sẽ dẫn bạn đến trang phân nhánh của bạn. Đây sẽ là một bản sao của repository cơ sở, nhưng trên account của bạn .

Nhấp vào nút Sao chép hoặc Download màu xanh lục và bạn sẽ thấy một hộp có Nhân bản với HTTPS .

Sao chép URL được hiển thị cho repository của bạn. Bạn sẽ sử dụng nó trong bước tiếp theo. URL sẽ tương tự như sau:

https://github.com/username/ansible-apache.git 

Bạn sẽ thay thế username bằng tên user GitHub của bạn .

Với cài đặt fork của bạn, bạn sẽ sao chép nó trên server của bạn và bắt đầu chuẩn bị role của bạn trong phần tiếp theo.

Bước 2 - Chuẩn bị role của bạn

Sau khi làm theo Bước 1 của yêu cầu Cách kiểm tra role Ansible với Molecule trên Ubuntu 18.04 , bạn sẽ cài đặt Molecule và Ansible trong môi trường ảo. Bạn sẽ sử dụng môi trường ảo này để phát triển role mới của bạn .

Đầu tiên, hãy kích hoạt môi trường ảo bạn đã tạo trong khi tuân theo các yêu cầu bằng lệnh:

  • source my_env/bin/activate

Chạy lệnh sau để sao chép repository bằng URL bạn vừa sao chép ở Bước 1:

  • git clone https://github.com/username/ansible-apache.git

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

Output
Cloning into 'ansible-apache'... remote: Enumerating objects: 16, done. remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16 Unpacking objects: 100% (16/16), done.

Di chuyển vào folder mới tạo:

  • cd ansible-apache

Role cơ sở mà bạn đã download thực hiện các việc sau:

  • Bao gồm các biến : Role bắt đầu bằng cách bao gồm tất cả các biến bắt buộc theo sự phân phối của server . Ansible sử dụng các biến để xử lý sự chênh lệch giữa các hệ thống khác nhau. Vì bạn đang sử dụng Ubuntu 18.04 và CentOS 7 làm server , role sẽ nhận ra rằng họ hệ điều hành tương ứng là Debian và Red Hat và bao gồm các biến từ vars/Debian.ymlvars/RedHat.yml .

  • Bao gồm các việc liên quan đến phân phối : Các việc này bao gồm tasks/install-Debian.ymltasks/install-RedHat.yml . Tùy thuộc vào bản phân phối được chỉ định, nó cài đặt các gói có liên quan. Đối với Ubuntu, các gói này là apache2ufw . Đối với CentOS, các gói này là httpdfirewalld .

  • Đảm bảo có index.html mới nhất : Tác vụ này sao chép qua một mẫu templates/index.html.j2 mà Apache sẽ sử dụng làm trang chủ của web server .

  • Khởi động các dịch vụ liên quan và bật chúng khi khởi động : Khởi động và bật các dịch vụ cần thiết được cài đặt như một phần của tác vụ đầu tiên. Đối với CentOS, các dịch vụ này là httpdfirewalld , còn đối với Ubuntu, chúng là apache2ufw .

  • Cấu hình firewall để cho phép lưu lượng truy cập : Điều này bao gồm các tasks/configure-Debian-firewall.yml hoặc tasks/configure-RedHat-firewall.yml . Ansible cấu hình Firewalld hoặc UFW làm firewall và đưa dịch vụ http vào danh sách trắng.

Đến đây bạn đã hiểu về cách hoạt động của role này, bạn sẽ cấu hình Molecule để kiểm tra nó. Bạn sẽ viết các trường hợp thử nghiệm cho các nhiệm vụ này bao gồm các thay đổi mà chúng thực hiện.

Bước 3 - Viết bài kiểm tra của bạn

Để kiểm tra xem role cơ sở của bạn có thực hiện các nhiệm vụ của nó như dự định hay không, bạn sẽ bắt đầu một kịch bản Phân tử, chỉ định các môi trường mục tiêu của bạn và tạo ba file thử nghiệm tùy chỉnh.

Bắt đầu bằng cách khởi tạo một kịch bản Molecule cho role này bằng lệnh sau:

  • molecule init scenario -r ansible-apache

Bạn sẽ thấy kết quả sau:

Output
--> Initializing new scenario default... Initialized scenario in /home/sammy/ansible-apache/molecule/default successfully.

Bạn sẽ thêm CentOS và Ubuntu làm môi trường mục tiêu của bạn bằng cách đưa chúng làm nền tảng trong file cấu hình Molecule của bạn. Để thực hiện việc này, hãy chỉnh sửa file molecule.yml bằng editor :

  • nano molecule/default/molecule.yml

Thêm nội dung được đánh dấu sau vào cấu hình Molecule:

~ / ansible-apache / phân tử / mặc định / phân tử.yml
--- dependency:   name: galaxy driver:   name: docker lint:   name: yamllint platforms:   - name: centos7     image: milcom/centos7-systemd     privileged: true   - name: ubuntu18     image: solita/ubuntu-systemd     command: /sbin/init     privileged: true     volumes:       - /lib/modules:/lib/modules:ro provisioner:   name: ansible   lint:     name: ansible-lint scenario:   name: default verifier:   name: testinfra   lint:     name: flake8 

Ở đây, bạn đang chỉ định hai nền tảng mục tiêu được chạy ở chế độ quyền vì bạn đang làm việc với các dịch vụ systemd:

  • centos7 là nền tảng đầu tiên và sử dụng hình ảnh milcom/centos7-systemd .
  • ubuntu18 là nền tảng thứ hai và sử dụng hình ảnh solita/ubuntu-systemd . Ngoài việc sử dụng chế độ quyền và gắn các module kernel cần thiết, bạn đang chạy /sbin/init khi chạy đảm bảo iptables được cài đặt và chạy.

Lưu và thoát khỏi file .

Để biết thêm thông tin về việc chạy các containers quyền , hãy truy cập tài liệu chính thức của Molecule .

Thay vì sử dụng file thử nghiệm Molecule mặc định, bạn sẽ tạo ba file thử nghiệm tùy chỉnh, một file cho mỗi nền tảng mục tiêu và một file để viết các bài kiểm tra phổ biến giữa tất cả các nền tảng. Bắt đầu bằng cách xóa file kiểm tra mặc định của kịch bản test_default.py bằng lệnh sau:

  • rm molecule/default/tests/test_default.py

Đến đây bạn có thể chuyển sang tạo ba file thử nghiệm tùy chỉnh, test_common.py , test_Debian.pytest_RedHat.py cho mỗi nền tảng mục tiêu của bạn .

Tệp thử nghiệm đầu tiên, test_common.py , sẽ chứa các thử nghiệm phổ biến mà mỗi server sẽ thực hiện. Tạo và chỉnh sửa file thử nghiệm chung, test_common.py :

  • nano molecule/default/tests/test_common.py

Thêm mã sau vào file :

~ / ansible-apache / phân tử / default / tests / test_common.py
import os import pytest  import testinfra.utils.ansible_runner  testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')   @pytest.mark.parametrize('file, content', [   ("/var/www/html/index.html", "Managed by Ansible") ]) def test_files(host, file, content):     file = host.file(file)      assert file.exists     assert file.contains(content) 

Trong file test_common.py của bạn, bạn đã nhập các thư viện bắt buộc. Bạn cũng đã viết một bài kiểm tra có tên là test_files() , kiểm tra này giữ nhiệm vụ chung duy nhất giữa các bản phân phối mà role của bạn thực hiện: sao chép mẫu của bạn làm trang chủ web server .

Tệp thử nghiệm tiếp theo, test_Debian.py , chứa các thử nghiệm dành riêng cho các bản phân phối Debian. Tệp thử nghiệm này sẽ nhắm đến cụ thể đến nền tảng Ubuntu của bạn.

Tạo và chỉnh sửa file thử nghiệm Ubuntu bằng cách chạy lệnh sau:

  • nano molecule/default/tests/test_Debian.py

Đến đây bạn có thể nhập các thư viện cần thiết và xác định nền tảng ubuntu18 làm server đích. Thêm mã sau vào đầu file này:

~ / ansible-apache / phân tử / default / tests / test_Debian.py
import os import pytest  import testinfra.utils.ansible_runner  testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('ubuntu18') 

Sau đó, trong cùng một file , bạn sẽ thêm thử nghiệm test_pkg() .

Thêm mã sau vào file để xác định kiểm tra test_pkg() :

~ / ansible-apache / phân tử / default / tests / test_Debian.py
... @pytest.mark.parametrize('pkg', [     'apache2',     'ufw' ]) def test_pkg(host, pkg):     package = host.package(pkg)      assert package.is_installed 

Kiểm tra này sẽ kiểm tra xem các gói apache2ufw được cài đặt trên server hay chưa.

Lưu ý: Khi thêm nhiều bài kiểm tra vào file kiểm tra Molecule, hãy đảm bảo có hai dòng trống giữa mỗi bài kiểm tra, nếu không bạn sẽ gặp lỗi cú pháp từ Molecule.

Để xác định thử nghiệm tiếp theo, test_svc() , hãy thêm mã sau vào kiểm tra test_pkg() trong file của bạn:

~ / ansible-apache / phân tử / default / tests / test_Debian.py
... @pytest.mark.parametrize('svc', [     'apache2',     'ufw' ]) def test_svc(host, svc):     service = host.service(svc)      assert service.is_running     assert service.is_enabled 

test_svc() sẽ kiểm tra xem các dịch vụ apache2ufw có đang chạy và được kích hoạt hay không.

Cuối cùng, bạn sẽ thêm bài kiểm tra cuối cùng của bạn , test_ufw_rules() , vào file test_Debian.py .

Thêm mã này trong kiểm tra test_svc() trong file của bạn để xác định test_ufw_rules() :

~ / ansible-apache / phân tử / default / tests / test_Debian.py
... @pytest.mark.parametrize('rule', [     '-A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT' ]) def test_ufw_rules(host, rule):     cmd = host.run('iptables -t filter -S')      assert rule in cmd.stdout 

test_ufw_rules() sẽ kiểm tra xem cấu hình firewall của bạn có cho phép lưu lượng truy cập trên cổng được dịch vụ Apache sử dụng hay không.

Với mỗi thử nghiệm này được thêm vào, file test_Debian.py của bạn sẽ trông giống như sau:

~ / ansible-apache / phân tử / default / tests / test_Debian.py
import os import pytest  import testinfra.utils.ansible_runner  testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('ubuntu18')   @pytest.mark.parametrize('pkg', [     'apache2',     'ufw' ]) def test_pkg(host, pkg):     package = host.package(pkg)      assert package.is_installed   @pytest.mark.parametrize('svc', [     'apache2',     'ufw' ]) def test_svc(host, svc):     service = host.service(svc)      assert service.is_running     assert service.is_enabled   @pytest.mark.parametrize('rule', [     '-A ufw-user-input -p tcp -m tcp --dport 80 -j ACCEPT' ]) def test_ufw_rules(host, rule):     cmd = host.run('iptables -t filter -S')      assert rule in cmd.stdout 

Tệp test_Debian.py hiện bao gồm ba bài kiểm tra: test_pkg() , test_svc()test_ufw_rules() .

Lưu và thoát test_Debian.py .

Tiếp theo, bạn sẽ tạo file thử nghiệm test_RedHat.py , file này sẽ chứa các thử nghiệm dành riêng cho các bản phân phối Red Hat để nhắm đến nền tảng CentOS của bạn.

Tạo và chỉnh sửa file thử nghiệm CentOS, test_RedHat.py , bằng cách chạy lệnh sau:

  • nano molecule/default/tests/test_RedHat.py

Tương tự với file kiểm tra Ubuntu, bây giờ bạn sẽ viết ba bài kiểm tra để đưa vào file test_RedHat.py của bạn . Trước khi thêm mã kiểm tra, bạn có thể nhập các thư viện cần thiết và xác định nền tảng centos7 làm server đích, bằng cách thêm mã sau vào đầu file của bạn:

~ / ansible-apache / phân tử / default / tests / test_RedHat.py
import os import pytest  import testinfra.utils.ansible_runner  testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('centos7') 

Sau đó, thêm kiểm tra test_pkg() , kiểm tra này sẽ kiểm tra xem gói httpdfirewalld được cài đặt trên server chưa.

Sau mã cho các lần nhập thư viện của bạn, hãy thêm kiểm tra test_pkg() vào file của bạn. ( , hãy nhớ thêm hai dòng trống trước mỗi bài kiểm tra mới.)

~ / ansible-apache / phân tử / default / tests / test_RedHat.py
... @pytest.mark.parametrize('pkg', [     'httpd',     'firewalld' ]) def test_pkg(host, pkg):     package = host.package(pkg)        assert package.is_installed 

Bây giờ, bạn có thể thêm kiểm tra test_svc() đảm bảo rằng các dịch vụ httpdfirewalld đang chạy và được kích hoạt.

Thêm mã test_svc() vào file của bạn sau kiểm tra test_pkg() :

~ / ansible-apache / phân tử / default / tests / test_RedHat.py
... @pytest.mark.parametrize('svc', [     'httpd',     'firewalld' ])   def test_svc(host, svc):     service = host.service(svc)      assert service.is_running     assert service.is_enabled 

Kiểm tra cuối cùng trong file test_RedHat.py sẽ là test_firewalld() , sẽ kiểm tra xem Firewalld có dịch vụ http đưa vào danh sách trắng hay không.

Thêm kiểm tra test_firewalld() vào file của bạn sau mã test_svc() :

~ / ansible-apache / phân tử / default / tests / test_RedHat.py
... @pytest.mark.parametrize('file, content', [     ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>") ]) def test_firewalld(host, file, content):     file = host.file(file)      assert file.exists     assert file.contains(content) 

Sau khi nhập các thư viện và thêm ba bài kiểm tra, file test_RedHat.py của bạn sẽ trông giống như sau:

~ / ansible-apache / phân tử / default / tests / test_RedHat.py
import os import pytest  import testinfra.utils.ansible_runner  testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(     os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('centos7')   @pytest.mark.parametrize('pkg', [     'httpd',     'firewalld' ]) def test_pkg(host, pkg):     package = host.package(pkg)      assert package.is_installed   @pytest.mark.parametrize('svc', [     'httpd',     'firewalld' ]) def test_svc(host, svc):     service = host.service(svc)      assert service.is_running     assert service.is_enabled   @pytest.mark.parametrize('file, content', [     ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>") ]) def test_firewalld(host, file, content):     file = host.file(file)      assert file.exists     assert file.contains(content) 

Đến đây bạn đã hoàn tất việc viết các bài kiểm tra trong cả ba file test_common.py , test_Debian.pytest_RedHat.py , role của bạn đã sẵn sàng để kiểm tra. Trong bước tiếp theo, bạn sẽ sử dụng Molecule để chạy các bài kiểm tra này với role mới được cấu hình của bạn.

Bước 4 - Thử nghiệm so với role của bạn

Đến đây bạn sẽ thực hiện các bài kiểm tra mới tạo của bạn đối với role cơ sở ansible-apache bằng cách sử dụng Molecule. Để chạy thử nghiệm của bạn, hãy sử dụng lệnh sau:

  • molecule test

Bạn sẽ thấy kết quả sau khi Molecule chạy xong tất cả các bài kiểm tra:

Output
... --> Scenario: 'default' --> Action: 'verify' --> Executing Testinfra tests found in /home/sammy/ansible-apache/molecule/default/tests/... ============================= test session starts ============================== platform linux -- Python 3.6.7, pytest-4.1.1, py-1.7.0, pluggy-0.8.1 rootdir: /home/sammy/ansible-apache/molecule/default, inifile: plugins: testinfra-1.16.0 collected 12 items tests/test_common.py .. [ 16%] tests/test_RedHat.py ..... [ 58%] tests/test_Debian.py ..... [100%] ========================== 12 passed in 80.70 seconds ========================== Verifier completed successfully.

Bạn sẽ thấy Trình xác minh Verifier completed successfully trong kết quả của bạn ; điều này nghĩa là người xác minh đã thực hiện tất cả các thử nghiệm của bạn và trả lại chúng thành công.

Đến đây bạn đã hoàn thành việc phát triển role của bạn , bạn có thể commit các thay đổi của bạn đối với Git và cài đặt Travis CI để kiểm tra liên tục.

Bước 5 - Sử dụng Git để chia sẻ role đã cập nhật của bạn

Trong hướng dẫn này, cho đến nay, bạn đã nhân bản một role được gọi là ansible-apache và thêm các bài kiểm tra vào nó đảm bảo nó hoạt động trên server Ubuntu và CentOS. Để chia sẻ role đã cập nhật của bạn với công chúng, bạn phải commit những thay đổi này và đẩy chúng đến ngã ba của bạn.

Chạy lệnh sau để thêm file và áp dụng các thay đổi bạn đã thực hiện:

  • git add .

Lệnh này sẽ thêm tất cả các file mà bạn đã sửa đổi trong folder hiện tại vào vùng dàn.

Bạn cũng cần đặt tên và địa chỉ email của bạn trong git config để commit thành công. Bạn có thể làm như vậy bằng các lệnh sau:

  • git config user.email "sammy@digitalocean.com"
  • git config user.name "John Doe"

Commit các file đã thay đổi vào repository của bạn:

  • git commit -m "Configured Molecule"

Bạn sẽ thấy kết quả sau:

Output
[master b2d5a5c] Configured Molecule 8 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 molecule/default/Dockerfile.j2 create mode 100644 molecule/default/INSTALL.rst create mode 100644 molecule/default/molecule.yml create mode 100644 molecule/default/playbook.yml create mode 100644 molecule/default/tests/test_Debian.py create mode 100644 molecule/default/tests/test_RedHat.py create mode 100644 molecule/default/tests/test_common.py

Điều này nghĩa là bạn đã áp dụng các thay đổi của bạn thành công. Bây giờ, hãy đẩy những thay đổi này vào fork của bạn bằng lệnh sau:

  • git push -u origin master

Bạn sẽ thấy dấu nhắc cho thông tin đăng nhập GitHub của bạn . Sau khi nhập các thông tin đăng nhập này, mã của bạn sẽ được đẩy vào repository của bạn và bạn sẽ thấy kết quả này:

Output
Counting objects: 13, done. Compressing objects: 100% (12/12), done. Writing objects: 100% (13/13), 2.32 KiB | 2.32 MiB/s, done. Total 13 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), completed with 2 local objects. To https://github.com/username/ansible-apache.git 009d5d6..e4e6959 master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.

Nếu bạn truy cập repository của fork tại github.com/ username /ansible-apache , bạn sẽ thấy một commit mới có tên là Configured Molecule phản ánh những thay đổi bạn đã thực hiện trong file .

Như vậy, bạn có thể tích hợp Travis CI với repository mới của bạn để bất kỳ thay đổi nào được thực hiện đối với role của bạn sẽ tự động kích hoạt các bài kiểm tra Phân tử. Điều này sẽ đảm bảo role của bạn luôn hoạt động với server Ubuntu và CentOS.

Bước 6 - Tích hợp Travis CI

Trong bước này, bạn sẽ tích hợp Travis CI vào quy trình làm việc của bạn . Sau khi được kích hoạt, bất kỳ thay đổi nào bạn đẩy vào fork của bạn sẽ kích hoạt bản dựng Travis CI. Mục đích của việc này là đảm bảo Travis CI luôn chạy molecule test khi nào những người đóng góp thực hiện thay đổi. Nếu bất kỳ thay đổi vi phạm nào được thực hiện, Travis sẽ khai báo trạng thái xây dựng như vậy.

Tiếp tục đến Travis CI để kích hoạt repository của bạn. Điều hướng đến trang profile của bạn, nơi bạn có thể nhấp vào nút Kích hoạt cho GitHub.

Bạn có thể tìm thêm hướng dẫn tại đây về cách kích hoạt repository trong Travis CI.

Để Travis CI hoạt động, bạn phải tạo một file cấu hình có chứa hướng dẫn cho nó. Để tạo file cấu hình Travis, hãy quay lại server của bạn và chạy lệnh sau:

  • nano .travis.yml

Để sao chép môi trường bạn đã tạo trong hướng dẫn này, bạn sẽ chỉ định các tham số trong file cấu hình Travis. Thêm nội dung sau vào file của bạn:

~ / ansible-apache / .travis.yml
--- language: python python:   - "2.7"   - "3.6" services:   - docker install:   - pip install molecule docker script:   - molecule --version   - ansible --version   - molecule test 

Các thông số bạn đã chỉ định trong file này là:

  • language : Khi bạn chỉ định Python làm ngôn ngữ, môi trường CI sử dụng các version virtualenv riêng biệt cho từng version Python mà bạn chỉ định trong khóa python .
  • python : Ở đây, bạn đang chỉ định rằng Travis sẽ sử dụng cả Python 2.7 và Python 3.6 để chạy thử nghiệm của bạn.
  • services : Bạn cần Docker để chạy thử nghiệm trong Molecule. Bạn đang chỉ định rằng Travis phải đảm bảo Docker hiện diện trong môi trường CI của bạn.
  • install : Tại đây, bạn đang chỉ định các bước cài đặt sơ bộ mà Travis CI sẽ thực hiện trong virtualenv của bạn.
    • pip install molecule docker docker pip install molecule docker để kiểm tra xem Ansible và Molecule có xuất hiện cùng với thư viện Python cho API từ xa Docker hay không.
  • script : Đây là chỉ định các bước mà Travis CI cần thực hiện. Trong file của bạn, bạn đang chỉ định ba bước:
    • molecule --version in version Molecule nếu Molecule đã được cài đặt thành công.
    • ansible --version in version Ansible nếu Ansible đã được cài đặt thành công.
    • molecule test cuối cùng chạy kiểm tra Phân tử của bạn.

Lý do bạn chỉ định molecule --versionansible --version là để bắt lỗi trong trường hợp quá trình xây dựng không thành công do không thể ansible hoặc cấu hình sai molecule do lập version .

Khi bạn đã thêm nội dung vào file cấu hình Travis CI, hãy lưu và thoát .travis.yml .

Bây giờ, mỗi khi bạn đẩy bất kỳ thay đổi nào vào repository của bạn , Travis CI sẽ tự động chạy một bản dựng dựa trên file cấu hình ở trên. Nếu bất kỳ lệnh nào trong khối script lỗi, Travis CI sẽ báo cáo trạng thái xây dựng như vậy.

Để dễ dàng xem trạng thái xây dựng, bạn có thể thêm huy hiệu cho biết trạng thái xây dựng vào README của role của bạn. Mở file README.md bằng editor :

  • nano README.md

Thêm dòng sau vào README.md để hiển thị trạng thái xây dựng:

~ / ansible-apache / README.md
[![Build Status](https://travis-ci.org/username/ansible-apache.svg?branch=master)](https://travis-ci.org/username/ansible-apache) 

Thay thế username bằng tên user GitHub của bạn. Commit và đẩy các thay đổi vào repository của bạn như bạn đã làm trước đó.

Đầu tiên, hãy chạy lệnh sau để thêm .travis.ymlREADME.md vào vùng dàn:

  • git add .travis.yml README.md

Bây giờ commit các thay đổi đối với repository của bạn bằng cách thực hiện:

  • git commit -m "Configured Travis"

Cuối cùng, đẩy những thay đổi này vào fork của bạn bằng lệnh sau:

  • git push -u origin master

Nếu bạn chuyển đến repository GitHub của bạn , bạn sẽ thấy rằng ban đầu nó báo cáo bản dựng: không xác định .

xây dựng-tình trạng-không xác định

Trong vòng vài phút, Travis sẽ khởi tạo một bản dựng mà bạn có thể theo dõi tại trang web Travis CI. Khi quá trình xây dựng thành công, GitHub cũng sẽ báo cáo trạng thái như vậy trên repository của bạn - sử dụng huy hiệu bạn đã đặt trong file README của bạn :

xây dựng-trạng thái-vượt qua

Bạn có thể truy cập chi tiết đầy đủ của các bản dựng bằng cách truy cập trang web Travis CI:

travis-build-status

Đến đây bạn đã cài đặt thành công Travis CI cho role mới của bạn , bạn có thể liên tục kiểm tra và tích hợp các thay đổi đối với role Ansible của bạn .

Kết luận

Trong hướng dẫn này, bạn đã thực hiện một role cài đặt và cấu hình web server Apache từ GitHub và thêm tích hợp cho Molecule bằng cách viết các bài kiểm tra và cấu hình các bài kiểm tra này để hoạt động trên các containers Docker chạy Ubuntu và CentOS. Bằng cách đẩy role mới tạo của bạn lên GitHub, bạn đã cho phép user khác truy cập role của bạn . Khi những người đóng góp thay đổi role của bạn, Travis CI sẽ tự động chạy Molecule để kiểm tra role của bạn.

Khi bạn thấy phù hợp với việc tạo các role và thử nghiệm chúng với Molecule, bạn có thể tích hợp tính năng này với Ansible Galaxy để các role tự động được đẩy khi quá trình xây dựng thành công.


Tags:

Các tin liên quan

Cách đảm bảo chất lượng mã bằng SonarQube trên Ubuntu 18.04
2019-01-11
Cách cài đặt và bảo mật Memcached trên Ubuntu 18.04
2019-01-04
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 16.04
2018-11-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04
2018-11-06
Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04
2018-10-18
Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16
Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]
2018-07-16
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13