# Sap Devops Cicd

> >

- **Type:** Skill
- **Install:** `agentstack add skill-efeumutaslan-sap-skills-sap-devops-cicd`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [efeumutaslan](https://agentstack.voostack.com/s/efeumutaslan)
- **Installs:** 0
- **Category:** [Cloud & Infrastructure](https://agentstack.voostack.com/c/cloud-infrastructure)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [efeumutaslan](https://github.com/efeumutaslan)
- **Source:** https://github.com/efeumutaslan/SAP-SKILLS/tree/main/skills/sap-devops-cicd

## Install

```sh
agentstack add skill-efeumutaslan-sap-skills-sap-devops-cicd
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 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:**

| Scenario | Tool | Best For |
|----------|------|----------|
| BTP apps (CAP, UI5, MTA) | SAP CI/CD Service | Managed, no infrastructure |
| Full custom pipelines | Project "Piper" + Jenkins | Enterprise, complex workflows |
| ABAP Cloud development | ABAP Environment Pipeline | BTP ABAP Environment |
| ABAP on-premise transport | gCTS (Git-enabled CTS) | Git-based ABAP transport |
| Multi-environment promotion | Cloud Transport Management (TMS) | BTP subaccount promotion |
| Kubernetes workloads | Helm + ArgoCD / Flux | Kyma GitOps |

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

```yaml
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

| Tool | Scope | Mechanism |
|------|-------|-----------|
| CTS+ | On-premise cross-system | Transport requests (classic) |
| gCTS | On-premise Git-based | Git repos linked to transport layer |
| Cloud TMS | BTP subaccounts | Transport nodes + routes |
| ABAP Environment Pipeline | BTP ABAP | `abapEnvironmentPipeline` |

### 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

```groovy
@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

```yaml
# 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

```yaml
# .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"
```

```yaml
# repositories.yml
repositories:
  - name: "/DMO/FLIGHT"
    branch: "main"
    commitID: ""
  - name: "ZCUSTOM_APP"
    branch: "main"
    commitID: ""
```

### Pattern 4: Cloud Transport Management Setup

```bash
# 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:///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: 
   - 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)

```yaml
# .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

| Error | Context | Root Cause | Fix |
|-------|---------|------------|-----|
| `MTA build failed: resolution error` | `mbt build` | Missing dependency or wrong module path | Check `mta.yaml` paths; run `npm install` before build |
| `CF deploy: insufficient memory` | `cf deploy` | MTA module exceeds space quota | Reduce `memory` in `mta.yaml` or increase space quota |
| `TMS upload: node not found` | `tmsUpload` | Wrong node name in pipeline config | Verify node name in Cloud TMS admin UI |
| `gCTS clone: HTTP 401` | gCTS clone | Git credentials expired | Update stored credentials in SM59 or GCTS config |
| `ATC: critical findings` | ATC quality gate | Code has priority-1 issues | Fix findings; P1 cannot be exempted |
| `Piper step not found` | Jenkins | Wrong Piper library version | Update `@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

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [efeumutaslan](https://github.com/efeumutaslan)
- **Source:** [efeumutaslan/SAP-SKILLS](https://github.com/efeumutaslan/SAP-SKILLS)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-efeumutaslan-sap-skills-sap-devops-cicd
- Seller: https://agentstack.voostack.com/s/efeumutaslan
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
