logo

Are you need IT Support Engineer? Free Consultant

SAP gCTS on Public Cloud (BTP ABAP Environment) — …

  • By sujay
  • 16/06/2026
  • 3 Views

Shrikrushna Kulkarni  ·  SAP ABAP/RAP Developer  ·  Jun 16th 2026 

Table of Contents

  1. Why gCTS?
  2. Prerequisites
  3. Create Your GitHub Repository and Personal Access Token
  4. Create a Software Component (SAP-side)
  5. Clone the Repository to Your SAP System
  6. Create ABAP Package and Link to Software Component
  7. Configure Repository Parameters
  8. Develop, Release, and Verify Your First Commit
  9. Deploy to QAS — The Pull Operation
  10. Top 5 Issues and How to Fix Them
  11. Configuration Summary Checklist

1. Why gCTS?

Traditional SAP transport management (CTS) is file-based, sequential, and has no native Git integration. gCTS changes that. When you release a Transport Request in your BTP ABAP system, gCTS automatically creates a Git commit and pushes it to your GitHub/GitLab repository. This gives you:

  • ‌Full version history of every ABAP object — with line-level diffs in GitHub
  • ‌Code review via Pull Requests before deploying to QAS or PRD
  • ‌CI/CD pipeline integration (GitHub Actions, Jenkins via Project Piper)
  • ‌Instant rollback to any previous commit
  • ‌Parallel development using Git branches

— The complete gCTS DevOps lifecycle: developer releases a TR → gCTS pushes to Git → CI server tests → automatic pull to follow-on systems.

Key Concept: gCTS in SAP Public Cloud is Pre-Enabled Unlike On-Premise, you do NOT need to install Git, install Java, configure ICF services, or run an Enablement Wizard. SAP manages all of that internally. Your job starts at the Software Component — everything below that is managed by SAP.

2. Prerequisites

Before you start, make sure the following are in place:

SAP BTP ABAP Environment

SAP_BR_DEVELOPER + SAP_BR_ADMINISTRATOR roles

Eclipse ADT Installed

GitHub Account

Public Repository (or accessible URL)

3. Create Your GitHub Repository and Personal Access Token

We start outside SAP. You need a Git repository and authentication credentials before touching the SAP Fiori Launchpad.

Create a Personal Access Token (PAT) on GitHub
GitHub → Settings → Developer Settings → Personal access tokens → Tokens (classic) → Generate new token

Give your token a recognizable name (e.g., SAP-gCTS-BTP-DEV), set expiration to 90 days, and select exactly these three scopes:

Image_02.Png

— Required GitHub PAT scopes: repo, delete_repo, and admin:repo_hook. All three must be selected.

Scope Why Required

repo Full control of private repositories — read and write access to all content
delete_repo Required internally by gCTS for some repository management operations
admin:repo_hook Required for webhook-based CI/CD pipeline triggering

Copy the token immediately after creation. GitHub shows it only ONCE. If you navigate away without copying it, you must regenerate a new token. Store it in a password manager — never in a plain text file or email.

Create the Remote Git Repository
GitHub → + (top-right) → New repository

Image_03.Png

— Create a new private repository with README initialized. The README is mandatory — gCTS cannot clone an empty repository.

Field Value Important Note

Repository name z-partner-dev Use lowercase with hyphens. Convention: z-
Visibility Private Must be accessible from the internet (not behind a corporate firewall)
Initialize with README ‌Checked CRITICAL — Creates the first commit. Without this, gCTS clone will fail with an empty repository error.

After creation, note your repository HTTPS URL — you will need it in Step 5. Example: https://github.com/your-org/z-partner-dev.git

 

4. Create a Software Component (SAP-side)

This is the most important concept that is unique to SAP Public Cloud gCTS. A Software Component is the container that maps your SAP development to a Git repository. Every ABAP package you create must belong to a Software Component. The mapping is 1:1 — one Software Component = one Git repository.

Public Cloud Only Concept Software Components are required ONLY in SAP Public Cloud. If you are familiar with On-Premise gCTS, there is no equivalent — On-Premise uses Transport Layers + Virtual SID instead. Do not skip this step thinking it is optional.

Open the Manage Software Components App
Fiori Launchpad → Search “Manage Software Components” → Open App

Click the + (Create) button and fill in the following:

Field Example Value Explanation Required?

Name ZPARTNER Use Z or Y namespace. Convention: Z. No spaces — use underscore. Cannot be changed after creation.
Description Partner Management Module Human-readable description for this component.
Type Development Select “Development” for all custom Z/Y development.

What happens if you skip this step? You cannot create ABAP packages. When you try to create a package in ADT, you get: “Package must have Software Component assignment”. Without a Software Component, gCTS has no way to track your objects.

Clone the Repository to Your SAP System

Now we connect SAP to GitHub. This is done through the Manage Software Components app (or the gCTS app) by cloning your remote GitHub repository into the SAP system.

Store Your GitHub Credentials in SAP
gCTS App → Settings (‌ icon, top-right) → Credentials → Create

Or via Manage Software Components: When you click Clone, SAP will prompt for credentials.

Image_04.Png

— Where and how to store credentials: gCTS needs your Git provider's API endpoint and token to connect on your behalf.

Field Value Note

Type Token Select Token (not Username/Password)
API Endpoint https://api.github.com/ CRITICAL: Include the trailing slash! Without it → 401 Unauthorized
Token ghp_xxxxxxxxxxxx Paste your PAT from Step 1

The #1 Setup Error — Missing Trailing Slash https://api.github.com  →  ‌ 401 Unauthorized
https://api.github.com/  →  ‌ Works correctly

This single missing character blocks everything. Check it before any other troubleshooting.

Clone the Repository
Manage Software Components → Select your component → Clone

Or from the gCTS App: Create a new repository configuration with your GitHub URL, Role = Source, then click Clone.

Image_05.Png

— The setup sequence: create repository configuration on both DEV and TST/QAS systems, then clone.

After clone, the repository status should show READY (not NEW or ERROR). You can verify in the gCTS App:

Image_06.Png

— Repository View after successful clone: Status = READY, Role = Development (Source), branch active.

Important: The .gcts.properties.json file After the first clone, gCTS automatically creates a commit in your GitHub repository adding a file called .gcts.properties.json. This file stores essential gCTS configuration data. Never delete or modify this file — doing so will break future pull operations.

The gCTS App System View now shows your new repository listed with its commit hash, Role (Development / Provided), and status:

Image_07.Png

— gCTS System View: the home screen showing all repositories registered on this system with their Role, Type, and latest commit.

6. Create ABAP Package and Link to Software Component

Create an ABAP Package in ADT
Eclipse ADT → Project Explorer → Right-click project → New → ABAP Package

The key field is Software Component — this must match the Software Component you created in Step 3:

Field Value Critical Note

Name ZPARTNER Use same prefix as Software Component for clarity
Software Component ZPARTNER CRITICAL — Must match Step 3. This is what links the package to gCTS tracking.
Transport Layer (leave empty) NOT configured in Public Cloud. SAP manages this automatically.
Application Component As appropriate Optional but recommended for reporting

When saving, the system will prompt for a Transport Request. Create a new TR for package creation — write a meaningful description as this description becomes the Git commit message.

Wrong Software Component = No Git Commits If you assign the package to the wrong Software Component (e.g., HOME instead of ZPARTNER), ABAP objects created in this package will NOT appear in your Git repository. Transport Requests will release successfully, but no commits will be created. Always verify the Software Component in ADT package properties.

7. Configure Repository Parameters

Set Key Repository Parameters
gCTS App → Select repository → Configuration tab → Create

Image_08.Png

— The Configuration tab in the gCTS App — add parameters one by one. Each parameter has a Key and Value.

Image_09.Png

— Important parameters: VCS_AUTOMATIC_PUSH, VCS_AUTOMATIC_PULL, VCS_ERROR_ROLLBACK, and CLIENT_VCS_COMMIT_MESSAGE.

Parameter Value What It Does Rec.

CLIENT_VCS_TASK_COMMIT Not required In SAP BTP ABAP Public Cloud, task-based committing is the default behaviour — a commit is created automatically when a developer releases their Task. No parameter needed. This parameter is only relevant for SAP S/4HANA On-Premise where TR-level commits are the default and task-level must be explicitly enabled.
VCS_AUTOMATIC_PUSH true Auto-pushes the commit to GitHub immediately after TR release. If false, you must click Push manually in the gCTS App after every TR release.
VCS_AUTOMATIC_PULL false (DEV) / true (QAS/PRD) Leave unset or set to false on DEV — developers should pull manually to avoid unexpected overwrites in a multi-developer environment. Set to true on QAS and PRD to ensure the system always has the latest merged content before activation.
VCS_ERROR_ROLLBACK true If a TR release fails at any stage, gCTS automatically rolls back the Git commit. Prevents partial commits from appearing in GitHub. Strongly recommended.

8. Develop, Release, and Verify Your First Commit

Create an ABAP Class and Release the Transport Request
ADT → Right-click package ZPARTNER → New → ABAP Class

Create a simple ABAP class (e.g., ZCL_HELLO_GCTS_### implementing IF_OO_ADT_CLASSRUN). Activate it with Ctrl+F3. Open the Transport Organizer in ADT.

When releasing:

Image_10.Png

— The push/pull flow: developer releases TR → changed objects are pushed to GitHub. VCS_AUTOMATIC_PUSH and VCS_AUTOMATIC_PULL control the exact behavior.

‌How to Verify It Worked

  1. Open gCTS App → Select repository → Commits tab
  2. You should see a new entry at the top with your TR description as the commit message
  3. Click the commit hash — it should open GitHub showing your ABAP class as .clas.abap and .clas.xml files
  4. In GitHub, your repository should have a new folder src/ containing your serialized ABAP objects

8.1 Task-Based Committing — Why It Matters

Image_11.Png

— The problem task-based committing solves: Sandy can't commit her completed work because she's waiting for her colleagues to finish their tasks in the same TR.

Without task-based committing, all developers in the same Transport Request are blocked from committing until the last person is done. With CLIENT_VCS_TASK_COMMIT=X, each developer commits independently when releasing their task. This enables:

  • Individual testing without waiting for the full TR
  • Finer commit granularity (one commit per developer per feature)
  • Reduced interdependencies between team members

Image_12.Png

— For On-Premise, task-based committing requires a BAdI implementation (SE18 → CTS_REQUEST_CHECK). In Public Cloud, setting CLIENT_VCS_TASK_COMMIT=X in the Configuration tab is sufficient.

Image_13.Png

Asynchronous commit (background job) vs Synchronous commit (logon user). For large TRs, asynchronous is recommended. By default, gCTS commits synchronously — the commit runs in the foreground during TR or Task release. For large TRs this can cause a session timeout. To enable asynchronous commits: gCTS App → Configuration tab → add parameter CLIENT_VCS_ASYNCHRONOUS_COMMIT = X. The TR release will complete immediately and the commit runs as a background job. Always check the Activities tab afterwards to confirm the background commit succeeded.

9. Deploy to QAS — The Pull Operation

Deploying to a QAS or Production system in gCTS is done by pulling a commit in the target system. The target system must have the same Software Component configured with Role = Provided.

Configure the QAS System Repository

On your QAS system, configure the same repository but with these differences. Note: The QAS system requires its own GitHub credentials stored independently. Log into the QAS Fiori Launchpad → gCTS App → Settings → Credentials → Create. Use the same PAT and API endpoint (https://api.github.com/) as the DEV system. Credentials are stored per ABAP system and are not shared across systems.

Setting DEV System QAS System

URL Same GitHub URL Same GitHub URL (identical)
Role Source (can push) Provided (pull only)
Branch dev (or main) qas (or dev) — aligns with your branch strategy
VCS_AUTOMATIC_PULL true false (for manual/pipeline-controlled deployments)
Merge DEV Branch to QAS Branch and Pull

On GitHub: Open a Pull Request from devqas. Review the code diff. Approve and merge.

Image_14.Png— Merge branches on GitHub via Pull Request: compare branches, create PR, review, approve, and merge. After merge, the QAS system pulls the merged content.

After the merge: Go to your QAS system → gCTS App → Repository → Commits tab. Find the merged commit and click “Update to Latest Commit” or the Pull button.

Image_15.Png

— The Commits tab in gCTS App: “Update to Latest Commit” deploys HEAD, or click the individual commit's Pull button to deploy a specific version.

Always review the activation log after pulling. gCTS shows an activation result for each object: success, warning, or error. Objects with activation errors are NOT deployed into the system. Fix the error in DEV, create a new commit, and re-pull. Never try to manually fix objects directly in QAS.

10. Top 5 Issues and How to Fix Them

Based on real-world implementations and the openSAP course content, these are the five issues that affect almost every first-time gCTS setup on SAP BTP:

Symptom Root Cause Fix

401 Unauthorized during Clone Missing trailing slash in API Endpoint credentials. Or PAT expired. Change https://api.github.com to https://api.github.com/ in gCTS Credentials. Regenerate PAT if expired.
TR released — no commit appears in GitHub Package assigned to wrong Software Component. Or VCS_AUTOMATIC_PUSH not set. Check package properties in ADT — Software Component must match Step 3. Set VCS_AUTOMATIC_PUSH=true in Configuration tab.
Clone fails — “Empty repository” GitHub repository was created without initializing with README — no initial commit exists. On GitHub: go to repository → Add README file. Or delete and recreate the repository with “Initialize with README” checked.
Pull in QAS fails — “Object locked” An object in the pull set is locked by an open TR in the QAS system (manual change made directly in QAS). In QAS: check ADT Transport Organizer for locked objects. Release or delete the unauthorized TR. Then retry Pull.
Pull in QAS fails — Activation error Syntax error in the code or missing dependency (referenced class/table not yet deployed). Fix the code in DEV. Release a new TR. Verify the new commit in gCTS App. Then pull the fixed commit in QAS. Never fix code directly in QAS.

11. Configuration Summary Checklist

Use this checklist before and after setup to verify everything is in place:

  • GitHub repository created with README initialized
  • PAT generated with repo, delete_repo, admin:repo_hook scopes
  • Software Component created with correct name (cannot be changed later)
  • GitHub credentials stored in gCTS App — API Endpoint includes trailing slash
  • Repository cloned on DEV — status shows READY
  • .gcts.properties.json file visible in GitHub repository
  • ABAP package created with correct Software Component assignment
  • Parameters set: VCS_AUTOMATIC_PUSH=true, VCS_ERROR_ROLLBACK=true (CLIENT_VCS_TASK_COMMIT not required in Public Cloud)
  • First TR released — commit visible in gCTS Commits tab
  • Repository configured on QAS with Role = Provided and credentials stored
  • First Pull to QAS completed — activation log shows no errors

Source link

Leave a Reply

Your email address will not be published. Required fields are marked *