본문으로 건너뛰기
cccskills
무료GitHub에 공개

gitlab-ci

Use this skill when authoring or debugging GitLab CI/CD pipelines (.gitlab-ci.yml) — e.g. "add a CI pipeline for this Drupal project", "run phpcs/phpstan/phpunit in GitLab CI", "deploy with drush from a pipeline", "why is my job not running", "cache composer dependencies", or anything involving stages, rules, artifacts, environments, or GitLab runners.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구GitLab
설치 방법 보기

포함된 파일(1)

  • SKILL.md4.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

GitLab CI/CD Skill

GitLab CI runs pipelines defined in .gitlab-ci.yml at the repository root. This skill covers pipeline authoring with a Drupal project as the working example: validate → test → build → deploy, with composer caching and drush-based deployment.


Pipeline anatomy

stages:
  - validate
  - test
  - deploy

default:
  image: php:8.3-cli
  before_script:
    - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

variables:
  COMPOSER_CACHE_DIR: "$CI_PROJECT_DIR/.composer-cache"

cache:
  key:
    files:
      - composer.lock        # cache invalidates when the lock file changes
  paths:
    - .composer-cache/
    - vendor/
  • stages run sequentially; jobs within a stage run in parallel.
  • default holds settings shared by all jobs.
  • Cache vs artifacts: cache is best-effort storage between pipelines (composer/npm caches); artifacts pass build results between jobs of the same pipeline and can be downloaded from the UI.

Controlling when jobs run — rules:

rules: replaces the deprecated only/except:

phpcs:
  stage: validate
  script:
    - composer install --no-progress
    - vendor/bin/phpcs --standard=Drupal,DrupalPractice web/modules/custom
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

First matching rule wins. Common conditions:

GoalRule
MR pipelines onlyif: $CI_PIPELINE_SOURCE == "merge_request_event"
Default branch onlyif: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Tags onlyif: $CI_COMMIT_TAG
Skip on draft MRsif: $CI_MERGE_REQUEST_TITLE =~ /^Draft:/ + when: never
Manual gatewhen: manual (e.g. production deploy)

Drupal test jobs

phpstan:
  stage: test
  script:
    - composer install --no-progress
    - vendor/bin/phpstan analyse web/modules/custom

phpunit:
  stage: test
  services:
    - name: mariadb:11.4
      alias: db
  variables:
    MARIADB_DATABASE: drupal_test
    MARIADB_ROOT_PASSWORD: root
    SIMPLETEST_DB: mysql://root:root@db/drupal_test
    SIMPLETEST_BASE_URL: http://localhost
  script:
    - composer install --no-progress
    - vendor/bin/phpunit -c web/core/phpunit.xml.dist web/modules/custom
  artifacts:
    when: always
    reports:
      junit: junit.xml          # test results shown in MR widget

services: starts sidecar containers (database, redis) reachable by alias.


Deploying with drush

deploy_prod:
  stage: deploy
  environment:
    name: production
    url: https://www.example.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual              # require a human click for prod
  script:
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - ssh deploy@prod.example.com "cd /var/www/site && git pull --ff-only
        && composer install --no-dev --optimize-autoloader
        && vendor/bin/drush deploy -y"

drush deploy runs updb → config:import → cache:rebuild in the right order. Store SSH_PRIVATE_KEY as a masked, protected CI/CD variable (Settings → CI/CD → Variables) — never in the repository.

environment: makes deployments visible under Operations → Environments and enables rollback tracking.


Reuse — include and needs

include:
  - local: .gitlab/ci/common.yml                  # split big configs
  - component: gitlab.com/components/sast/sast@main   # CI/CD component

phpunit:
  needs: ["phpcs"]      # DAG: start as soon as phpcs passes, skip stage wait

needs: builds a directed acyclic graph so independent jobs don't wait for their whole previous stage.


Troubleshooting

SymptomFix
Job never appears in pipelineA rules: entry filtered it out — check $CI_PIPELINE_SOURCE for the trigger type
"This job is stuck"No runner with matching tags:; check runner availability
Composer re-downloads everything each runCache key/path mismatch — cache vendor/ and $COMPOSER_CACHE_DIR, key on composer.lock
PHPUnit cannot connect to DBService alias must match host in SIMPLETEST_DB; wait for DB startup or use healthcheck-aware images
Masked variable prints as [MASKED] but auth failsVariable contains newline/CR — for SSH keys use tr -d '\r' and file-type variables
Pipeline runs twice per MR pushBranch + MR pipelines both enabled — use workflow: rules: to keep one

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Safe deployment workflow for Drupal 10/11 sites: pre-flight checks, backup, the correct update sequence (composer install, database updates, config import, cache rebuild), verification, and rollback plan. Use when deploying to any environment, releasing to production, or when the user asks to "push changes live", "update the server", or run a release. Also use for multisite releases where each site needs its own database update pass.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

Use this skill when authoring or editing Docker Compose files (compose.yaml / docker-compose.yml), running multi-container stacks, or containerizing a Drupal/PHP application — e.g. "set up a local Drupal stack with nginx and MariaDB", "add Redis to my compose file", "why won't my containers start", "split dev and prod compose configuration". Also trigger for compose commands (up, down, logs, exec, watch) and healthcheck/dependency issues between services.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

Use this skill when running local AI models with Docker Model Runner — the `docker model` CLI — e.g. "run an LLM locally with Docker", "pull a model from the ai/ namespace", "connect my app to a local model", "use a local model as backend for the Drupal AI module", or when wiring the `models:` top-level element into a compose.yaml. Covers pulling/running models, OpenAI-compatible endpoints, and Compose integration.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

Use for operational Drupal 11 workflows in DDEV environments, including safe updates, backup-first procedures, and troubleshooting commands.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

Use when creating or extending Drupal 11 custom modules, including scaffolding, service architecture, and dependency injection best practices.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

Use when auditing Drupal 11 custom modules/themes for security issues such as unsafe input handling, XSS risks, SQL injection, and access control gaps.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

siva01c/claude-plugins162026년 9월 26일 업데이트

siva01c의 스킬 모두 보기

이 스킬의 문제 신고