Chạy tập lệnh python trong gitlab ci

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

GitLab có thể chạy Python không?

Đối với môi trường thời gian chạy, bạn có thể sử dụng môi trường Python mặc định do GitLab cung cấp [thêm về điều đó sau một phút], nhưng chúng tôi' .

GitLab CI có tốt hơn Jenkins không?

Cả Jenkins và GitLab đều có những ưu điểm và hạn chế riêng, điều đó có nghĩa là việc lựa chọn giữa chúng là tùy thuộc vào tình huống mà chúng sẽ được sử dụng cho. Mặc dù Jenkins mang đến sự linh hoạt hơn và chỉ yêu cầu JRE làm điều kiện tiên quyết, nhưng nó thiếu hỗ trợ cho SLA và các tính năng quản lý dự án mà GitLab cung cấp .

Tôi có thể chạy GitLab CI cục bộ không?

Các lệnh GitLab Runner . Nó cho phép các công việc được chỉ định trong. gitlab-ci. yml để chạy cục bộ. 'gitlab-Runner exec' command is the command that easily lets you test builds locally. It allows the jobs specified in . gitlab-ci. yml to run locally!

Có plugin nào cho GitLab không?

Plugin GitLab sẽ đặt một số biến môi trường khi GitLab kích hoạt bản dựng và bạn có thể sử dụng các biến đó để kiểm soát mã nào được sao chép từ Git.

Chủ Đề