Các dự án Python của tôi cho đến nay chỉ bao gồm tôi thực hiện kiểm tra thủ công [tôi. e. chạy chương trình Python của tôi với môi trường nhà phát triển của tôi và xem nó có hoạt động không]. Mặc dù kiểm thử thủ công có vị trí của nó, nhưng tôi đã nghĩ đến cách giới thiệu một số kiểm thử tự động thông qua kiểm soát nguồn với tích hợp liên tục. Điều này sẽ cho phép tôi giới thiệu các cam kết mới cho mã của mình và xem liệu nó có vượt qua các bài kiểm tra hay không
Vào cuối tuần trước [kỳ nghỉ ngân hàng kéo dài 4 ngày đối với nhiều người ở Vương quốc Anh], tôi đã quyết định sử dụng lại Raspberry Pi của mình và bắt tay vào việc
Đối với dự án này tôi đang sử dụng
Raspberry Pi 4 [4GB] để chạy GitLab
Raspberry Pi 4 [2GB] để chạy GitLab Runner
Raspberry Pi 3 [1GB] để chạy Grafana và nơi tôi chạy Python của mình từ đó
Mã Python API Grafana của tôi mà tôi đã bắt đầu trình bày chi tiết tại đây và sau đó bổ sung thêm vào đây
Tất cả các thiết bị Pi đang chạy không đầu bằng cách sử dụng bản cài đặt mới của Raspberry Pi OS
Lưu ý về các công cụ Tích hợp liên tục
Tôi sẽ sử dụng GitLab cho dự án này vì tôi muốn chạy hệ thống kiểm soát nguồn và CI cục bộ trên Raspberry Pi của mình. Các công cụ khác có sẵn để cài đặt cục bộ [e. g. như Jenkins] và một số dịch vụ trực tuyến/qua đám mây cung cấp kiểm soát nguồn và/hoặc CI [e. g. GitHub, AWS CodePipeline, Azure Pipelines, CircleCI]. Nếu bạn có một mục yêu thích cụ thể hoặc một mục mà bạn muốn thử thì hãy chọn mục đó
Cài đặt GitLab
GitLab có bản cài đặt chính thức cho Raspberry Pi và nên chạy nó trên Pi 4 với ít nhất 4GB. Bạn có thể tìm thấy ghi chú cho cài đặt này tại https. // tài liệu. gitlab. com/omnibus/settings/rpi. html và tôi khuyên bạn nên đọc chúng nhưng để tóm tắt
- Chỉnh sửa /etc/dphys-swapfile để thay đổi dung lượng hoán đổi thành 4GB
- Thêm kho lưu trữ Gitlab bằng cách sử dụng. cuộn tròn sudo -sS https. //gói. gitlab. com/cài đặt/kho lưu trữ/gitlab/raspberry-pi2/script. cuộc tranh luận. sh. sudo bash
- Thiết lập GitLab, thay thế URL bằng tên máy chủ cục bộ của thiết bị [e. g. mâm xôi. địa phương] bằng cách sử dụng. sudo EXTERNAL_URL=”;
- Sau khi cài đặt, hãy trỏ trình duyệt của bạn vào thiết bị [e. g. , http. // mâm xôi. local] hoặc nếu bạn không sử dụng DNS cục bộ/tệp máy chủ đã chỉnh sửa thì hãy trỏ tệp đó vào http. //IP_ADDRESS_OF_DEVICE. GitLab bây giờ sẽ yêu cầu bạn thiết lập tài khoản root
- Sau khi thiết lập root, hãy thêm tài khoản thứ hai để sử dụng thường xuyên [tôi. e. không sử dụng root cho các hoạt động hàng ngày]
Ghi chú. Tôi đang sử dụng môi trường nhà phát triển cá nhân nên chưa bao gồm các tùy chọn cho SMTP [e. g qua Postfix] và các tùy chọn HTTP cho thử nghiệm ngắn ban đầu này. Nếu sử dụng Gitlab lâu dài, trong môi trường không dành cho nhà phát triển hoặc sử dụng Gitlab ngắn hạn cho bất kỳ điều gì nhạy cảm, vui lòng đảm bảo đã đọc và sử dụng HTTPS
Cài đặt GitLab Runner
Trình chạy GitLab cho phép GitLab chạy các lệnh đối với mã mà nó đang lưu trữ. GitLab Runners có thể được cài đặt theo một số cách khác nhau, bao gồm cả bộ chứa [e. g. Docker, Kubernetes] nhưng tôi sẽ cài đặt nó với tùy chọn shell trên Raspberry Pi 4 [2GB]
Ghi chú. GitLab khuyên bạn nên cài đặt GitLab Runner trên một phiên bản riêng cho bản cài đặt GitLab [e. g. , không đặt cả hai trên cùng một máy/phiên bản/máy ảo]
Cũng như bước trước, GitLab duy trì hướng dẫn cài đặt chính thức trình chạy GitLab có tại https. // tài liệu. gitlab. com/runner/install/linux-kho. html và một lần nữa tôi khuyên bạn nên đọc nhưng để tóm tắt
- Thêm kho lưu trữ GitLab bằng lệnh. cuộn tròn -L “;. sudo bash
- Cài đặt phiên bản mới nhất của GitLab Runner bằng lệnh. exportGITLAB_RUNNER_DISABLE_SKEL=true;
Thêm Dự án vào GitLab và đăng ký GitLab Runner
Tạo một dự án mới trong GitLab và sau đó trong dự án, sử dụng menu bên trái để tìm “Cài đặt” và sau đó “CI/CD” trong “Cài đặt”
- Menu bên GitLab hiển thị Cài đặt > CI/CD
- Cài đặt GitLab Runners
Trong phần “CI/CD” này là một tùy chọn dành cho “Người chạy” và trong “Người chạy” là URL và mã thông báo đăng ký cần thiết để chuyển đến Người chạy GitLab của bạn. Lưu ý những điều này và trên Pi đang chạy GitLab Runner, hãy sử dụng lệnh.
sudo gitlab-runner register –url URL_HERE –registration-token REGISTRTION_TOKEN_HERE
Thay thế URL_HERE và REGISTRATION_TOKEN_HERE bằng các giá trị phù hợp.
Còn mã Python và các bài kiểm tra thì sao?
GitLab và GitLab Runner đã được thiết lập, vì vậy bây giờ hãy thêm một số mã. Như đã đề cập trong phần giới thiệu, tôi muốn sử dụng một số thử nghiệm với Python và trong lần thử đầu tiên này, tôi sẽ sửa đổi dự án API Grafana của mình
Tôi sẽ sử dụng Kiểm tra đơn vị. Kiểm tra đơn vị kiểm tra các thành phần mã riêng lẻ để xác thực rằng mỗi thành phần hoạt động như mong đợi. Để chạy thử nghiệm, tôi đã tạo một tệp mới có tên là “test_main. py” trong thư mục gốc của dự án nhập thư viện unittest và chứa các bài kiểm tra tôi đã tạo. Cho đến nay, những điều này khá đơn giản và chỉ cần kiểm tra xem các giá trị được trả về từ các hàm trong mã Python của tôi có trả về các giá trị là chuỗi không
Đây là mã của tôi cho test_main. py
import unittest
import main
# loading settings from .env file in root of project directory
from dotenv import load_dotenv
load_dotenv[]
class grafanaTests[unittest.TestCase]:
"""Tests for GeekTechStuff Grafana API Python"""
def test_admin_name_is_string[self]:
admin_username = main.get_username[]
self.assertIs[type[admin_username],str]
def test_admin_password_is_string[self]:
admin_password = main.get_password[]
self.assertIs[type[admin_password],str]
def test_grafana_url_is_string[self]:
grafana_url = main.get_url[]
self.assertIs[type[grafana_url],str]
def test_grafana_admin_url_is_string[self]:
admin_url = main.create_url[]
self.assertIs[type[admin_url],str]
if __name__ == '__main__':
unittest.main[]
Một lưu ý nhanh [đối với tôi trong tương lai], mỗi chức năng kiểm tra phải có một tên bắt đầu bằng test_ để UnitTest chạy nó
- Python unittest hiển thị 4 bài kiểm tra thành công
- Tệp kiểm tra Python chứa các bài kiểm tra đơn vị để chạy
- GeekTechStuff Grafana API Python hiển thị các chức năng cần kiểm tra
Sau khi tạo, các bài kiểm tra có thể được chạy cục bộ [e. g. không có CI] thông qua lệnh
python3 -m kém nhất
Và UnitTest sẽ xuất ra dấu chấm [. ] cho mỗi thử nghiệm thành công. Nếu bạn muốn xem một đầu ra dài dòng hơn [e. g. tên của các bài kiểm tra], sau đó thêm tùy chọn -v vào lệnh
Thêm các bài kiểm tra vào GitLab CI
Sau đó, các thử nghiệm đã tạo có thể được thêm vào GitLab để chúng chạy mỗi khi kho lưu trữ được cập nhật [e. g. mỗi khi mã mới được cam kết], cho phép kiểm tra và gắn cờ bất kỳ mã vi phạm chương trình nào. Để thêm các bài kiểm tra vào GitLab, cần có một tệp mới ở thư mục gốc của kho lưu trữ có tên là “. gitlab-ci. yml“. Tệp YAML này chứa các hướng dẫn cho GitLab biết cách kiểm tra mã kho lưu trữ. Tôi đã sửa đổi một tệp đơn giản [được cung cấp từ các mẫu GitLab] để tạo môi trường ảo, cài đặt các mô-đun Python cần thiết và chạy lệnh UnitTest từ phía trên
# This file is a template, and might need editing before it works on your project.
# Official language image. Look for the different tagged releases at:
# //hub.docker.com/r/library/python/tags/
image: python:latest
# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
# Pip's cache doesn't store the python packages
# //pip.pypa.io/en/stable/reference/pip_install/#caching
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
cache:
paths:
- .cache/pip
- venv/
before_script:
- python3 -V # Print out python version for debugging
- pip3 install virtualenv
- virtualenv venv
- source venv/bin/activate
- pip3 install requests
- pip3 install python-dotenv
test:
script:
- python3 -m unittest
Để xem kết quả thử nghiệm/đường ống đang hoạt động, hãy tải cam kết lên kho dự án, sau đó mở dự án trong GitLab, nhấp vào CI/CD và nhấp vào Đường ống. Sau khi vượt qua các bài kiểm tra ban đầu, tôi đã thay đổi mã của mình [biết rằng nó sẽ thất bại] để kiểm tra xem nó có thất bại trong GitLab hay không và bây giờ tôi đang tìm cách thêm vào các bài kiểm tra để bao gồm chế độ mô phỏng các đối tượng