github.com/xgoffin/jenkins-library@v1.154.0/documentation/docs/guidedtour.md (about)

     1  # Getting Started with Project "Piper"
     2  
     3  Follow this guided tour to become familiar with the basics of using project "Piper".
     4  
     5  The public sample application [cloud-cf-helloworld-nodejs][cloud-cf-helloworld-nodejs] will be enriched with a pipeline which syncs the sources, builds these as multitarget applications and deploys the result into a Cloud Foundry environment. The application contains a simple `nodejs` application. Deployed as web service, it serves static data.
     6  
     7  **Recommendation:** We recommend to clone the sample application [cloud-cf-helloworld-nodejs][cloud-cf-helloworld-nodejs] and execute the instructions on your own repository. See **(Optional) Sample Application**.
     8  
     9  The stated instructions assume the use of this application.
    10  
    11  ## Prerequisites
    12  
    13  * You have installed a Linux system with at least 4 GB memory. **Note:** We have tested our samples on Ubuntu 16.04. On Microsoft Windows, you might face some issues.
    14  * You have installed the newest version of Docker. See [Docker Community Edition](https://docs.docker.com/install/). **Note:** we have tested on Docker 18.09.6.
    15  * Your system has access to [GitHub.com][github].
    16  
    17  ## Install your Jenkins
    18  
    19  For an approach to setup a Jenkins build sever which fits the needs of the project "Piper" pipelines and steps please read the [Infrastructure Overview][resources-infrastructure].
    20  
    21  ## (Optional) Sample Application
    22  
    23  !!! info "Choosing the best sample application"
    24      Depending on the type of project you're interested in, different sample applications might be interesting.
    25      For SAP Cloud SDK, please have a look at the [Address Manager](https://github.com/sap/cloud-s4-sdk-book) example application.
    26  
    27  Copy the sources of the application into your own Git repository. While we will ask you to fork the application's repository into a **GitHub** space, you can use any version control system based on Git like **GitLab** or **plain git**. **Note:** A `public` GitHub repository is visible to the public. The configuration files may contain data you don't want to expose, so use a `private` repository.
    28  
    29  1. Create an organization on GitHub, if you haven't any yet. See [Creating a new organization][github-create-org].
    30  1. [Duplicate][github-duplicate-repo] the repository [cloud-cf-helloworld-nodejs][cloud-cf-helloworld-nodejs] into your GitHub organization. [Make this repository private][github-set-repo-visible]. **Note:** Forked public repositories cannot be made private.
    31  1. Get an account and space in the Cloud Foundry environment. For the deployment of the application you need access to a space on the Cloud Foundry environment of the SAP Business Technology Platform (SAP BTP). If you haven't any yet, get a [Trial Account][sap-cp-trial].
    32  1. Select the `1_REST_persist_in_Memory` branch of your [cloud-cf-helloworld-nodejs] fork. Other branches might work as well, but this one is tested.
    33  
    34  ## Create Your First Pipeline
    35  
    36  1. Get your application repository in place.
    37  1. Create a new file with the name `Jenkinsfile` in the root level of your repository and enter the following code:
    38  
    39     ```
    40     @Library('piper-lib-os') _
    41     node() {
    42         stage('prepare') {
    43             checkout scm
    44             setupCommonPipelineEnvironment script:this
    45         }
    46     }
    47     ```
    48  
    49     The "prepare" step synchronizes the repository and initializes the project specific settings. For more information about Jenkinsfiles and pipelines, see [Using a Jenkinsfile][jenkins-io-jenkinsfile].
    50  
    51  1. Save your changes to your remote repository.
    52  
    53  1. To set up a Jenkins job for your repository, open the Jenkins UI under `http://<jenkins-server-address>:<http-port>` and choose **New Item**. Per default, the `cx-server` starts Jenkins on HTTP port `80`. For more information, see the [Jenkins User Documentation][jenkins-io-documentation].
    54  
    55      ![Clicke New Item](images/JenkinsHomeMenu-1.png "Jenkins Home Menu")
    56  
    57  1. Provide a name for your new item (for example, *My First Pipeline*) and select **Multibranch Pipeline**.
    58      ![Create Pipeline Job](images/JenkinsNewItemPipeline.png "Jenkins New Item")
    59  
    60      **Note:** The ready-made continuous delivery pipelines of project "Piper" must run as **Multibranch Pipeline**.
    61  
    62  1. For **Branch Sources**, choose **Add source**, select **Git** as source repository.
    63  
    64      ![Create Pipeline Job](images/JenkinsNewItemPipeline-AddSource.png "Branch Sources - Add source")
    65  
    66  1. For **Project Repository** in the **Git** section, enter the URL of your Git repository, for example `https://github.com/<your-org>/cloud-cf-helloworld-nodejs`. **Note:** If your repository is protected, you must provide your credentials in **Credentials**.
    67  
    68  1. For **Discover branches**, choose **Add** and **Filter by name (with wildcards)**.
    69  
    70      ![Create Pipeline Job](images/JenkinsNewItemPipeline-DiscoverBranch.png "Discover branches - Add")
    71  
    72      A multibranch pipeline can execute different Jenkinsfiles for different branches. In this case, however, configure the pipeline of a single branch only.
    73  
    74  1. For **Include** in the **Filter by name** section, enter the branch name `1_REST_persist_in_Memory`.
    75  
    76      ![Create Pipeline Job](images/JenkinsNewItemPipeline-FilterByName.png "Discover Branches - Filter By Name")
    77  
    78  1. Choose **Save**. **Result:** Jenkins scans the repository for branches and filters them according to the specified **Includes**. If the branch is detected, it is built.
    79  
    80  For additional information about multibranch pipelines, please refer to the [Jenkins documentation][jenkins-io-multibranch].
    81  
    82  ## Add a Build Step
    83  
    84  1. In your `Jenkinsfile`, add the following code snippet:
    85  
    86     ```
    87     stage('build') {
    88         mtaBuild script: this
    89     }
    90     ```
    91  
    92  The `mtaBuild` step calls a build tool to build a multitarget application (MTA). The tool consumes an MTA descriptor that contains the metadata of all entities which comprise an application or are used by one during deployment or runtime, and the dependencies between them. For more information about MTAs, see [sap.com][sap].
    93  
    94  1. Create the MTA descriptor file with the name `mta.yaml` in the root level of the repository. Insert the following code:
    95  
    96     ```
    97     _schema-version: 2.1.0
    98     ID: com.sap.piper.node.hello.world
    99     version: 1.0.0
   100     description: A Hello World sample application
   101     provider: SAP Sample generator
   102     modules:
   103       - name: piper.node.hello.world
   104         type: nodejs
   105         path: .
   106     ```
   107  
   108  1. Configure the step to build an MTA for the Cloud Foundry environment. Create the configuration file `.pipeline/config.yml` relative to the root level of the repository and insert the following content:
   109  
   110     ```
   111     general:
   112     steps:
   113       mtaBuild:
   114         buildTarget: 'CF'
   115     ```
   116  
   117     For additional information about the configuration, have a look at the [Common Configuration Guide][resources-configuration] and the [MTA build step documentation][resources-step-mtabuild].
   118  
   119  1. Save your changes to your remote repository.
   120  
   121  1. To run your pipeline, choose **Build Now** in the job UI. **Result:** The pipeline processed two stages, the "prepare" and the "build".
   122  
   123  ## Add a Deploy Step
   124  
   125  1. In your `Jenkinsfile`, add the following code snippet:
   126  
   127     ```
   128     stage('deploy') {
   129         cloudFoundryDeploy script: this
   130     }
   131     ```
   132  
   133  The `cloudFoundryDeploy`  step calls the Cloud Foundry command line client to deploy the built MTA into SAP BTP.
   134  
   135  1. To configure the step to deploy into the Cloud Foundry environment, in your repository, open the `.pipeline/config.yml` and add the following content:
   136  
   137     ```
   138       cloudFoundryDeploy:
   139         deployTool: 'mtaDeployPlugin'
   140         deployType: 'standard'
   141         cloudFoundry:
   142           org: '<your-organisation>'
   143           space: '<your-space>'
   144           credentialsId: 'CF_CREDENTIALSID'
   145     ```
   146  
   147     **Note:** look after the indentation of the step within the YAML. Specify the `organisation` and `space` properties. For more information about the configuration, see the [Common Configuration Guide][resources-configuration] and [cloudFoundryDeploy][resources-step-cloudFoundryDeploy].
   148  1. The key `CF_CREDENTIALSID` refers to a user-password credential you must create in Jenkins: In Jenkins, choose **Credentials** from the main menu and add a **Username with Password** entry.
   149  
   150      ![Add Credentials](images/JenkinsCredentials-1.png "Add Credentials")
   151  
   152  1. Save the Credential
   153  
   154  1. Save your changes to your remote repository.
   155  
   156  1. To run your pipeline, choose **Build Now** in the job UI. **Result:** The pipeline processed the three stages "prepare", "build" and "deploy".
   157  
   158      ![Build Now](images/JenkinsPipelineJob.png "Stage View")
   159  
   160  If your pipeline fails, compare its files to the final [Jenkinsfile][guidedtour-sample.jenkins], the [config.yml][guidedtour-sample.config], and the [mta.yaml][guidedtour-sample.mta]. **Note**: YAML files are surprisingly sensitive regarding indentation.
   161  
   162  ## Open Application
   163  
   164  Your application has been deployed into your space in the Cloud Foundry space on SAP BTP. Login to SAP BTP and navigate into you space.   **Result:** Your space contains the application `piper.node.hello.world`, the state of the application is `Started`.
   165  
   166    ![Deployed Application](images/SCPDeployApp-1.png "SAP Business Technology Platform")
   167  
   168  Open the application name to get into the `Application Overview`. Open the **Application Route** and add `/users` to the URL. **Result:** The application returns a list of user data.
   169  
   170  ## What's Next
   171  
   172  You are now familiar with the basics of using project "Piper". Through the concept of pipeline as code, project "Piper" and Jenkins pipelines are extremely powerful. While Jenkins pipelines offer a full set of common programming features, project "Piper" adds SAP-specific flavors. Have a look at the different **Scenarios**  to understand how to easily integrate SAP systems with defaults.
   173  Dive into the ready-made continuous delivery pipeline: the **General Purpose Pipeline** helps you to quickly build and deliver your apps.
   174  Browse the steadily increasing list of features you can implement through the project "Piper" **Steps**.
   175  
   176  The **Configuration** pattern supports simple pipelines that can be reused by multiple applications. To understand the principles of inheritance and customization, have a look at the the [configuration][resources-configuration] documentation.
   177  
   178  [guidedtour-my-own-jenkins]:         myownjenkins.md
   179  [guidedtour-sample.config]:          samples/cloud-cf-helloworld-nodejs/pipeline/config.yml
   180  [guidedtour-sample.jenkins]:         samples/cloud-cf-helloworld-nodejs/Jenkinsfile
   181  [guidedtour-sample.mta]:             samples/cloud-cf-helloworld-nodejs/mta.yaml
   182  [resources-configuration]:           configuration.md
   183  [resources-infrastructure]:          infrastructure/overview.md
   184  [resources-step-mtabuild]:           steps/mtaBuild.md
   185  [resources-step-cloudFoundryDeploy]: steps/cloudFoundryDeploy.md
   186  
   187  [sap]:                               https://www.sap.com
   188  [sap-cp-trial]:                      https://account.hanatrial.ondemand.com
   189  
   190  [devops-docker-images-cxs-guide]:    https://github.com/SAP/devops-docker-cx-server/blob/master/docs/operations/cx-server-operations-guide.md
   191  
   192  [cloud-cf-helloworld-nodejs]:        https://github.com/SAP/cloud-cf-helloworld-nodejs
   193  [github]:                            https://github.com
   194  [jenkins-io-documentation]:          https://jenkins.io/doc/
   195  [jenkins-io-jenkinsfile]:            https://jenkins.io/doc/book/pipeline/jenkinsfile
   196  [jenkins-io-multibranch]:            https://jenkins.io/doc/book/pipeline/multibranch/
   197  
   198  [github-create-org]:                 https://help.github.com/en/articles/creating-a-new-organization-from-scratch
   199  [github-duplicate-repo]:             https://help.github.com/en/articles/duplicating-a-repository
   200  [github-set-repo-visible]:           https://help.github.com/en/articles/setting-repository-visibility