Skip to Content
Technical Articles

DevOps SAP Cloud-Foundry with Concourse CI/CD

Cloud Foundry is an open source, industry standard Platforms as a Service (PaaS) technology for developing and deploying cloud applications in both private and public cloud environments.

SAP Cloud Platform has adopted the open source Cloud Foundry technology as part of its portfolio, and provides services around SAP Cloud Platform so that customers and enterprises can leverage the power of Cloud Foundry for cloud-native development.

Concourse on the other hand in CI/CD tool, and is pretty popular in the Cloud Foundry universe . https://blog.concourse-ci.org/the-concourse-crew–2017-/ will give you a fair understanding on how concourse came into existence. If you are developing in CF, Concourse is the way to go.

Each step in concourse build is executed inside a container, which means we need a docker for the build of the same. Concourse has an already defined resource called cf (https://github.com/cloudfoundry-community/cf-resource) which can be used in your pipelines. The cf-resource works well, but would not handle lots of stuff a normal devops would be requiring. https://github.com/nulldriver/cf-cli-resource is a good docker-image resource, which pretty much covers all the functionality provided by cf

Though SAP Cloud Foundry is based on open-source cloudfoundry, they heavily rely on a multi-apps plugin (https://github.com/cloudfoundry-incubator/multiapps-cli-plugin). The core idea is to deploy Multi-Target Applications which will be compiled and split into CF apps and services deployed by CF MTA.

We have modified the cf-cli-resource and built our own docker image to accomodate Multiapps . We also need to use Cloud MTA Build, which would take an MTA file and build the Multi Target Archive (MTAR File)

https://github.com/cosmo83/cf-cli-resource/ is the resource repo, and the docker build is already provided at cosmo83/cf-cli-resource.

Please find a sample pipeline

---
resource_types:
- name: cf-cli-resource
  type: docker-image
  source:
    repository: cosmo83/cf-cli-resource
    tag: latest

resources:
- name: testproj
  type: git
  source:
    uri: https://github.com/cosmo83/testproj
    branch: master
    

- name: cf-env
  type: cf-cli-resource
  source:
    api: https://api.cf.eu10.hana.ondemand.com
    username: <Your CF Username>
    password: <Your CF Password>
    org: <Your CF Org>
    space: <Your CF Space>
    skip_cert_check: false


jobs:
- name: cfupload
  plan:
  - get: testproj
    trigger: true
  - put: resource-deploy-mta-app
    resource: cf-env
    params:
      command: deploy
      mta_file: testproj/mta.yaml
  - put: cf-bind-service
    resource: cf-env
    params:
      command: bind-service
      app_name: ui
      service_instance: mydest


The view of the pipeline from concourse



GITHUB Fetch Task



MBT Build Task 



MBT Build Completed ... CF Push to your tenant



CF Push completes...



CF Bind Task
Be the first to leave a comment
You must be Logged on to comment or reply to a post.