agentsclimarketplace

Sap devops cicd

Skill efeumutaslan/SAP-SKILLS/skills/sap-devops-cicd

23 SAP development skills for Claude Code — ABAP, RAP, CAP, Fiori, BTP, HANA, S/4HANA, Integration Suite and more. Agent Skills Specification compatible.

Install
npx -y skills add efeumutaslan/SAP-SKILLS --skill sap-devops-cicd

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

SAP DevOps and CI/CD pipeline skill. Use when setting up SAP CI/CD service, configuring Jenkins/Piper pipelines, implementing transport management (gCTS/TMS), or automating ABAP/CAP deployments. If the user mentions SAP CI/CD, Piper, gCTS, transport management, SAP pipeline, or ABAP deployment automation, use this skill.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

10.7 KB, as published. Nobody here has run it

SAP DevOps & CI/CD

Related Skills

  • sap-testing-quality — Test automation integrated into pipelines
  • sap-kyma-runtime — Kyma/Kubernetes deployment targets
  • sap-s4hana-extensibility — ABAP transport and extension deployment

Quick Start

Choose your CI/CD approach:

ScenarioToolBest For
BTP apps (CAP, UI5, MTA)SAP CI/CD ServiceManaged, no infrastructure
Full custom pipelinesProject "Piper" + JenkinsEnterprise, complex workflows
ABAP Cloud developmentABAP Environment PipelineBTP ABAP Environment
ABAP on-premise transportgCTS (Git-enabled CTS)Git-based ABAP transport
Multi-environment promotionCloud Transport Management (TMS)BTP subaccount promotion
Kubernetes workloadsHelm + ArgoCD / FluxKyma GitOps

Minimal SAP CI/CD Service config (.pipeline/config.yml):

general:
  buildTool: "mta"
  productiveBranch: "main"

stages:
  Build:
    mtaBuildTool: "cloudMbt"
  Additional Unit Tests:
    npmExecuteScripts: true
    npmScripts:
      - "test"
  Acceptance:
    cloudFoundryDeploy: true
    cfApiEndpoint: "https://api.cf.eu10.hana.ondemand.com"
    cfOrg: "my-org"
    cfSpace: "dev"
  Release:
    cloudFoundryDeploy: true
    cfApiEndpoint: "https://api.cf.eu10.hana.ondemand.com"
    cfOrg: "my-org"
    cfSpace: "prod"
    tmsUpload: true

Core Concepts

SAP CI/CD Service (BTP Managed)

  • Managed Jenkins: No infrastructure to maintain
  • Pre-configured stages: Build → Test → Deploy → Release
  • Supported project types: MTA, CAP, UI5, ABAP Environment, Kyma
  • Credential store: SAP Credential Store integration for secrets
  • Webhook triggers: GitHub, GitLab, Bitbucket, Azure DevOps

Project "Piper" (Open Source)

  • Container-based steps: Each pipeline step in a Docker container
  • Library + steps: Reusable Groovy library for Jenkins
  • Step catalog: 100+ steps for SAP-specific tasks
  • Extensible: Custom steps in Groovy or shell scripts
  • Multi-cloud: Deploy to CF, Kyma, Neo, on-premise

Transport Management

ToolScopeMechanism
CTS+On-premise cross-systemTransport requests (classic)
gCTSOn-premise Git-basedGit repos linked to transport layer
Cloud TMSBTP subaccountsTransport nodes + routes
ABAP Environment PipelineBTP ABAPabapEnvironmentPipeline

gCTS (Git-enabled Change and Transport System)

  • Links ABAP packages to Git repositories
  • Push/pull ABAP objects as files (abapGit-compatible serialization)
  • Transport-like import: clone → pull → activate
  • SAP-delivered checks before import
  • Works with GitHub, GitLab, Bitbucket (on-premise/cloud)

Common Patterns

Pattern 1: Jenkinsfile with Project Piper

@Library('piper-lib-os') _

pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        mtaBuild script: this, buildTarget: 'CF'
      }
    }

    stage('Unit Tests') {
      steps {
        npmExecuteScripts script: this, runScripts: ['test']
      }
    }

    stage('Lint & ATC') {
      parallel {
        stage('ESLint') {
          steps {
            npmExecuteLint script: this
          }
        }
        stage('ABAP ATC') {
          steps {
            abapEnvironmentRunATCCheck script: this,
              atcConfig: '.atc/config.yml',
              host: 'https://my-abap-env.abap.eu10.hana.ondemand.com'
          }
        }
      }
    }

    stage('Deploy to Dev') {
      steps {
        cloudFoundryDeploy script: this,
          deployTool: 'mtaDeployPlugin',
          cfApiEndpoint: 'https://api.cf.eu10.hana.ondemand.com',
          cfOrg: 'my-org',
          cfSpace: 'dev',
          cfCredentialsId: 'cf-deploy-dev'
      }
    }

    stage('Integration Tests') {
      steps {
        npmExecuteScripts script: this, runScripts: ['test:integration']
      }
    }

    stage('Transport to QA') {
      when { branch 'main' }
      steps {
        tmsUpload script: this,
          nodeName: 'QA',
          credentialsId: 'tms-credentials',
          mtaPath: 'mta_archives/*.mtar'
      }
    }
  }

  post {
    failure {
      emailext subject: "Pipeline Failed: ${env.JOB_NAME}",
               body: "Check: ${env.BUILD_URL}",
               recipientProviders: [[$class: 'DevelopersRecipientProvider']]
    }
  }
}

Pattern 2: MTA Build Configuration

# mta.yaml
_schema-version: "3.1"
ID: my-cap-app
version: 1.0.0

modules:
  - name: my-cap-srv
    type: nodejs
    path: gen/srv
    parameters:
      buildpack: nodejs_buildpack
      memory: 256M
    requires:
      - name: my-hana
      - name: my-xsuaa

  - name: my-cap-db
    type: hdb
    path: gen/db
    requires:
      - name: my-hana

  - name: my-cap-ui
    type: html5
    path: app/
    build-parameters:
      builder: custom
      commands:
        - npm run build
      supported-platforms: []

resources:
  - name: my-hana
    type: com.sap.xs.hdi-container
    parameters:
      service: hana
      service-plan: hdi-shared

  - name: my-xsuaa
    type: org.cloudfoundry.managed-service
    parameters:
      service: xsuaa
      service-plan: application
      path: ./xs-security.json

Pattern 3: ABAP Environment Pipeline

# .pipeline/config.yml for ABAP Environment
general:
  buildTool: ""
  productiveBranch: "main"

stages:
  "Prepare System":
    cfServiceInstance: "my-abap-instance"
    cfServiceKeyName: "pipeline-key"
  "Clone Repositories":
    repositories: "repositories.yml"
    strategy: "Clone"
  "ATC":
    atcConfig: ".atc/config.yml"
  "Build":
    abapAddonAssemblyKitEndpoint: "https://apps.support.sap.com"
  "Integration Tests":
    script: "npm run test:abap"
  "Publish":
    addonDescriptor: "addon.yml"
# repositories.yml
repositories:
  - name: "/DMO/FLIGHT"
    branch: "main"
    commitID: ""
  - name: "ZCUSTOM_APP"
    branch: "main"
    commitID: ""

Pattern 4: Cloud Transport Management Setup

# Create transport nodes
cf create-service transport-management standard tms-instance
cf create-service-key tms-instance tms-key

# Node topology: DEV → QA → PROD
# Configure via BTP Cockpit > Cloud Transport Management
# Or via TMS API:
curl -X POST "https://<tms-url>/v2/nodes" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "QA",
    "description": "Quality Assurance",
    "transportType": "MTA",
    "destination": "cf-qa-destination",
    "forwardMode": "MANUAL"
  }'

Pattern 5: gCTS Repository Setup

Transaction: GCTS (or /sap/bc/cts_abapvcs/repository)

1. Create repository:
   - Repository name: Z_MY_APP
   - vSID: <system_sid>
   - URL: https://github.com/myorg/z-my-app.git
   - Branch: main
   - Package: Z_MY_APP

2. Clone repository (pulls code from Git → ABAP)

3. Development workflow:
   - Develop in ABAP (ADT/SE80)
   - Commit changes to local repo
   - Push to remote
   - Pull in target system → activate

Pattern 6: GitHub Actions for SAP (Alternative to Jenkins)

# .github/workflows/sap-cicd.yml
name: SAP CI/CD
on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install MBT
        run: npm install -g mbt

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Build MTA
        run: mbt build -t ./mta_archives

      - name: Deploy to CF (dev)
        if: github.ref == 'refs/heads/develop'
        uses: SAP/cf-cli-action@v1
        with:
          command: deploy mta_archives/*.mtar -f
        env:
          CF_API: ${{ secrets.CF_API }}
          CF_USERNAME: ${{ secrets.CF_USERNAME }}
          CF_PASSWORD: ${{ secrets.CF_PASSWORD }}
          CF_ORG: ${{ secrets.CF_ORG }}
          CF_SPACE: dev

Error Catalog

ErrorContextRoot CauseFix
MTA build failed: resolution errormbt buildMissing dependency or wrong module pathCheck mta.yaml paths; run npm install before build
CF deploy: insufficient memorycf deployMTA module exceeds space quotaReduce memory in mta.yaml or increase space quota
TMS upload: node not foundtmsUploadWrong node name in pipeline configVerify node name in Cloud TMS admin UI
gCTS clone: HTTP 401gCTS cloneGit credentials expiredUpdate stored credentials in SM59 or GCTS config
ATC: critical findingsATC quality gateCode has priority-1 issuesFix findings; P1 cannot be exempted
Piper step not foundJenkinsWrong Piper library versionUpdate @Library('piper-lib-os') version; check step name

Performance Tips

  1. Parallel stages — Run lint, unit tests, and ATC checks in parallel in Jenkins
  2. MTA build cache — Cache node_modules between builds; mbt build supports --mtar for incremental
  3. Selective testing — Only run tests for changed modules; use Git diff to determine scope
  4. Lightweight deploy — Use cf push --strategy rolling for zero-downtime; blue-green for critical
  5. TMS batch — Group related MTAs in a single transport; reduces approval overhead
  6. gCTS selective pull — Pull only changed packages, not entire repository
  7. Pipeline-as-code — Store .pipeline/config.yml in Git; version pipeline config with app code

Gotchas

  • SAP CI/CD Service limitations: No custom Docker images; limited to pre-built steps — use Piper for full flexibility
  • MTA archive size: Max 1.5 GB for CF deploy; split large apps into multiple MTAs
  • gCTS vs. abapGit: gCTS is SAP-supported transport tool; abapGit is community — gCTS uses CTS mechanisms, abapGit bypasses them
  • TMS node credentials: Destination service credentials must be maintained per CF space/subaccount
  • Branch strategy: SAP CI/CD service only supports one productive branch; use feature branches → develop → main flow
  • ABAP pipeline timing: Prepare System can take 15-30 min for ABAP instance provisioning; use persistent instances for faster pipelines

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.