anchor.diff:  image::resolve-issue.png[scaledwidth=75%]
   === Promote build
   image::prod-deploy-input.png[scaledwidth=75%]
  -=== Pipeline end
  -image::build-success.png[scaledwidth=75%]
   === Mail to customer
   image::prod-deploy-mail.png[scaledwidth=75%]
   === Release notes
  +[source,groovy]
  +----
  +withCredentials([[credentialsId: 'bitbucket_pw',
  +                  usernameVariable: 'BITBUCKET_USER', ...]]) {
  +    sh './gradlew releaseNotes'
  +}
  +sh 'git add RELEASENOTES.md'
  +sh "git commit -m 'BUILDER: $buildVersion release notes'"
  +gitPush()
  +----
   image::release-notes.png[scaledwidth=75%]
  +=== Pipeline end
  +image::build-success.png[scaledwidth=75%]
   
   [NOTE.speaker]
   --
   * show prd server
   * show pipeline code
   --
  -
  -== Jenkins demo
   
   == Tip
   * Limit pipeline script
  
positive.code: ----
  
  == Gradle release notes
  
  == Configuration Management
  * Puppet
  
negative.code: * Test environments
  * Build Infrastructure
  
  == Ansible spring boot
  [source,yml]
  ----
      - name: Download the war
        get_url:
          url: "{{ maven_repo }}/..."
          ...
      - name: Download config
        get_url:
          url: "{{ maven_repo }}/..."
          ...
      - name: Make sure the service is enabled
        service:
          name: "{{ item.key }}"
          state: started
          enabled: yes
        with_dict: "{{ springbootapps | default({}) }}"
      ...
  ----
  
  == Delivery Pipelines
  * Classic CI tools
  