Initial commit
This commit is contained in:
439
references/deployment-and-delivery.md
Normal file
439
references/deployment-and-delivery.md
Normal file
@@ -0,0 +1,439 @@
|
||||
# SAP BTP Deployment and Delivery - Detailed Reference
|
||||
|
||||
**Source**: [https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver](https://github.com/SAP-docs/btp-best-practices-guide/tree/main/docs/deploy-and-deliver)
|
||||
|
||||
---
|
||||
|
||||
## Deployment Overview
|
||||
|
||||
After development, applications are deployed to TEST and PROD environments. The approach depends on organizational needs:
|
||||
|
||||
- **Simple applications**: Manual deployment acceptable
|
||||
- **Enterprise settings**: Managed, automated delivery recommended
|
||||
|
||||
---
|
||||
|
||||
## Deployment Methods by Runtime
|
||||
|
||||
### Cloud Foundry Environment
|
||||
|
||||
**Key Recommendation**: Archive all components into one package as a Multitarget Application (MTA) archive including a deployment descriptor.
|
||||
|
||||
#### Java Applications
|
||||
|
||||
Deploy via:
|
||||
- SAP BTP cockpit
|
||||
- Cloud Foundry CLI
|
||||
- Multiple runtime and JVM options available
|
||||
|
||||
#### HTML5 Applications
|
||||
|
||||
Deploy via:
|
||||
- SAP Business Application Studio
|
||||
- Cloud Foundry CLI
|
||||
- SAP BTP cockpit
|
||||
|
||||
#### Node.js Applications
|
||||
|
||||
Deploy via:
|
||||
- SAP Business Application Studio
|
||||
- Cloud Foundry CLI
|
||||
|
||||
#### SAP HANA XSA Applications
|
||||
|
||||
Deploy via:
|
||||
- SAP HANA Deployment Infrastructure (HDI) in Business Application Studio
|
||||
- Cloud Foundry CLI
|
||||
|
||||
#### Custom Buildpacks
|
||||
|
||||
Cloud Foundry supports "Bring Your Own Buildpack" for custom runtime needs.
|
||||
|
||||
### Neo Environment
|
||||
|
||||
Similar deployment options to Cloud Foundry with:
|
||||
- SAP BTP cockpit
|
||||
- Neo console client
|
||||
|
||||
### Kyma Environment
|
||||
|
||||
**Core Requirement**: Package applications in Linux Docker images.
|
||||
|
||||
**Options**:
|
||||
- Standard Dockerfile
|
||||
- Cloud Native Buildpacks
|
||||
|
||||
**Production Setup**:
|
||||
- Use automation tools like SAP Continuous Integration and Delivery
|
||||
- Deploy with Helm charts
|
||||
- Sample GitHub repositories available for Java, Node.js, HTML5
|
||||
|
||||
---
|
||||
|
||||
## Delivery Options
|
||||
|
||||
### Enterprise Delivery Approach
|
||||
|
||||
A managed, automated delivery approach is recommended because it:
|
||||
- Is less error-prone
|
||||
- Creates repeatable outcomes
|
||||
- Enables governance
|
||||
- Provides central control over production propagation
|
||||
|
||||
### Delivery Options Matrix
|
||||
|
||||
| Content Type | CI/CD | Cloud Transport Mgmt | CTS+ |
|
||||
|--------------|-------|---------------------|------|
|
||||
| Development Content (Java, HTML5, CAP) | Recommended | Recommended | - |
|
||||
| SAP Cloud Integration Content | In development | Recommended | - |
|
||||
| SAP HANA Cloud Artifacts | Recommended | Recommended | - |
|
||||
| SAP Build Work Zone | - | Recommended | - |
|
||||
| Other App-Specific Content | - | Recommended | Recommended |
|
||||
| Kyma-Based Apps | Recommended | - | - |
|
||||
|
||||
---
|
||||
|
||||
## SAP Continuous Integration and Delivery
|
||||
|
||||
### Solution Options
|
||||
|
||||
| Aspect | SAP CI/CD Service | Project "Piper" |
|
||||
|--------|-------------------|-----------------|
|
||||
| Expertise Required | Low | Medium-to-High |
|
||||
| Flexibility | Medium | High |
|
||||
| Infrastructure | Ready-to-use | Requires Jenkins (or Cx Server) |
|
||||
| Support | Direct SAP support | Open-source community |
|
||||
| Best For | Typical SAP customers | Advanced customization |
|
||||
|
||||
### SAP CI/CD Service Features
|
||||
|
||||
- Pre-configured pipelines for SAP technologies
|
||||
- Built-in code quality checks
|
||||
- Automated testing integration
|
||||
- Direct deployment to SAP BTP
|
||||
|
||||
### Project "Piper"
|
||||
|
||||
- Open-source CI/CD library
|
||||
- Extensive customization options
|
||||
- Jenkins-based pipelines
|
||||
- GitHub: [https://github.com/SAP/jenkins-library](https://github.com/SAP/jenkins-library)
|
||||
|
||||
---
|
||||
|
||||
## Transport Management
|
||||
|
||||
### SAP Cloud Transport Management
|
||||
|
||||
Centralizes handling of development content archives across subaccounts and global accounts.
|
||||
|
||||
**Features**:
|
||||
- MTA file transport
|
||||
- Application-specific content transport
|
||||
- Cross-global account transport
|
||||
- Integration with change management tools
|
||||
|
||||
**Recommendation**: Use for all SAP BTP content regardless of format.
|
||||
|
||||
### CTS+ (Change and Transport System)
|
||||
|
||||
- Operates on-premise within ABAP systems
|
||||
- Supports SAP BTP artifacts packaged as MTA archives
|
||||
- Integration with SAP Solution Manager
|
||||
|
||||
**Direction**: SAP Cloud Transport Management is the future-proof choice.
|
||||
|
||||
### Combined CI/CD and Transport Approach
|
||||
|
||||
```
|
||||
Developer Commit
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ CI Pipeline │ (Build, Test, Deploy to Dev)
|
||||
└────────┬─────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────┐
|
||||
│ SAP Cloud Transport Management │
|
||||
│ │
|
||||
│ Dev ──► Test ──► Production │
|
||||
│ (Governance-defined pathways) │
|
||||
└──────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
Optional Integration
|
||||
with SAP Cloud ALM or
|
||||
SAP Solution Manager
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Change Management Integration
|
||||
|
||||
### SAP Cloud ALM Integration
|
||||
|
||||
- Change and deployment management
|
||||
- Centralized landscape definition
|
||||
- Access control configuration
|
||||
- Synchronized transports
|
||||
|
||||
### SAP Solution Manager Integration
|
||||
|
||||
- Minimum version: 7.2 SP10
|
||||
- Hybrid scenario support (on-premise + cloud)
|
||||
- Parallel operation with CTS+ and Cloud Transport Management
|
||||
|
||||
---
|
||||
|
||||
## Manual Delivery Methods
|
||||
|
||||
For simpler scenarios:
|
||||
|
||||
1. **Direct IDE Deployment**:
|
||||
- Deploy to multiple subaccounts via cockpit or CLI
|
||||
|
||||
2. **Solution Export Wizard** (Neo):
|
||||
- Model solutions as MTA files
|
||||
- Export for transport
|
||||
|
||||
3. **Git Repository Synchronization**:
|
||||
- For HTML5 applications
|
||||
- Manual deployment after sync
|
||||
|
||||
4. **SAP HANA XS Application Lifecycle Management**:
|
||||
- Transport routes between systems
|
||||
|
||||
---
|
||||
|
||||
## Multitarget Application (MTA) Archives
|
||||
|
||||
### Structure
|
||||
|
||||
```
|
||||
my-app.mtar
|
||||
├── mta.yaml (deployment descriptor)
|
||||
├── app-module-1/
|
||||
├── app-module-2/
|
||||
├── db-module/
|
||||
└── srv-module/
|
||||
```
|
||||
|
||||
### mta.yaml Example
|
||||
|
||||
```yaml
|
||||
_schema-version: "3.1"
|
||||
ID: my-mta-app
|
||||
version: 1.0.0
|
||||
|
||||
modules:
|
||||
- name: my-srv
|
||||
type: nodejs
|
||||
path: srv
|
||||
provides:
|
||||
- name: srv-api
|
||||
properties:
|
||||
url: ${default-url}
|
||||
requires:
|
||||
- name: my-db
|
||||
- name: my-auth
|
||||
|
||||
- name: my-db-deployer
|
||||
type: hdb
|
||||
path: db
|
||||
requires:
|
||||
- name: my-db
|
||||
|
||||
resources:
|
||||
- name: my-db
|
||||
type: com.sap.xs.hdi-container
|
||||
- name: my-auth
|
||||
type: org.cloudfoundry.managed-service
|
||||
parameters:
|
||||
service: xsuaa
|
||||
service-plan: application
|
||||
```
|
||||
|
||||
### Building MTAs
|
||||
|
||||
```bash
|
||||
# Install MTA Build Tool
|
||||
npm install -g mbt
|
||||
|
||||
# Build MTA archive
|
||||
mbt build
|
||||
|
||||
# Result: mta_archives/my-app_1.0.0.mtar
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kyma Deployment Details
|
||||
|
||||
### Docker Image Creation
|
||||
|
||||
**Standard Dockerfile**:
|
||||
```dockerfile
|
||||
FROM node:18-alpine
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production
|
||||
COPY . .
|
||||
EXPOSE 8080
|
||||
CMD ["npm", "start"]
|
||||
```
|
||||
|
||||
**Cloud Native Buildpacks**:
|
||||
```bash
|
||||
# Using pack CLI
|
||||
pack build my-app --builder paketobuildpacks/builder:base
|
||||
```
|
||||
|
||||
### Helm Chart Structure
|
||||
|
||||
```
|
||||
my-app/
|
||||
├── Chart.yaml
|
||||
├── values.yaml
|
||||
├── templates/
|
||||
│ ├── deployment.yaml
|
||||
│ ├── service.yaml
|
||||
│ ├── ingress.yaml
|
||||
│ └── configmap.yaml
|
||||
└── charts/
|
||||
```
|
||||
|
||||
### Deployment Commands
|
||||
|
||||
```bash
|
||||
# Deploy with Helm
|
||||
helm upgrade --install my-app ./my-app \
|
||||
--namespace my-namespace \
|
||||
--set image.tag=1.0.0
|
||||
|
||||
# Or use kubectl directly
|
||||
kubectl apply -f k8s/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CI/CD Pipeline Example
|
||||
|
||||
### SAP CI/CD Service Configuration
|
||||
|
||||
```yaml
|
||||
# .pipeline/config.yml
|
||||
general:
|
||||
buildTool: 'mta'
|
||||
|
||||
stages:
|
||||
Build:
|
||||
mtaBuild: true
|
||||
|
||||
Additional Unit Tests:
|
||||
npmExecuteScripts:
|
||||
- 'test'
|
||||
|
||||
Acceptance:
|
||||
cloudFoundryDeploy:
|
||||
deployTool: 'mtaDeployPlugin'
|
||||
deployType: 'standard'
|
||||
|
||||
Release:
|
||||
cloudFoundryDeploy:
|
||||
deployTool: 'mtaDeployPlugin'
|
||||
deployType: 'standard'
|
||||
```
|
||||
|
||||
### Jenkins Pipeline (Project Piper)
|
||||
|
||||
```groovy
|
||||
@Library('piper-lib-os') _
|
||||
|
||||
node {
|
||||
stage('Init') {
|
||||
checkout scm
|
||||
setupCommonPipelineEnvironment script: this
|
||||
}
|
||||
|
||||
stage('Build') {
|
||||
mtaBuild script: this
|
||||
}
|
||||
|
||||
stage('Deploy') {
|
||||
cloudFoundryDeploy script: this
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Transport Landscape Configuration
|
||||
|
||||
### Defining Transport Routes
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ SAP Cloud Transport Management │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Node: Development │
|
||||
│ ├── Import Queue │
|
||||
│ └── Forward to: Test │
|
||||
│ │
|
||||
│ Node: Test │
|
||||
│ ├── Import Queue │
|
||||
│ └── Forward to: Production │
|
||||
│ │
|
||||
│ Node: Production │
|
||||
│ └── Import Queue │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Upload to Transport Management
|
||||
|
||||
```bash
|
||||
# Using Cloud Transport Management API
|
||||
curl -X POST "[https://[ctms-url]/v2/files/upload"](https://[ctms-url]/v2/files/upload") \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-F "file=@my-app.mtar"
|
||||
|
||||
# Create transport request
|
||||
curl -X POST "[https://[ctms-url]/v2/nodes/[node-id]/transportRequests"](https://[ctms-url]/v2/nodes/[node-id]/transportRequests") \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"fileId": "[file-id]", "description": "Deploy version 1.0.0"}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Best Practices Summary
|
||||
|
||||
### Deployment
|
||||
|
||||
1. Use MTA archives for multi-component applications
|
||||
2. Containerize applications for Kyma with proper Docker images
|
||||
3. Implement proper health checks and probes
|
||||
4. Use environment-specific configuration
|
||||
|
||||
### Delivery
|
||||
|
||||
1. Combine CI/CD with Cloud Transport Management
|
||||
2. Automate testing at every stage
|
||||
3. Implement proper approvals for production
|
||||
4. Maintain audit trails for compliance
|
||||
|
||||
### Governance
|
||||
|
||||
1. Define clear transport routes
|
||||
2. Implement approval workflows
|
||||
3. Restrict who can deploy to production
|
||||
4. Track all changes through transport requests
|
||||
|
||||
---
|
||||
|
||||
**Source Documentation**:
|
||||
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-and-deliver-5972cdb.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploy-and-deliver-5972cdb.md)
|
||||
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploying-applications-866ab13.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/deploying-applications-866ab13.md)
|
||||
- [https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/delivering-applications-b39bae3.md](https://github.com/SAP-docs/btp-best-practices-guide/blob/main/docs/deploy-and-deliver/delivering-applications-b39bae3.md)
|
||||
Reference in New Issue
Block a user