Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Multi-platform CI/CD pipeline expertise. Generate GitHub Actions, GitLab CI, Jenkins, and Azure Pipelines configurations. Analyze failures, optimize execution time, validate syntax, and configure matrix builds and caching strategies.
.claude/skills/a5c-ai-cicd-pipelines/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-18 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 92% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 98% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 97% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 142% | 0% |
You are cicd-pipelines - a specialized skill for multi-platform CI/CD pipeline expertise. This skill provides comprehensive capabilities for designing, implementing, and optimizing continuous integration and deployment pipelines.
This skill enables AI-powered CI/CD operations including:
Generate and optimize GitHub Actions workflows:
yamlname: CI/CD Pipeline on: push: branches: [main, develop] pull_request: branches: [main] env: NODE_VERSION: '20' REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: test: runs-on: ubuntu-latest strategy: matrix: node: [18, 20, 22] steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm test -- --coverage - name: Upload coverage uses: codecov/codecov-action@v4 if: matrix.node == 20 build: needs: test runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max deploy: needs: build runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' environment: production steps: - name: Deploy to production run: | echo "Deploying ${{ github.sha }}"
Generate GitLab CI/CD configurations:
yamlstages: - test - build - deploy variables: DOCKER_TLS_CERTDIR: "/certs" .node-cache: &node-cache cache: key: files: - package-lock.json paths: - node_modules/ policy: pull-push test: stage: test image: node:20 <<: *node-cache script: - npm ci - npm test -- --coverage coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/' artifacts: reports: coverage_report: coverage_format: cobertura path: coverage/cobertura-coverage.xml build: stage: build image: docker:24 services: - docker:24-dind before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH deploy-production: stage: deploy environment: name: production url: https://app.example.com script: - echo "Deploying to production" rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual
Generate Jenkinsfile configurations:
groovypipeline { agent any environment { DOCKER_REGISTRY = 'registry.example.com' IMAGE_NAME = 'myapp' } options { timeout(time: 30, unit: 'MINUTES') buildDiscarder(logRotator(numToKeepStr: '10')) disableConcurrentBuilds() } stages { stage('Checkout') { steps { checkout scm } } stage('Test') { agent { docker { image 'node:20' args '-v $HOME/.npm:/root/.npm' } } steps { sh 'npm ci' sh 'npm test' } post { always { junit 'test-results/**/*.xml' } } } stage('Build') { steps { script { docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:${env.BUILD_NUMBER}") } } } stage('Push') { when { branch 'main' } steps { script { docker.withRegistry("https://${DOCKER_REGISTRY}", 'docker-credentials') { docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${env.BUILD_NUMBER}").push() docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${env.BUILD_NUMBER}").push('latest') } } } } stage('Deploy') { when { branch 'main' } steps { echo "Deploying build ${env.BUILD_NUMBER}" } } } post { failure { emailext ( subject: "Pipeline Failed: ${env.JOB_NAME}", body: "Check console output at ${env.BUILD_URL}", recipientProviders: [developers(), requestor()] ) } } }
Generate Azure DevOps pipeline configurations:
yamltrigger: branches: include: - main - develop pool: vmImage: 'ubuntu-latest' variables: - group: production-variables - name: imageRepository value: 'myapp' - name: containerRegistry value: 'myregistry.azurecr.io' stages: - stage: Build displayName: 'Build and Test' jobs: - job: Test displayName: 'Run Tests' steps: - task: NodeTool@0 inputs: versionSpec: '20.x' - script: npm ci displayName: 'Install dependencies' - script: npm test -- --ci --reporters=default --reporters=jest-junit displayName: 'Run tests' - task: PublishTestResults@2 inputs: testResultsFormat: 'JUnit' testResultsFiles: 'junit.xml' - job: Build displayName: 'Build Container' dependsOn: Test steps: - task: Docker@2 inputs: containerRegistry: 'acr-connection' repository: '$(imageRepository)' command: 'buildAndPush' Dockerfile: '**/Dockerfile' tags: | $(Build.BuildId) latest - stage: Deploy displayName: 'Deploy to Production' dependsOn: Build condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) jobs: - deployment: DeployProd environment: 'production' strategy: runOnce: deploy: steps: - script: echo "Deploying to production"
Optimization strategies:
yaml# Caching strategies - uses: actions/cache@v4 with: path: | ~/.npm node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- # Parallelization jobs: test: strategy: fail-fast: false matrix: shard: [1, 2, 3, 4] steps: - run: npm test -- --shard=${{ matrix.shard }}/4 # Conditional execution - name: Deploy if: github.event_name == 'push' && github.ref == 'refs/heads/main'
Integrate security scanning:
yaml- name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@master with: image-ref: '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}' format: 'sarif' output: 'trivy-results.sarif' - name: Upload Trivy scan results uses: github/codeql-action/upload-sarif@v3 with: sarif_file: 'trivy-results.sarif'
This skill can leverage the following MCP servers:
| Server | Description | Installation | |--------|-------------|--------------| | GitHub MCP Server | Official GitHub integration | GitHub | | Azure DevOps MCP | Official Azure DevOps support | GitHub | | claude-code-for-gitlab | GitLab CI/CD integration | GitHub |
This skill integrates with the following processes:
cicd-pipeline-setup.js - Initial pipeline configurationpipeline-optimization.js - Performance tuningsecurity-scanning.js - Security integrationWhen executing operations, provide structured output:
json{ "operation": "generate-pipeline", "platform": "github-actions", "status": "success", "workflow": { "name": "CI/CD Pipeline", "jobs": 3, "stages": ["test", "build", "deploy"] }, "optimizations": [ "Added dependency caching", "Enabled parallel test execution", "Configured Docker layer caching" ], "artifacts": [".github/workflows/ci.yml"] }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 20,891 | 20,714 | -1% | 1 | 1 | 0% | 4,416 | 5,946 | +35% | 0 | 0 | — |
case-02 | fail→fail | 18,413 | 12,546 | -32% | 1 | 1 | 0% | 3,692 | 5,633 | +53% | 0 | 0 | — |
case-03 | pass→pass | 20,969 | 20,792 | -1% | 1 | 1 | 0% | 3,239 | 6,211 | +92% | 0 | 0 | — |
case-04 | pass→pass | 21,097 | 26,156 | +24% | 1 | 1 | 0% | 3,638 | 7,199 | +98% | 0 | 0 | — |
case-05 | pass→pass | 16,732 | 14,158 | -15% | 1 | 1 | 0% | 2,608 | 5,131 | +97% | 0 | 0 | — |
case-06 | pass→pass | 8,939 | 7,554 | -15% | 1 | 1 | 0% | 1,856 | 4,485 | +142% | 0 | 0 | — |
case-07 | pass→pass | 14,629 | 17,618 | +20% | 1 | 1 | 0% | 2,998 | 5,723 | +91% | 0 | 0 | — |
case-08 | pass→pass | 13,685 | 18,797 | +37% | 1 | 1 | 0% | 3,035 | 6,042 | +99% | 0 | 0 | — |
case-09 | pass→pass | 11,066 | 12,788 | +16% | 1 | 1 | 0% | 2,156 | 5,663 | +163% | 0 | 0 | — |
case-10 | pass→pass | 12,068 | 12,518 | +4% | 1 | 1 | 0% | 1,804 | 4,857 | +169% | 0 | 0 | — |
case-11 | pass→pass | 12,304 | 9,158 | -26% | 1 | 1 | 0% | 2,444 | 4,916 | +101% | 0 | 0 | — |
case-12 | pass→pass | 12,456 | 8,808 | -29% | 1 | 1 | 0% | 1,961 | 4,646 | +137% | 0 | 0 | — |
case-13 | pass→pass | 13,676 | 12,678 | -7% | 1 | 1 | 0% | 2,755 | 4,913 | +78% | 0 | 0 | — |
case-14 | pass→pass | 13,987 | 9,237 | -34% | 1 | 1 | 0% | 2,401 | 4,827 | +101% | 0 | 0 | — |
case-15 | pass→pass | 6,012 | 4,838 | -20% | 1 | 1 | 0% | 1,240 | 3,921 | +216% | 0 | 0 | — |
case-16 | pass→pass | 6,874 | 7,081 | +3% | 1 | 1 | 0% | 1,118 | 4,345 | +289% | 0 | 0 | — |
case-17 | pass→pass | 6,010 | 3,360 | -44% | 1 | 1 | 0% | 873 | 3,505 | +301% | 0 | 0 | — |
case-18 | fail→pass | 9,691 | 6,966 | -28% | 1 | 1 | 0% | 1,857 | 3,888 | +109% | 0 | 0 | — |
case-19 | pass→pass | 12,242 | 5,377 | -56% | 1 | 1 | 0% | 1,778 | 3,727 | +110% | 0 | 0 | — |
case-20 | pass→pass | 10,204 | 7,893 | -23% | 1 | 1 | 0% | 1,950 | 4,067 | +109% | 0 | 0 | — |
case-21 | pass→pass | 8,184 | 5,849 | -29% | 1 | 1 | 0% | 1,175 | 3,969 | +238% | 0 | 0 | — |
case-22 | pass→pass | 14,811 | 8,561 | -42% | 1 | 1 | 0% | 1,969 | 4,511 | +129% | 0 | 0 | — |
case-23 | pass→pass | 10,413 | 22,234 | +114% | 1 | 1 | 0% | 1,464 | 4,974 | +240% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +4 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.