Cập nhật đường ống CI để cho phép PHP8
Với việc phát hành PHP8, mọi người sẽ tranh giành để cập nhật các ứng dụng PHP của họ. Có, PHP 7.4 được hỗ trợ cho đến ngày 28 tháng 11 năm 2021 , nhưng vẫn còn rất nhiều việc phải làm. Đặc biệt nếu ứng dụng của bạn sử dụng các thư viện bên ngoài. Điều này đặt bạn vào lòng thương xót của những người bảo trì.
Tôi duy trì một trong những gói mà bạn có thể dựa vào đó, một trình xác thực mật khẩu dựa trên entropy . Biết rằng PHP 8 sẽ được phát hành khiến tôi muốn đi trước những bước ngoặt về việc di chuyển để có thể sử dụng nó. Để làm được điều đó và có một số bằng chứng rằng nó sẽ ổn, tôi cần phải cập nhật đường ống CI để cũng chạy các bài kiểm tra đơn vị trong PHP 8. Đây sẽ là điểm khởi đầu cho rất nhiều nhóm có khả năng bao phủ mã tốt, tôi tưởng tượng. Đây là cách tôi tìm thấy trải nghiệm (với các vấn đề tôi gặp phải). Đầu tiên, đó là trường hợp sao chép và đổi tên bộ thử nghiệm Đơn vị PHP hiện có, dẫn đến:
PHP 8.0 Tests:
image: ubuntu:focal
stage: unitTest
# Install composer dependencies
before_script:
- DEBIAN_FRONTEND=noninteractive apt-get update
- DEBIAN_FRONTEND=noninteractive apt-get -y install curl php php-xdebug php-curl php-dom php-json php-mbstring php-pdo zip unzip php-zip
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
script:
- composer install
- ./vendor/bin/phpunit --coverage-text --colors=never --configuration phpunit.xml --log-junit phpunit_results.xml
Điều đó không được sử dụng nhiều, vì nó vẫn chạy mọi thứ trên PHP 7.4 (mặc định với Ubuntu 20.04). Nó cần PHP được cập nhật, vì vậy tôi đã thêm PPA để cho phép điều này. Điều này cần thêm dòng sau vào đầu before_script
phần:
- DEBIAN_FRONTEND=noninteractive apt-get update
- DEBIAN_FRONTEND=noninteractive apt install -y software-properties-common
- DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/php
Tôi đã thay đổi các phần tử php thành php8.0, một lần nữa trong tập lệnh trước:
- DEBIAN_FRONTEND=noninteractive apt-get -y install curl php8.0 php8.0-xdebug php8.0-curl php8.0-dom php8.0-json php8.0-mbstring php8.0-pdo zip unzip php8.0-zip
Xong – xếp hàng hứng khởi … THẤT BẠI. Bảng điều khiển đường ống hiển thị lỗi sau:
E: Package 'php8.0-json' has no installation candidate
Cái gì…?
Nó chỉ ra rằng JSON được bao gồm trong PHP 8 theo mặc định , điều này giúp khắc phục sự cố khi quên cài đặt nó. Khi nó không cần thiết, tôi đã xóa phần php8.0-json, vì vậy công việc đầy đủ của unit test là:
PHP 8.0 Tests:
image: ubuntu:focal
stage: unitTest
before_script:
- DEBIAN_FRONTEND=noninteractive apt-get update
- DEBIAN_FRONTEND=noninteractive apt install -y software-properties-common
- DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/php
- DEBIAN_FRONTEND=noninteractive apt-get update
- DEBIAN_FRONTEND=noninteractive apt-get -y install curl php8.0 php8.0-xdebug php8.0-curl php8.0-dom php8.0-mbstring php8.0-pdo zip unzip php8.0-zip
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
script:
- composer install
- ./vendor/bin/phpunit --coverage-text --colors=never --configuration phpunit.xml --log-junit phpunit_results.xml
Tất cả đã hoàn thành, tất cả đều tốt để chạy … Thất bại.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires php ^7.4 but your php version (8.0.0RC3) does not satisfy that requirement.
Có, tôi đã quên cập nhật phiên bản PHP được yêu cầu trong composer.json
. Sau đó nó đã được thay đổi từ
"require": {
"php": "^7.4"
}
đến
"require": {
"php": "^7.4|^8.0"
}
Chạy lại đường ống. Thành công!
Sự kết luận
Đối với một thành phần nhỏ như trình xác thực mật khẩu của tôi, đây là một bài tập nhỏ. Đó là một số ít các tệp và không có nhiều thứ phức tạp. Các vấn đề tôi gặp phải là do tôi quá vội vàng để đạt được thành công (quên cập nhật yêu cầu PHP) hoặc đơn giản là không biết rằng JSON đã được bao gồm theo mặc định ngay bây giờ. Quá trình cập nhật thực tế của đường ống diễn ra khá nhanh chóng. Đây là một bài tập đáng thực hiện đối với một nhánh phát triển (ngay cả khi nó chẳng đi đến đâu trong một thời gian) để xem liệu có bất kỳ vấn đề tương thích nào sắp xảy ra cho ứng dụng của bạn hay không. Nếu có, bạn có thể nhận biết chúng sớm và bắt đầu làm việc để giảm thiểu hoặc giải quyết chúng để duy trì phiên bản PHP được hỗ trợ.