Setting up BTP ABAP Environment transport management with Cloud Transport Management Service
With the release 2302 in BTP ABAP Environment, it is now possible to integrate BTP ABAP software lifecycle management into Cloud Transport Management Service. (For other updates in 2302, refer to the blog or search in the official release note)
This is a big feature in BTP ABAP Environment because it offers much more flexibility in managing your transport request, much like STMS in the on-premise system.
This blog will touch the concept of Centralized Cloud Transport Management and go through step-by-step how to integrate BTP ABAP Environment into Cloud Transport Management.
The landscape architecture in this blog is just one of the examples. It may vary depending on how you design your landscape in your BTP global account.
Centralized Transport Management
SAP Cloud Transport Management Service(cTMS) lets you manage development objects and application specific artifacts across multiple subaccounts in BTP. It provides full visibility to what objects are transported from where to where, and the transport status and the logs. Its landscape wizard allows you to model complex landscape.
cTMS has been the core transport strategy for Integration development, such as transportation of integration flow artifacts, custom API in API management and other MTA content generated from Business Application Studio. Now, cTMS is able to handle content from BTP ABAP environment.
This is important in the ABAP Lifecycle management because:
- Complete control over export/import on each transport request level
- Centralized Cloud Transport Management system to handle multiple transport routes across ABAP systems/subacounts/regions
To translate this in a practicality, ideally, only one subaccount should run Cloud Transport Management Service(cTMS). If there is any other subaccount that runs cTMS, the effort will be redundant. Single cTMS can handle multiple transports routes across subaccounts in a single BTP global account. So it’s best to use a single subaccount and make it a central hub for controlling transport.
Comparing to the existing transport mechanism
Before this integration with cTMS, what was the transport mechanism for BTP ABAP Environment? Actually, there were already two ways to manage ABAP objects transport between multiple subaccounts.
- Git-based CTS (gCTS)
Integration of cTMS into ABAP lifecycle management is a new feature, but not completely new. Rather, it’s an extension of Git-based CTS(gCTS). To perform transport with cTMS, we still have to use “Manage Software Components” app in the Fiori launchpad in ABAP Environment. This app has been the core function and interface for performing Git-based CTS(gCTS), and cTMS needs this app to trigger the export of transport request.
So in short, it’s not a new mechanism. Rather, it’s a better version of Git-based CTS(gCTS) where we can have much better control on transport inside Cloud Transport Management Service.
Here is a step-by-step guide to how to configure the ABAP environment, Cloud Transport Management Service and creating necessary destinations.
1. ABAP Environment
1.1 Configure Software Components
Before start developing any ABAP objects in the source system, we must define a software component. Go to Manage Software Components app from the Fiori Launchpad. Create a new software component. Choose Clone on the right top corner.
A pop up is prompted for you to configure the software component before the cloning. Enter the followings and clone.
|Branch to be checked out:||main|
|Repository Role:||Source Pull and Push|
After a few minutes, cloning should be finished and you can see in your ADT that the new package with the name of software component is created. Add to your favorite package.
Create a sub-package for development under that generated package. All the development objects should be under that sub-package. Create a test class and generate a transport request.
1.2 Configure outbound communication
In the source system, go to Communication System app and create a new system and name it “CTMS”. Enter the following parameters.
|Host Name||e.g. https://transport-service-app-backend.ts.cfapps.eu10.hana.ondemand.com||URI property in the service key created for cTMS.|
|Token Endpoint||<subdomain>.authentication.sap.hana.ondemand.com/oauth/token?grant_type=client_credentials||URL property in the service key created for cTMS.|
|Auth method||OAuth 2.0|
|OAuth 2.0 Client ID||<client ID from the service key>||Same service key|
|OAuth 2.0 Client Secret||<client secret from the service key>||Same service key|
Next, go to Communication Arrangements app and create a new arrangement from template SAP_COM_0599. Enter the following parameters.
|Communication System||CTMS||Communication system created on the previous step|
|CTMS Node Name||DEV-ABAP||Must match the transport node creaetd in cTMS|
|OAuth 2.0 Client ID||OAuth 2.0 user created in the previous step|
1.3 Configure software component test integration
In the source system, go to Maintain Communication Users app and create a new user.
Then go to Communication Systems app and create a new system. Use the user just created. In the host parameter, enter host URL of the ABAP environment. You can find it by right clicking the ABAP cloud project in ADT -> ABAP Development->System URL. Port is 443.
Finally create a communication arrangements app and create a new arrangement from template SAP_COM_0510. Use the communication user and system just created.
After the communication arrangement SAP_COM_0510 is created, a service URL is generated in the bottom of the page. This URL will be used in step 2 later.
1.4 Configure target ABAP Environment
In the target system, login to BTP ABAP Environment. This should be a different ABAP system than what we configured through 1.1~1.3.
Follow the same steps of 1.3 and Configure software component test integration in the target system. Note that it’s recommended to use different user password, and be aware that the host URL for ABAP system should be different from the source system.
1.5 Clone software component in target ABAP Environment
As a result of step 1,1, there should be the same software component created in the target system. Access the Manage Software Component app and the “Cloned” status should be “No”. Go ahead an choose clone and follow the same configuration as in 1.1. The software component package will be generated in your target system as well, once the cloning is complete.
2. Configure destinations
Go to the subaccount where Cloud Transport Management Service is running.
Create a new destination that points to ABAP environment source system.
|Name||DST_DEV_ABAP(name of your choice)|
|URL||Service URL created in step 1.3|
|User/Password||User Password created in step 1.3|
Go on and create a new destination that points to ABAP environment target system.
|Name||DST_QAS_ABAP(name of your choice)|
|URL||Service URL created in step 1.4|
|User/Password||User Password created in step 1.4|
Do connection check and both connection should return 200 OK.
3. Cloud Transport Management Service
Create source & target system nodes that refers to source & target ABAP system.
|Name||DEV-ABAP / QAS-ABAP|
|Allow upload to Node||X||Allows manual upload of transport file|
Auto = transport automatically transferred to target node defined in the route.
Manual = transport request will NOT be forwarded to target node for import. Instead, user must manually forward it.
|Content Type||BTP ABAP|
|Destination||<Your destination created in step 2>|
Only “default” is available for content “BTP ABAP”.
Default strategy = the old version of object in target system will be stopped before the deployment of new version.
Blue-Green strategy = Import objects replace the old version in the target system without downtime.
Create transport route connecting these two nodes.
4. Testing import & export
Go to ADT and the transport request created in step 1.1 and release it. Go to Software Lifecycle Management app and in the main branch, there is an update that shows your transport request has been committed. Check on the commit with the transport request number and choose Export to cTMS. A pop up is displayed for you to select node for export. Select the node configured in step 1.2.
Now go to Cloud Transportation Management Service and go to Transport Action Logs from left side pane. You should be able to see that your commit ID with the transport request is exported from the source node.
Next, go to the target node. The transport request ID should be ready to be imported to the target system. Choose Imported Selected and approve the pop up.
Check the transport action log. The importing process should be logged with overall status. Click on the row and you can see the detailed import log as well. In case of import errors, detailed transport log will help you what went wrong during the importing process.
As the result of this import, you should be able to find the ABAP class object created in 1.1 transported to your target system.
This blog covered minimum configuration to make integration work between BTP ABAP environment and cTMS. As a next move, here are some topics that would be interesting to take look at, in order to extend our setup to the next level:
- Integrate this blog’s setup with SAP Solution Manager Change Request Management (ChaRM). This seems to be technically possible by integrating cTMS with ChaRM.
- Continuous deployment for ABAP development with cTMS
Thank you for the excellent blog. I have one clarification. We have CTMS activated as part of Integration Suite license. There is an instruction that we shouldn't use this service for other BTP solutions. If that is the case then how do we have a centralized CTMS subaccount catering the ABAP cloud, CI etc.?
Do you mind sharing the source that states cTMS should only be used for integration artifacts? It's an interesting statement because cTMS supports several content-type, including MTA(CI artifacts) and BTP_ABAP(ABAP objects), I believe the intention is to support multiple BTP solutions.
It is in the license terms and conditions as shown below. The TMS which comes along with IS should be used only for the Integration and not for other use cases.
I think Premium edition is only for standalone subscription, which is a license type outside of BTP. Therefore it makes sense TMS that comes with it only supports Integration Suite.
The scenario in this blog is for cTMS, Integration Suite, ABAP environment and so on that are subscribed in BTP as PAYG/CEPA license model.
In my opinion, it would be more appropriate to include a specific mention of this clause in the blog post, as it pertains to both the Premium and Digital versions of the Integration Suite.
Hello Aocheng Yang,
Thanks for writing this blog. One quick question though - You mention in step 1.5, that "As a result of step 1,1, there should be the same software component created in the target system." While creating the software component in source system (step 1.1), what setting tells the system to create the software component in the target system?
If you created a software component in ABAP Environment in the BTP subaccount, it will be visible to other ABAP environment in other subaccount as well, as long as it's under the same global account.
"There is a remote Git repository for each software component managed by SAP in the cloud. Using the SAP Fiori app Manage Software Components, a software component can be created from any ABAP system in the same global account."
Thanks very much..
Is the Transport Layer also created automatically and managed by SAP? I noticed that the Transport layer for the package corresponding to the software component in our Dev environment starts with a Z, but in the QA environment it starts with $ (In the QA environment we just cloned the software component, as you mentioned in your blog?)
Hi Aocheng Yang
I cant able to find SAP Fiori app "Manage Software Components".
Please let me know how to activate it.
I would be please if you also help to add "Communication System" app as well.
Both of the above Fiori app, i couldn't able to find in Fiori app library - https://fioriappslibrary.hana.ondemand.com/
Warm Regards, Pavan
You need to create a role from a role template SAP_BR_ADMINISTRATOR, which is relevant for "Manage Software Components" app. Add this role to your user and the app is available on your Home screen. Same principle with communication related apps.