Giter VIP home page Giter VIP logo

concourse-spring-music2's Introduction

Concourse

Concourse CI Server: https://s1p-10.pcfninja.io

Useful commands:

  • Logging into Concourse
    • $ fly -t s1p-demo login -c https://s1p-10.pcfninja.io -k
    • username / password is in the demo dock
  • Setting a pipeline
    • $ fly -t s1p-10 set-pipeline -p concourse-spring-music-demo -c ci/pipeline.yml -l ~/concourse-configs/spring-music-s1p-credentials.yml
  • Unpausing pipeline (can be done through UI as well)
    • $ fly -t s1p-10 unpause-pipeline -p concourse-spring-music-demo

Demo Flow

  • Show Concourse pipeline https://github.com/s1p-10/concourse-spring-music

  • Click around, show the various jobs and the tasks in them

  • cd into the bin directory, run either ./makeItGreen.sh or ./makeItBlue.sh to change the color of the banner and push the code to Github and trigger the pipeline

  • Show Concourse again and show that it automatically saw a change and started the pipeline

  • Throughout the course of the jobs, click in them to show the prospect what is happening and talk to it as you may

  • It's important when the app is deploying to show that it is being done as a blue/green deployment by having a browser window up and refreshing the page to show them where it changes from blue to green

Key takeaways

  • Pipeline as code - follows your code though environments and allows you to keep pipeline updated as code changes and be able to deploy pipeline to any Concourse server to avoid creating snowflakes
  • All jobs are executed in containers, no worrying about dirty environments

Spring Music

This is a sample application for using database services on Cloud Foundry with the Spring Framework.

This application has been built to store the same domain objects in one of a variety of different persistence technologies - relational, document, and key-value stores. This is not meant to represent a realistic use case for these technologies, since you would typically choose the one most applicable to the type of data you need to store, but it is useful for testing and experimenting with different types of services on Cloud Foundry.

The application use Spring Java configuration and bean profiles to configure the application and the connection objects needed to use the persistence stores. It also uses the Spring Cloud library to inspect the environment when running on Cloud Foundry. See the Cloud Foundry documentation for details on configuring a Spring application for Cloud Foundry.

Running the application locally

One Spring bean profile should be activated to choose the database provider that the application should use. The profile is selected by setting the system property spring.profiles.active when starting the app.

The application can be started locally using the following command:

$ ./gradlew tomcatRun -Dspring.profiles.active=<profile>

where <profile> is one of the following values:

  • in-memory (no external database required)
  • mysql
  • postgres
  • mongodb
  • redis

If no profile is provided, in-memory will be used. If any other profile is provided, the appropriate database server must be started separately. The application will use the host name localhost and the default port to connect to the database.

If more than one of these profiles is provided, the application will throw an exception and fail to start.

Running the application on Cloud Foundry

When running on Cloud Foundry, the application will detect the type of database service bound to the application (if any). If a service of one of the supported types (MySQL, Postgres, Oracle, MongoDB, or Redis) is bound to the app, the appropriate Spring profile will be configured to use the database service. The connection strings and credentials needed to use the service will be extracted from the Cloud Foundry environment.

If no bound services are found containing any of these values in the name, then the in-memory profile will be used.

If more than one service containing any of these values is bound to the application, the application will throw an exception and fail to start.

After installing the 'cf' command-line interface for Cloud Foundry, targeting a Cloud Foundry instance, and logging in, the application can be built and pushed using these commands:

$ ./gradlew assemble

$ cf push
...
requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: spring-music--sf.cfapps.io
...

The application will be pushed using settings in the provided manifest.yml file. The output from the command will show the URL that has been assigned to the application.

Creating and binding services

Using the provided manifest, the application will be created without an external database (in the in-memory profile). You can create and bind database services to the application using the information below.

System-managed services

Depending on the Cloud Foundry service provider, persistence services might be offered and managed by the platform. These steps can be used to create and bind a service that is managed by the platform:

# view the services available
$ cf marketplace
# create a service instance
$ cf create-service <service> <service plan> <service name>
# bind the service instance to the application
$ cf bind-service <app name> <service name>
# restart the application so the new service is detected
$ cf restart

User-provided services

Cloud Foundry also allows service connection information and credentials to be provided by a user. In order for the application to detect and connect to a user-provided service, a single uri field should be given in the credentials using the form <dbtype>://<username>:<password>@<hostname>:<port>/<databasename>.

These steps use examples for username, password, host name, and database name that should be replaced with real values.

# create a user-provided Oracle database service instance
$ cf create-user-provided-service oracle-db -p '{"uri":"oracle://root:[email protected]:1521/mydatabase"}'
# create a user-provided MySQL database service instance
$ cf create-user-provided-service mysql-db -p '{"uri":"mysql://root:[email protected]:3306/mydatabase"}'
# bind a service instance to the application
$ cf bind-service <app name> <service name>
# restart the application so the new service is detected
$ cf restart

Changing bound services

To test the application with different services, you can simply stop the app, unbind a service, bind a different database service, and start the app:

$ cf unbind-service <app name> <service name>
$ cf bind-service <app name> <service name>
$ cf restart

Database drivers

Database drivers for MySQL, Postgres, MongoDB, and Redis are included in the project. To connect to an Oracle database, you will need to download the appropriate driver (e.g. from http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html?ssSourceSiteId=otnjp), add the driver .jar file to the src/main/webapp/WEB-INF/lib directory in the project, and re-build the application .war file using ./gradlew assemble.

concourse-spring-music2's People

Contributors

scottfrederick avatar datianshi avatar cah-james-shingler avatar andypiper avatar jshingler avatar ramnivas avatar drnic avatar romansauber avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.