Files
gh-secondsky-sap-skills-ski…/references/cicd.md
2025-11-30 08:55:02 +08:00

339 lines
7.3 KiB
Markdown

# SAP BTP CI/CD Reference
## Overview
Continuous Integration (CI) and Continuous Delivery (CD) are complementary DevOps practices that automate application development, testing, and deployment on SAP BTP.
## Core Concepts
### Continuous Integration (CI)
- Frequent code integration into central repository
- Automated builds and tests on each commit
- Early error detection
- Prevents integration problems from accumulating
### Continuous Delivery (CD)
- Extends CI with deployment automation
- Successfully tested changes ready for production
- Code built, tested, and packaged in deployable format
- Deploy at management's discretion
## SAP Continuous Integration and Delivery
**Service Type**: BTP-native service with pre-configured pipelines
### Advantages
| Feature | Benefit |
|---------|---------|
| Simplicity | Out-of-the-box pipelines, minimal configuration |
| Flexibility | Customizable pipelines, additional commands |
| Infrastructure | Built-in management, no server maintenance |
| SAP-Specific | Optimized for SAP technologies |
### Supported Pipeline Types
| Pipeline | Use Case |
|----------|----------|
| Cloud Foundry Environment | SAP Fiori, CAP applications |
| SAP Fiori for ABAP Platform | Fiori apps on ABAP |
| SAP Integration Suite Artifacts | Integration content |
## Setup Process
### Step 1: Enable Service
1. Open SAP BTP Cockpit
2. Navigate to subaccount
3. Enable "Continuous Integration & Delivery"
4. Subscribe to the service
### Step 2: Assign Roles
| Role | Permissions |
|------|-------------|
| Administrator | Full access, job management |
| Developer | Create/run jobs, view results |
### Step 3: Configure Repository Credentials
**Supported Repositories:**
- GitHub
- GitLab
- Bitbucket
- Azure Repos
```yaml
# Example credential configuration
credentials:
- name: github-credentials
type: basic
username: ${GITHUB_USER}
password: ${GITHUB_TOKEN}
```
### Step 4: Create CI/CD Job
```yaml
# .pipeline/config.yml for CAP application
general:
projectName: my-cap-app
buildTool: mta
stages:
Build:
mtaBuildParameters:
platform: cf
Additional Unit Tests:
npmExecuteScripts: true
npmScripts: ['test']
Release:
cloudFoundryDeploy: true
cfApiEndpoint: [https://api.cf.eu10.hana.ondemand.com](https://api.cf.eu10.hana.ondemand.com)
cfOrg: my-org
cfSpace: my-space
mtarFilePath: mta_archives/my-cap-app.mtar
```
### Step 5: Configure Webhooks
Automate builds on push:
1. Copy webhook URL from CI/CD service
2. Add webhook in repository settings
3. Select events (push, pull request)
## Pipeline Configuration
### CAP Node.js Pipeline
```yaml
# .pipeline/config.yml
general:
buildTool: mta
stages:
Build:
mtaBuildParameters:
platform: cf
Additional Unit Tests:
npmExecuteScripts: true
npmScripts:
- test
Acceptance:
cfDeploy: true
cloudFoundryDeploy: true
cfApiEndpoint: [https://api.cf.eu10.hana.ondemand.com](https://api.cf.eu10.hana.ondemand.com)
cfOrg: my-org
cfSpace: dev
Release:
cfDeploy: true
cloudFoundryDeploy: true
cfApiEndpoint: [https://api.cf.eu10.hana.ondemand.com](https://api.cf.eu10.hana.ondemand.com)
cfOrg: my-org
cfSpace: prod
```
### CAP Java Pipeline
```yaml
general:
buildTool: mta
stages:
Build:
mtaBuildParameters:
platform: cf
mavenExecuteStaticCodeChecks: true
Additional Unit Tests:
mavenExecute: true
goals: ['test']
```
### SAP Fiori Pipeline
```yaml
general:
buildTool: npm
stages:
Build:
npmExecuteScripts: true
npmScripts: ['build']
Additional Unit Tests:
npmExecuteScripts: true
npmScripts: ['test']
karmaExecuteTests: true
```
## ABAP CI/CD
### gCTS Integration
```yaml
# Pipeline for ABAP Cloud
stages:
Import:
abapEnvironmentPullGitRepo: true
repositoryName: my-software-component
Test:
abapEnvironmentRunATCCheck: true
atcConfig:
checkVariant: ABAP_CLOUD_DEVELOPMENT_DEFAULT
Release:
abapEnvironmentAssembleConfirm: true
```
### ATC Integration
```yaml
stages:
Quality:
abapEnvironmentRunATCCheck: true
atcConfig:
checkVariant: ABAP_CLOUD_DEVELOPMENT_DEFAULT
failOn: ERROR
priorityFilter:
- '1'
- '2'
```
## Kyma CI/CD
### Terraform Integration
```hcl
# main.tf for Kyma provisioning
module "kyma" {
source = "github.com/SAP/terraform-module-kyma"
subaccount_id = var.subaccount_id
cluster_name = "my-kyma-cluster"
region = "eu-central-1"
}
```
### Helm Deployment
```yaml
stages:
Build:
containerBuild: true
dockerfilePath: Dockerfile
Deploy:
helmDeploy: true
helmValues:
- ./chart/values.yaml
kubeConfigPath: ${KUBECONFIG}
```
## Security in CI/CD
### Code Scanning
```yaml
stages:
Security:
sonarQubeScan: true
sonarQubeConfig:
serverUrl: ${SONAR_URL}
projectKey: my-project
dependencyTrackUpload: true
fortifyScan: true
```
### Secrets Management
```yaml
# Using credentials
credentials:
- name: cf-credentials
type: usernamePassword
username: ${CF_USER}
password: ${CF_PASSWORD}
- name: hana-credentials
type: usernamePassword
username: ${HANA_USER}
password: ${HANA_PASSWORD}
```
## Best Practices
### Pipeline Design
1. Keep pipelines fast (< 15 minutes ideal)
2. Fail fast on critical issues
3. Use parallel stages where possible
4. Cache dependencies
### Testing Strategy
```yaml
stages:
Unit Tests:
# Fast, run on every commit
npmScripts: ['test:unit']
Integration Tests:
# Slower, run on PR merge
npmScripts: ['test:integration']
E2E Tests:
# Slowest, run before release
npmScripts: ['test:e2e']
```
### Environment Strategy
| Environment | Trigger | Purpose |
|-------------|---------|---------|
| Development | Every push | Developer testing |
| QA | PR merge | QA testing |
| Staging | Release branch | Pre-production |
| Production | Manual approval | Live system |
## Monitoring
### Job Status
- View in CI/CD service UI
- Email notifications
- Webhook integrations
### Metrics
- Build duration
- Success rate
- Test coverage
- Deployment frequency
## Troubleshooting
| Issue | Cause | Solution |
|-------|-------|----------|
| Build timeout | Long-running tests | Increase timeout, parallelize |
| Authentication failed | Expired credentials | Refresh tokens |
| Deployment failed | Resource quota | Check CF/Kyma limits |
| Test failures | Environment mismatch | Use consistent test data |
## Learning Resources
| Resource | Description |
|----------|-------------|
| "Exploring DevOps with SAP BTP" | SAP Learning course |
| "Efficient DevOps with SAP" | openSAP course |
| CI/CD Introduction Guide | Technical documentation |
## Source Documentation
- CI/CD Overview: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/continuous-integration-and-delivery-ci-cd-fe74df5.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/continuous-integration-and-delivery-ci-cd-fe74df5.md)
- CI/CD Introduction: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/introducing-continuous-integration-and-delivery-ci-cd-8ee5353.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/introducing-continuous-integration-and-delivery-ci-cd-8ee5353.md)
- SAP CI/CD Service: [https://help.sap.com/docs/continuous-integration-and-delivery](https://help.sap.com/docs/continuous-integration-and-delivery)