GitLab DevOps: PHP Lint

3379 단어 phpdevopsgitlab
다음은 GitLab DevOps 설정의 또 다른 부분입니다. 코드가 GitLab에 커밋될 때 Drupal(모듈 및 테마)의 사용자 지정 코드 폴더에서 PHP linter를 실행하여 눈에 띄는 구문 버그가 없는지 확인하고 싶습니다. . 개인적으로 가장 좋아하는 오류는 모든 테스트를 수행한 후 vim을 종료하려는 파일에 ":wq"가 삽입되는 경우입니다.

GitLab’s ability to extend other functions, even functions in other projects 을 활용하여 이것을 두 부분으로 나눴습니다. 내 실제 작업 시나리오는 GitLab을 사용하므로 GitLab CI를 사용합니다. 여기에서 공유하기 위해 my personal GitHub에 넣었습니다. 직관적이지 않은 조합이라는 것을 알고 있습니다.

일반 CI/CD 기능



테스트하려면 먼저 PHP 8.0을 실행할 수 있는 일반 Oracle Linux 8 이미지와 Drupal 사이트용 작성기가 필요합니다.

## Build an Oracle Linux 8 container, used by other tests below ##
.ol8_lamp_build:
  stage: test
  image: oraclelinux:8
  before_script:
    - dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    - dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
    - dnf -y module enable php:remi-8.0
    - dnf install -y php php-gd php-pdo zip unzip git php-curl php-mbstring php-zip php-json php-xml php-simplexml php-mysqlnd php-pecl-apcu wget curl
    - php -v
    - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    - php composer-setup.php
    - php -r "unlink('composer-setup.php');"


파트 1은 몇 가지 일반 CI 작업 템플릿을 포함하는 프로젝트입니다. tests.yml 파일에 있는 그 중 하나는 PHP Lint 테스트입니다. 특정 폴더에 있는 모든 php 파일을 테스트하고 싶다고 말하는 것은 생각만큼 쉽지 않습니다. 재귀적으로 적용하기 위한 플래그가 없으므로 루프가 필요합니다.

### PHP lint test ###
.php_lint:
  stage: test
  extends: .ol8_lamp_build
  variables:
    DIRECTORIES: "./"
    EXTENSIONS: "php"
  script:
    ## Recursively checks for files of specified extensions in specified directories and completes php lint on them
    - cwd="$(pwd)"
    - |
      for DIRECTORY in $DIRECTORIES 
        do
          cd $DIRECTORY
          for EXT in $EXTENSIONS
            do
              files="$(find -name *.${EXT} -type f)"

              for file in ${files}
                do php -l ${file};
              done;
            done;
          cd $cwd;
        done;


여기에는 테스트를 시작할 디렉터리와 테스트할 확장에 대한 변수가 있습니다. 확장 변수는 기본적으로 php 파일로만 지정되지만 다른 확장을 포함하도록 재정의할 수 있습니다. 이는 다른 확장이 .module 및 .theme와 같은 php 코드에 사용되는 Drupal에서 유용합니다.

프로젝트의 CI 파일



두 번째 부분은 이러한 일반 템플릿을 참조하는 특정 프로젝트입니다. 실제 상황에서 이것이 다른 GitLab 프로젝트에 있을 것이라는 가정하에 전체 프로젝트 참조를 사용하면 프로젝트의 .gitlab-ci.yml 파일에서 다음과 같이 보입니다.

# Includes general CI jobs to extend from
include:

    - project: '[path to the GitLab project with CI]'
      ref: main
      file: test.yml

## Stages ##
stages:
  - test

## Test Jobs ##

### Tests for PHP errors in custom code ###
php:
  extends: .php_lint
  variables:
    DIRECTORIES: ./web/themes/custom ./web/modules/custom
    EXTENSIONS: php module theme inc


이 예제는 Drupal 8+ 사용자 정의 테마 및 사용자 정의 모듈 디렉토리에 있는 모든 .php, .module, .theme 및 .inc 파일에 대해 PHP 구문 테스트를 실행합니다.

좋은 웹페이지 즐겨찾기