Skip to content

DevOps with SAP BTP

A compound of development (Dev) and operations (Ops), DevOps is the union of people, process, and technology to continually provide value to customers.

Microsoft

SAP Cloud Platform offers a rich set of DevOps-related services supporting the development and operations of cloud-native and hybrid solutions collected by the DevOps community page.

DevOps portfolio of SAP Cloud Platform

Efficient DevOps with SAP BTP

Deep dive into details with Blog from Boris Zarske and openSAP course.

Set Up and Plan

Best Practices with SAP BTP Guide

To plan your projects around SAP BTP, the Best Practices with SAP BTP guide explains basic platform concepts and provides guidance, such as for account structuring, development and delivery.

SAP Discovery Center

Another good entry point to get further information about the cloud platform offering and to gain first hands-on experience is the SAP Discovery Center, where SAP also offers many missions, for example to implement a business-specific scenario with ease or to set up and onboard some of our DevOps services on the platform.

Setup Automator for SAP BTP

With the GitHub repository for the btp-setup-automator SAP is providing a script to automate the setup of an SAP Business Technology Platform (SAP BTP).

Blog: Automating the setup of your SAP BTP account with btp-setup-automator

Example Automation Script

UDINA uses the following scripts to create sub accounts for UDINA Commerce customers.

The parameters.json file controls the sub account and cf org naming, space quota and available user groups, while the usecase.json file defines nessessary entitlements and role collections assignments to user groups.

All services and apps are rolled out afterwards using regular MTA deployment and GitLab pipelines.

bash
# start docker container
docker container run --rm -it --name "btp-setup-automator" 
  "ghcr.io/sap-samples/btp-setup-automator:latest"

# use accountname var to avoid typos on multiple usage
accountname=udina-newcustx-test

# run automation script
./btpsa \
    -parameterfile 'https://gitlab/api/v4/projects/<ProjectId>/repository/files/parameters.json/raw?ref=main' \
    -myemail 'user@udina.de' \
    -subaccountname $accountname \
    -subdomain $accountname \
    -org $accountname \
    -externalConfigAuthMethod 'token' \
    -externalConfigToken '<your-gitlab-token>'
json
{
    "$schema": "https://raw.githubusercontent.com/...",
    "usecasefile": "usecases/released/default.json",
    "region": "eu10",
    "globalaccount": "<udina_global_account>",
    "myemail": "user@udina.de",
    "loginmethod": "sso",
    "subaccountname": "udina-<customer>-test",
    "subdomain": "udina-<customer>-test",
    "org": "udina-<customer>-test",
    "cfspacename": "services",
    "cfspacequota": {
        "createQuotaPlan": true,
        "spaceQuotaName": "udina",
        "spaceQuotaTotalMemory": "2048M",
        "spaceQuotaInstanceMemory": "2048M",
        "spaceQuotaRoutes": 8,
        "spaceQuotaServiceInstances": 30,
        "spaceQuotaAppInstances": 10,
        "spaceQuotaReservedRoutePorts": 0,
        "spaceQuotaAllowPaidServicePlans": true
    },
    "myusergroups": [
        {
            "name": "admins",
            "members": [
                "admin@udina.de"
            ]
        },
        {
            "name": "developers",
            "members": [
                "developer@udina.de"
                "devops@udina.de"
            ]
        },
        {
            "name": "auditors",
            "members": [
                "auditor@udina.de"
            ]
        },
        {
            "name": "testers",
            "members": [
                "tester@udina.de"
            ]
        }
    ]
}
json
{
    "$schema": "https://raw.githubusercontent.com/...",
    "aboutThisUseCase": {
        "name": "Setup UDINA Commerce customer sub account"
    },
    "services": [
        {
            "entitleonly": true,
            "name": "alert-notification",
            "plan": "standard"
        },
        {
            "entitleonly": true,
            "name": "connectivity",
            "plan": "lite"
        },
        {
            "entitleonly": true,
            "name": "destination",
            "plan": "lite"
        },
        {
            "entitleonly": true,
            "name": "enterprise-messaging",
            "plan": "default"
        },
        {
            "entitleonly": true,
            "name": "feature-flag",
            "plan": "lite"
        },
        {
            "entitleonly": true,
            "name": "feature-flags-dashboard",
            "plan": "dashboard"
        },
        {
            "entitleonly": true,
            "name": "html5-apps-repo",
            "plan": "app-host"
        },
        {
            "entitleonly": true,
            "name": "html5-apps-repo",
            "plan": "app-runtime"
        },
        {
            "entitleonly": true,
            "name": "jobscheduler",
            "plan": "standard"
        },
        {
            "entitleonly": true,
            "name": "objectstore",
            "plan": "s3-standard"
        },
        {
            "entitleonly": true,
            "name": "theming",
            "plan": "standard"
        },
        {
            "entitleonly": true,
            "name": "xsuaa",
            "plan": "application"
        }
    ],
    "assignrolecollections": [
        {
            "name": "Global Account Administrator",
            "type": "account",
            "level": "global account",
            "idp": "sap.default",
            "assignedUserGroupsFromParameterFile": [
                "admins"
            ]
        },
        {
            "name": "Subaccount Administrator",
            "type": "account",
            "level": "sub account",
            "idp": "sap.default",
            "assignedUserGroupsFromParameterFile": [
                "admins"
            ]
        },
        {
            "name": "Subaccount Service Administrator",
            "type": "account",
            "level": "sub account",
            "idp": "sap.default",
            "assignedUserGroupsFromParameterFile": [
                "admins"
            ]
        },
        {
            "name": "SpaceManager",
            "type": "cloudfoundry",
            "level": "space",
            "idp": "sap.ids",
            "assignedUserGroupsFromParameterFile": [
                "admins"
            ]
        },
        {
            "name": "SpaceDeveloper",
            "type": "cloudfoundry",
            "level": "space",
            "idp": "sap.ids",
            "assignedUserGroupsFromParameterFile": [
                "developers"
            ]
        },
        {
            "name": "SpaceAuditor",
            "type": "cloudfoundry",
            "level": "space",
            "idp": "sap.ids",
            "assignedUserGroupsFromParameterFile": [
                "auditors"
            ]
        },
        {
            "name": "OrgManager",
            "type": "cloudfoundry",
            "level": "org",
            "idp": "sap.ids",
            "assignedUserGroupsFromParameterFile": [
                "admins"
            ]
        },
        {
            "name": "OrgAuditor",
            "type": "cloudfoundry",
            "level": "org",
            "idp": "sap.ids",
            "assignedUserGroupsFromParameterFile": [
                "auditors"
            ]
        }
    ]
}

Terraform provider for SAP BTP

SAP has released a Terraform provider for SAP BTP now available for non-productive use.

Terraform provider for SAP BTP now available for non-productive useAutomating SAP BTP setup with the new Terraform provider for SAP BTP

What is Terraform?

TerraformTerraform is an open-source infrastructure as code tool that enables you to safely and predictably provision and manage infrastructure in any cloud.

Continous Integration and Delivery (CI/CD)

A corner stone for development and test and increased agility and quality in a DevOps environment is Continuous Integration (CI) and Continuous Delivery (CD), the practice of integrating frequently into a common source code repository and then validating and testing implemented changes automatically – by using a CI/CD pipeline.

To adopt CI/CD around development projects in SAP environments easily, there are several offerings:

OfferingDescription
SAP Continuous Integration and Delivery serviceConfigure and run predefined pipelines for continuous integration and delivery.
Project "Piper"SAP implements tooling for continuous delivery in project "Piper". The goal of project "Piper" is to substantially ease setting up continuous delivery in your project using SAP technologies.
Continuous Integration and Delivery Best Practices GuideThe Continuous Integration and Delivery Best Practices Guide provides simple procedures to implement continuous delivery (CD) pipelines on any CI/CD stack

Project "Piper"

To get you started quickly, project "Piper" offers you the following artifacts:

  • A set of ready-made Continuous Delivery pipelines for direct use in your project
  • ABAP Environment Pipeline ABAP Environment Pipeline
  • General Purpose Pipeline
  • A shared library that contains reusable step implementations, which enable you to customize our preconfigured pipelines, or to even build your own customized ones
  • A standalone command line utility for Linux and a GitHub Action
  • Jenkins library Jenkins Note: This version is still in early development. Feel free to use it and provide feedback, but don't expect all the features of the
  • A set of Docker images to setup a CI/CD environment in minutes using sophisticated life-cycle management

Develop and Test

In the Develop & Test phase, your development teams come up with increments in the form of development content (that is, code) and application & configuration content (such as destinations, roles and permissions, SAP Integration Suite iFlow packages, and other app-specific content). As part of the phase, it has to be assured that the developed content is of high quality – for example, verified by transparent results of automated tests, being executed by an automated pipeline, as set up in the previous phase.

Multitarget Application (MTA) Approach

For handling interdependencies of the software modules and artefacts that your app comprises of, consider to follow the Multitarget Application (MTA) approach that allows to bundle all artefacts of your app into one archive together with a machine-readable description of the contents and its interdependencies.

An MTA with its components, and a Cloud with its runtimes

Development Environment

As development environment, consider SAP Business Application Studio, which is a powerful, extensible, web-based tool for full-stack and cloud application development. You can use the IDE to develop, debug, build, test, extend and deploy role-based, consumer-grade apps. SAP Business Application Studio shows a high integration with other best practices and services – for example, it is part of the approach recommended by the SAP Cloud Application Programming Model.

Alternatively, you could use a local development environment, such as Eclipse or Microsoft’s Visual Studio Code, for which tools/plugins are offered for SAP Extension Suite development.

SAP Cloud Application Programming Model

The SAP Cloud Application Programming Model guides developers along a golden path of best practices and tool recommendations, allowing developers to focus on their domain expertise, while relieving them from tedious technical tasks.

CAP Overview & Design Principles

It offers a consistent end-to-end programming model that includes languages, libraries and APIs tailored for full-stack development on SAP Extension Suite. For example, when you define your data model using Core Data and Services (CDS), the framework can take care of an automatic deployment to SAP HANA.

Continuous Integration and Delivery (CI/CD)

As outlined in the previous phase, CI/CD can be a corner stone for increased agility and quality of your development process in a DevOps environment. The corresponding environment set up in the previous phase is now used to perform automated tests of development changes and to provide transparency to your developers on the changes performed by them – which enables them to come up with more qualified increments.

Deliver and Change

In the delivery phase, you want to propagate the increment (that is, the release candidate of your new app or a new version of an existing app) towards your production environment, so that your end users can start adopting it.

Continuous Delivery

One straight-forward approach is to extend your Continuous Integration pipeline by Continuous Delivery, where the propagation of your increment gets triggered by the pipeline (automatically or with manual approval), if the result of the automated tests being part of the pipeline is as desired.

Project Piper Continuous Delivery

Transport Management

Especially in enterprise environments and for more complex environments, operation teams appreciate the option to apply standardized change management processes also for the cloud artefacts of their company – to add transparency on the audit trail of changes (granting clarity on who perform which changes in which production subaccount and when). Also, change management opens up the door to synchronize cloud transports with on-premise changes, in case you should have hybrid apps with close interdependencies that you have to manage. Here, transport management options come in:

OfferingDescription
SAP Cloud Transport Management serviceManage transports of development artifacts and application-specific content.
Enhanced Change and Transport System (CTS+)For ABAP-centric and hybrid landscapes, where you might have already a management process for your on-premise changes in place, the enhanced Change and Transport System (CTS+) allows the handling of changes based on Multitarget Application (MTA) archives in SAP BTP.

Hybrid Change Management

For hybrid changes, both approaches (CTS+ and the cloud-based SAP Cloud Transport Management service) offer the integration into change management processes running on SAP Solution Manager via Quality Gate Management (QGM) and Change Request Management (ChaRM). Prerequisite for the integration of SAP Cloud Transport Management is SAP Solution Manager 7.2 SP10. The overall high-level view and positioning is sketched in the following figure (not shown in the picture is the option to transport MTA-based changes in SAP BTP with CTS+ – however, MTA-based changes will stay the only cloud content type supported by CTS+ also in the future).

SAP Cloud Transport Management service is also integrated into change and deployment management capabilities of SAP Cloud ALM, see Integration between SAP Cloud ALM and Cloud Transport Management is now available.

Combination of Continuous Integration & Transport Management

If you want to get the best of both worlds (with a combination of CI and transport management – also already depicted above), you can also consider to differentiate between:

  • A development landscape, based on Continuous Integration principles and used to verify single developer changes by an automated pipeline and
  • A delivery landscape, based on strict transport management rules (such as policies, schedules and roles) and used to verify release candidate versions, where propagation towards production is typically done with manual confirmation
Combination of Continuous Integration & Transport Management

Monitor and Operate

In the Monitor & Operate phase, you make sure that your app running on SAP BTP is provided with the right performance and availability.

Local Native Monitoring

To assure that, you first need insights into the status of your app (including all used service and potential data flows), for which SAP BTP offers local native monitoring capabilities that allow access to health status information and metrics from the platform. For example, you can use the SAP BTP cockpit in the Neo environment to monitor Java and HTML5 applications or use the SAP Application Logging service in the Cloud Foundry environment that allows to access and analyze log files stored in the Elastic stack, such as via predefined Kibana dashboards pictured below:

SAP Application Logging Kibana Dashboard

Alerting

Instead of manually tracking the monitoring information for your applications on an ongoing basis, we recommend to set up SAP Alert Notification service for SAP BTP, which allows to subscribe to events coming from the platform (such as from used services and SAP HANA Cloud) and can also handle custom alerts from your own applications, notifications from hyperscalers and from Dynatrace (SAP Cloud Platform Alert Notification – receive alerts from Dynatrace).

SAP Alert Notification service

Technical Ops Automation

For reducing overall technical operations efforts of your DevOps teams, we are offering the SAP Automation Pilot service. This service allows to automate regular technical DevOps tasks in the lifecycle of your apps running on SAP BTP and to link them to key DevOps processes. For this, the service provides a catalog of pre-defined commands that can be triggered out of the context of other DevOps services. One example would be an alert that you configure in the SAP Alert Notification service, having directly in mind what would be the first task of the ops team to react on this kind of alert. With the SAP Automation Pilot service, you are enabled to directly configure a command that gets automatically executed when this alert gets triggered – think of automated execution of root cause analysis or an automated restart of your app or your database.

SAP Automation Pilot

Integration into Strategic Operations Platforms

SAP does offer different central strategic operations platforms for different target groups – they also support you to ensure business continuity in SAP-centric landscapes, potentially comprising SAP cloud solutions and existing on-premise backend landscapes. Here, it is key that also SAP BTP operations and observability aspects can be integrated smoothly into the broader operations capabilities those platforms do offer.

For example, in SAP Cloud ALM, you can receive alerts from the Cloud Foundry environment and notifications and exceptions from Neo (such as monitoring alerts) – sent by SAP Alert Notification.

An integration with SAP Automation Pilot allows you to trigger customized or predefined commands on SAP BTP via SAP Cloud ALM Operation Flows.

For more information on the available and planned scope of SAP Cloud ALM for operations depicted below, see the SAP Cloud ALM for Operations home page.

SAP Cloud ALM for operations – functional overview

UDINA Best Practises

DevX Environment LATEST-20

Docker LogoUDINA DevOps and the local DevX environment uses the following setup, to allow a harmonized compatibility between tools and services:

SAP BTP Node.js Dependencies

PackageVersionNode Support
@sap/approuter≥15.xVersion 18 and Version 20 LTS
 ≥14.xVersion 16 and Version 18
@sap/cds-dk≥7.3.xVersion 20 LTS
 ≥7.xVersion 18
@ui5/cli≥3.xVersion 16, 18 or higher

Dockerfile

bash
FROM --platform=linux/amd64 debian:bookworm-slim
LABEL udina.btp.tools="1.20.0"
LABEL vendor="UNIORG Cloud Services"
LABEL maintainer="Holger Schäfer"
LABEL version="1.20.0"

# Disable warning: apt-key output should not be parsed (stdout is not a terminal)
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE true

# Install dependencies (deps? build-essential zip unzip tar)
# @sap/ux-ui5-tooling => npm keytar => libsecret-1-dev
RUN apt update && apt install -y \
    apt-utils \
    ca-certificates \
    curl \
    git \    
    gnupg2 \
    libsecret-1-dev \
    make \
    wget

# Install SAP btp CLI 2.54.0
ENV ARCH=linux-amd64
ENV TOOLS_URL=tools.hana.ondemand.com
WORKDIR /usr/local/bin
RUN BTP_CLI_VERSION="2.54.0" && curl --fail --silent --location \
    --cookie eula_3_1_agreed="$TOOLS_URL/developer-license-3_1.txt" \
    --url "https://$TOOLS_URL/additional/btp-cli-$ARCH-$BTP_CLI_VERSION.tar.gz" \
    | tar -xzf - --strip-components 1 "$ARCH/btp" 

# Install Cloud Foundry CLI v8
WORKDIR /
RUN curl -sL https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key \
    | apt-key add -
RUN echo "deb https://packages.cloudfoundry.org/debian stable main" \
    | tee /etc/apt/sources.list.d/cloudfoundry-cli.list
RUN apt update && apt install -y cf8-cli

# Install CF-Community CLI Plugins
RUN cf add-plugin-repo CF-Community https://plugins.cloudfoundry.org
RUN cf install-plugin DefaultEnv -f
RUN cf install-plugin html5-plugin -f
RUN cf install-plugin multiapps -f

# Install NodeJS supported LTS (20)
# Wait for @sap/AppRouter, @sap/cds, @ui5/cli support to use next LTS
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash -
RUN apt install -y nodejs

# Update npm to latest version
RUN npm i -g npm@latest

# Multi-Target Application
RUN npm i -g mbt

#  SAP Cloud Application Programming Model (CAP) Development Kit
RUN npm i -g @sap/cds-dk

# UI5 Command Line Interface 
RUN npm i -g @ui5/cli

# Run cleanup
RUN apt-get remove --purge --autoremove --yes \
    && apt-get clean -y \
    && rm -rf /var/lib/apt/lists/*

# Run command line
CMD ["bash"]

Examples

ExampleDescriptionComponentsAuthor
DevOps Docker ImagesA collection of Dockerfiles for images that can be used in Continuous Delivery (CD) pipelines for SAP development projects.PIPER JENKINS CF CLI NEO CLI MTA NODESAP
CI/CD SAPUI5 with GitLabSetting up CI/CD for SAP Cloud Foundry on GitLab for a SAPUI5 application built with UI5 ToolingSAPUI5 GITLABGeert-Jan Klaps
CI/CD SAPUI5 on ABAP with GitLabIn the ABAP world CI/CD was never as popular as nowadays. With the growing amount of UI5 apps, CI/CD is becoming a very hot topic. It’s even possible to use it for ABAP developments thanks to ABAPGit!ABAP GITLABWouter Lemaire