Creating applications using the CLI

    The set of objects created by depends on the artifacts passed as input: source repositories, images, or templates.

    With the new-app command you can create applications from source code in a local or remote Git repository.

    The new-app command creates a build configuration, which itself creates a new application image from your source code. The new-app command typically also creates a Deployment object to deploy the new image, and a service to provide load-balanced access to the deployment running your image.

    OKD automatically detects whether the pipeline or source build strategy should be used, and in the case of source builds, detects an appropriate language builder image.

    To create an application from a Git repository in a local directory:

    Remote

    To create an application from a remote Git repository:

    1. $ oc new-app https://github.com/sclorg/cakephp-ex

    To create an application from a private remote Git repository:

    1. $ oc new-app https://github.com/youruser/yourprivaterepo --source-secret=yoursecret

    If you use a private remote Git repository, you can use the —source-secret flag to specify an existing source clone secret that will get injected into your build config to access the repository.

    You can use a subdirectory of your source code repository by specifying a --context-dir flag. To create an application from a remote Git repository and a context subdirectory:

    1. $ oc new-app https://github.com/sclorg/s2i-ruby-container.git \
    2. --context-dir=2.0/test/puma-test-app

    Also, when specifying a remote URL, you can specify a Git branch to use by appending #<branch_name> to the end of the URL:

    1. $ oc new-app https://github.com/openshift/ruby-hello-world.git#beta4

    Build strategy detection

    If a Jenkins file exists in the root or specified context directory of the source repository when creating a new application, OKD generates a pipeline build strategy. Otherwise, it generates a source build strategy.

    Override the build strategy by setting the --strategy flag to either pipeline or source.

    1. $ oc new-app /home/user/code/myapp --strategy=docker

    The oc command requires that files containing build sources are available in a remote Git repository. For all source builds, you must use git remote -v.

    Language detection

    If you use the source build strategy, new-app attempts to determine the language builder to use by the presence of certain files in the root or specified context directory of the repository:

    After a language is detected, new-app searches the OKD server for image stream tags that have a supports annotation matching the detected language, or an image stream that matches the name of the detected language. If a match is not found, new-app searches the for an image that matches the detected language based on name.

    You can override the image the builder uses for a particular source repository by specifying the image, either an image stream or container specification, and the repository with a ~ as a separator. Note that if this is done, build strategy detection and language detection are not carried out.

    For example, to use the myproject/my-ruby imagestream with the source in a remote repository:

    1. $ oc new-app myproject/my-ruby~https://github.com/openshift/ruby-hello-world.git

    To use the openshift/ruby-20-centos7:latest container image stream with the source in a local repository:

    Language detection requires the Git client to be locally installed so that your repository can be cloned and inspected. If Git is not available, you can avoid the language detection step by specifying the builder image to use with your repository with the <image>~<repository> syntax.

    The -i <image> <repository> invocation requires that new-app attempt to clone repository to determine what type of artifact it is, so this will fail if Git is not available.

    The -i <image> —code <repository> invocation requires new-app clone repository to determine whether image should be used as a builder for the source code, or deployed separately, as in the case of a database image.

    You can deploy an application from an existing image. Images can come from image streams in the OKD server, images in a specific registry, or images in the local Docker server.

    The new-app command attempts to determine the type of image specified in the arguments passed to it. However, you can explicitly tell new-app whether the image is a container image using the --docker-image argument or an image stream using the -i|--image-stream argument.

    If you specify an image from your local Docker repository, you must ensure that the same image is available to the OKD cluster nodes.

    Docker Hub MySQL image

    Create an application from the Docker Hub MySQL image, for example:

    1. $ oc new-app mysql

    Create an application using an image in a private registry, specify the full container image specification:

    1. $ oc new-app myregistry:5000/example/myimage

    Existing image stream and optional image stream tag

    Create an application from an existing image stream and optional image stream tag:

    1. $ oc new-app my-stream:v1

    You can create an application from a previously stored template or from a template file, by specifying the name of the template as an argument. For example, you can store a sample application template and use it to create an application.

    Upload an application template to your current project’s template library. The following example uploads an application template from a file called examples/sample-app/application-template-stibuild.json:

    Then create a new application by referencing the application template. In this example, the template name is ruby-helloworld-sample:

    1. $ oc new-app ruby-helloworld-sample

    To create a new application by referencing a template file in your local file system, without first storing it in OKD, use the -f|--file argument. For example:

    1. $ oc new-app -f examples/sample-app/application-template-stibuild.json

    Template parameters

    When creating an application based on a template, use the -p|--param argument to set parameter values that are defined by the template:

    1. $ oc new-app ruby-helloworld-sample \
    2. -p ADMIN_USERNAME=admin -p ADMIN_PASSWORD=mypassword

    You can store your parameters in a file, then use that file with --param-file when instantiating a template. If you want to read the parameters from standard input, use --param-file=-. The following is an example file called helloworld.params:

    1. ADMIN_USERNAME=admin
    2. ADMIN_PASSWORD=mypassword

    Reference the parameters in the file when instantiating a template:

    1. $ oc new-app ruby-helloworld-sample --param-file=helloworld.params

    The new-app command generates OKD objects that build, deploy, and run the application that is created. Normally, these objects are created in the current project and assigned names that are derived from the input source repositories or the input images. However, with new-app you can modify this behavior.

    Specifying environment variables

    When generating applications from a template, source, or an image, you can use the -e|--env argument to pass environment variables to the application container at run time:

    1. $ oc new-app openshift/postgresql-92-centos7 \
    2. -e POSTGRESQL_USER=user \

    The variables can also be read from file using the --env-file argument. The following is an example file called postgresql.env:

    1. POSTGRESQL_USER=user
    2. POSTGRESQL_DATABASE=db
    3. POSTGRESQL_PASSWORD=password

    Read the variables from the file:

    1. $ oc new-app openshift/postgresql-92-centos7 --env-file=postgresql.env

    Additionally, environment variables can be given on standard input by using --env-file=-:

    1. $ cat postgresql.env | oc new-app openshift/postgresql-92-centos7 --env-file=-

    Any BuildConfig objects created as part of new-app processing are not updated with environment variables passed with the -e|—env or —env-file argument.

    Specifying build environment variables

    When generating applications from a template, source, or an image, you can use the --build-env argument to pass environment variables to the build container at run time:

    1. $ oc new-app openshift/ruby-23-centos7 \
    2. --build-env HTTP_PROXY=http://myproxy.net:1337/ \
    3. --build-env GEM_HOME=~/.gem

    The variables can also be read from a file using the --build-env-file argument. The following is an example file called ruby.env:

    Read the variables from the file:

    1. $ oc new-app openshift/ruby-23-centos7 --build-env-file=ruby.env

    Additionally, environment variables can be given on standard input by using --build-env-file=-:

    1. $ cat ruby.env | oc new-app openshift/ruby-23-centos7 --build-env-file=-

    When generating applications from source, images, or templates, you can use the -l|--label argument to add labels to the created objects. Labels make it easy to collectively select, configure, and delete objects associated with the application.

    1. $ oc new-app https://github.com/openshift/ruby-hello-world -l name=hello-world

    Viewing the output without creation

    To see a dry-run of running the new-app command, you can use the -o|--output argument with a yaml or json value. You can then use the output to preview the objects that are created or redirect it to a file that you can edit. After you are satisfied, you can use oc create to create the OKD objects.

    To output new-app artifacts to a file, run the following:

    1. $ oc new-app https://github.com/openshift/ruby-hello-world \
    2. -o yaml > myapp.yaml

    Edit the file:

    1. $ vi myapp.yaml

    Create a new application by referencing the file:

    1. $ oc create -f myapp.yaml

    Creating objects with different names

    Objects created by new-app are normally named after the source repository, or the image used to generate them. You can set the name of the objects produced by adding a --name flag to the command:

    1. $ oc new-app https://github.com/openshift/ruby-hello-world --name=myapp

    Creating objects in a different project

    Normally, new-app creates objects in the current project. However, you can create objects in a different project by using the -n|--namespace argument:

    1. $ oc new-app https://github.com/openshift/ruby-hello-world -n myproject

    Creating multiple objects

    The new-app command allows creating multiple applications specifying multiple parameters to new-app. Labels specified in the command line apply to all objects created by the single command. Environment variables apply to all components created from source or images.

    To create an application from a source repository and a Docker Hub image:

    1. $ oc new-app https://github.com/openshift/ruby-hello-world mysql

    If a source code repository and a builder image are specified as separate arguments, new-app uses the builder image as the builder for the source code repository. If this is not the intent, specify the required builder image for the source using the ~ separator.

    The new-app command allows deploying multiple images together in a single pod. To specify which images to group together, use the + separator. The --group command line argument can also be used to specify the images that should be grouped together. To group the image built from a source repository with other images, specify its builder image in the group:

    1. $ oc new-app ruby+mysql

    To deploy an image built from source and an external image together:

    Searching for images, templates, and other inputs