3.3. Création d'applications à l'aide de l'interface de programmation


Vous pouvez créer une application OpenShift Container Platform à partir de composants qui incluent du code source ou binaire, des images et des modèles en utilisant la CLI d'OpenShift Container Platform.

L'ensemble des objets créés par new-app dépend des artefacts transmis en entrée : référentiels de sources, images ou modèles.

3.3.1. Créer une application à partir du code source

La commande new-app permet de créer des applications à partir du code source d'un dépôt Git local ou distant.

La commande new-app crée une configuration de construction, qui elle-même crée une nouvelle image d'application à partir de votre code source. La commande new-app crée également un objet Deployment pour déployer la nouvelle image et un service pour fournir un accès équilibré au déploiement de votre image.

OpenShift Container Platform détecte automatiquement si la stratégie de construction pipeline, source ou docker doit être utilisée, et dans le cas de la construction source, détecte une image de constructeur de langage appropriée.

3.3.1.1. Locale

Pour créer une application à partir d'un dépôt Git dans un répertoire local :

oc new-app /<chemin d'accès au code source>
Note

Si vous utilisez un dépôt Git local, le dépôt doit avoir un remote nommé origin qui pointe vers une URL accessible par le cluster OpenShift Container Platform. S'il n'y a pas de remote reconnu, l'exécution de la commande new-app créera un build binaire.

3.3.1.2. A distance

Pour créer une application à partir d'un dépôt Git distant :

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

Pour créer une application à partir d'un dépôt Git privé et distant :

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

Si vous utilisez un dépôt Git distant privé, vous pouvez utiliser l'option --source-secret pour spécifier un secret de clone source existant qui sera injecté dans votre configuration de construction pour accéder au dépôt.

Vous pouvez utiliser un sous-répertoire de votre dépôt de code source en spécifiant un drapeau --context-dir. Pour créer une application à partir d'un dépôt Git distant et d'un sous-répertoire contextuel :

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

De plus, lorsque vous spécifiez une URL distante, vous pouvez spécifier une branche Git à utiliser en ajoutant #<branch_name> à la fin de l'URL :

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

3.3.1.3. Détection de la stratégie de construction

OpenShift Container Platform détermine automatiquement la stratégie de construction à utiliser en détectant certains fichiers :

  • Si un fichier Jenkins existe dans le répertoire racine ou le répertoire contextuel spécifié du référentiel source lors de la création d'une nouvelle application, OpenShift Container Platform génère une stratégie de construction de pipeline.

    Note

    La stratégie de construction pipeline est obsolète ; envisagez d'utiliser Red Hat OpenShift Pipelines à la place.

  • Si un fichier Docker existe dans le répertoire racine ou le répertoire contextuel spécifié du référentiel source lors de la création d'une nouvelle application, OpenShift Container Platform génère une stratégie de construction Docker.
  • Si aucun fichier Jenkins ou Docker n'est détecté, OpenShift Container Platform génère une stratégie de construction de source.

Ignorez la stratégie de construction détectée automatiquement en attribuant à l'indicateur --strategy la valeur docker, pipeline ou source.

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

La commande oc nécessite que les fichiers contenant les sources de compilation soient disponibles dans un dépôt Git distant. Pour toutes les constructions de sources, vous devez utiliser git remote -v.

3.3.1.4. Détection des langues

Si vous utilisez la stratégie de construction des sources, new-app tente de déterminer le constructeur de langage à utiliser en fonction de la présence de certains fichiers dans le répertoire racine ou le répertoire contextuel spécifié du référentiel :

Tableau 3.1. Langues détectées par new-app
LangueDossiers

dotnet

project.json, *.csproj

jee

pom.xml

nodejs

app.json, package.json

perl

cpanfile, index.pl

php

composer.json, index.php

python

requirements.txt, setup.py

ruby

Gemfile, Rakefile, config.ru

scala

build.sbt

golang

Godeps, main.go

Après la détection d'une langue, new-app recherche sur le serveur OpenShift Container Platform des balises de flux d'images ayant une annotation supports correspondant à la langue détectée, ou un flux d'images correspondant au nom de la langue détectée. Si aucune correspondance n'est trouvée, new-app recherche dans le registre Docker Hub une image dont le nom correspond à la langue détectée.

Vous pouvez remplacer l'image que le constructeur utilise pour un référentiel source particulier en spécifiant l'image, soit un flux d'images ou une spécification de conteneur, et le référentiel avec un ~ comme séparateur. Notez que dans ce cas, la détection de la stratégie de construction et la détection de la langue ne sont pas effectuées.

Par exemple, pour utiliser le flux d'images myproject/my-ruby dont la source se trouve dans un dépôt distant :

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

Pour utiliser le flux d'images du conteneur openshift/ruby-20-centos7:latest avec la source dans un dépôt local :

$ oc new-app openshift/ruby-20-centos7:latest~/home/user/code/my-ruby-app
Note

La détection de la langue nécessite que le client Git soit installé localement afin que votre dépôt puisse être cloné et inspecté. Si Git n'est pas disponible, vous pouvez éviter l'étape de détection de la langue en spécifiant l'image du constructeur à utiliser avec votre référentiel à l'aide de la syntaxe <image>~<repository>.

L'invocation de -i <image> <repository> nécessite que new-app tente de cloner repository afin de déterminer le type d'artefact, ce qui échouera si Git n'est pas disponible.

L'invocation -i <image> --code <repository> demande à new-app de cloner repository pour déterminer si image doit être utilisé comme constructeur du code source ou déployé séparément, comme dans le cas d'une image de base de données.

3.3.2. Créer une application à partir d'une image

Vous pouvez déployer une application à partir d'une image existante. Les images peuvent provenir de flux d'images dans le serveur OpenShift Container Platform, d'images dans un registre spécifique ou d'images dans le serveur Docker local.

La commande new-app tente de déterminer le type d'image spécifié dans les arguments qui lui sont transmis. Toutefois, vous pouvez indiquer explicitement à new-app s'il s'agit d'une image conteneur en utilisant l'argument --docker-image ou d'un flux d'images en utilisant l'argument -i|--image-stream.

Note

Si vous spécifiez une image à partir de votre dépôt Docker local, vous devez vous assurer que la même image est disponible pour les nœuds du cluster OpenShift Container Platform.

3.3.2.1. Image Docker Hub MySQL

Créez une application à partir de l'image MySQL de Docker Hub, par exemple :

$ oc new-app mysql

3.3.2.2. Image dans un registre privé

Créer une application en utilisant une image dans un registre privé, spécifier la spécification complète de l'image du conteneur :

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

3.3.2.3. Flux d'images existant et balise de flux d'images optionnelle

Créer une application à partir d'un flux d'images existant et d'une balise de flux d'images optionnelle :

$ oc new-app my-stream:v1

3.3.3. Créer une application à partir d'un modèle

Vous pouvez créer une application à partir d'un modèle précédemment stocké ou d'un fichier de modèle, en spécifiant le nom du modèle comme argument. Par exemple, vous pouvez stocker un modèle d'application et l'utiliser pour créer une application.

Téléchargez un modèle d'application dans la bibliothèque de modèles de votre projet actuel. L'exemple suivant télécharge un modèle d'application à partir d'un fichier appelé examples/sample-app/application-template-stibuild.json:

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

Créez ensuite une nouvelle application en faisant référence au modèle d'application. Dans cet exemple, le nom du modèle est ruby-helloworld-sample:

$ oc new-app ruby-helloworld-sample

Pour créer une nouvelle application en faisant référence à un fichier modèle dans votre système de fichiers local, sans le stocker au préalable dans OpenShift Container Platform, utilisez l'argument -f|--file. Par exemple :

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

3.3.3.1. Paramètres du modèle

Lors de la création d'une application basée sur un modèle, utilisez l'argument -p|--param pour définir les valeurs des paramètres définis par le modèle :

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

Vous pouvez stocker vos paramètres dans un fichier, puis utiliser ce fichier avec --param-file lors de l'instanciation d'un modèle. Si vous souhaitez lire les paramètres à partir de l'entrée standard, utilisez --param-file=-. Voici un exemple de fichier appelé helloworld.params:

ADMIN_USERNAME=admin
ADMIN_PASSWORD=mypassword

Faire référence aux paramètres du fichier lors de l'instanciation d'un modèle :

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

3.3.4. Modifier la création d'une application

La commande new-app génère des objets OpenShift Container Platform qui construisent, déploient et exécutent l'application créée. Normalement, ces objets sont créés dans le projet en cours et reçoivent des noms dérivés des dépôts de sources d'entrée ou des images d'entrée. Cependant, avec new-app, vous pouvez modifier ce comportement.

Tableau 3.2. new-app objets de sortie
ObjetDescription

BuildConfig

Un objet BuildConfig est créé pour chaque référentiel source spécifié dans la ligne de commande. L'objet BuildConfig spécifie la stratégie à utiliser, l'emplacement de la source et l'emplacement de la sortie de la compilation.

ImageStreams

Pour l'objet BuildConfig, deux flux d'images sont généralement créés. L'un représente l'image d'entrée. Dans le cas d'une version source, il s'agit de l'image du constructeur. Avec les constructions Docker, il s'agit de l'image FROM. Le second représente l'image de sortie. Si une image de conteneur a été spécifiée en entrée de new-app, un flux d'images est également créé pour cette image.

DeploymentConfig

Un objet DeploymentConfig est créé soit pour déployer la sortie d'une compilation, soit une image spécifiée. La commande new-app crée des volumes emptyDir pour tous les volumes Docker spécifiés dans les conteneurs inclus dans l'objet DeploymentConfig résultant.

Service

La commande new-app tente de détecter les ports exposés dans les images d'entrée. Elle utilise le plus petit port numérique exposé pour générer un service qui expose ce port. Pour exposer un autre port, une fois que new-app a terminé, il suffit d'utiliser la commande oc expose pour générer des services supplémentaires.

Autres

D'autres objets peuvent être générés lors de l'instanciation de modèles, en fonction du modèle.

3.3.4.1. Spécification des variables d'environnement

Lorsque vous générez des applications à partir d'un modèle, d'une source ou d'une image, vous pouvez utiliser l'argument -e|--env pour transmettre des variables d'environnement au conteneur d'application au moment de l'exécution :

$ oc new-app openshift/postgresql-92-centos7 \
    -e POSTGRESQL_USER=user \
    -e POSTGRESQL_DATABASE=db \
    -e POSTGRESQL_PASSWORD=password

Les variables peuvent également être lues à partir d'un fichier en utilisant l'argument --env-file. Voici un exemple de fichier appelé postgresql.env:

POSTGRESQL_USER=user
POSTGRESQL_DATABASE=db
POSTGRESQL_PASSWORD=password

Lire les variables du fichier :

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

En outre, les variables d'environnement peuvent être fournies sur l'entrée standard en utilisant --env-file=-:

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

Les objets BuildConfig créés dans le cadre du traitement new-app ne sont pas mis à jour avec les variables d'environnement transmises avec l'argument -e|--env ou --env-file.

3.3.4.2. Spécifier les variables de l'environnement de construction

Lorsque vous générez des applications à partir d'un modèle, d'une source ou d'une image, vous pouvez utiliser l'argument --build-env pour transmettre des variables d'environnement au conteneur de compilation au moment de l'exécution :

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

Les variables peuvent également être lues à partir d'un fichier en utilisant l'argument --build-env-file. Voici un exemple de fichier appelé ruby.env:

HTTP_PROXY=http://myproxy.net:1337/
GEM_HOME=~/.gem

Lire les variables du fichier :

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

En outre, les variables d'environnement peuvent être fournies sur l'entrée standard en utilisant --build-env-file=-:

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

3.3.4.3. Spécification des étiquettes

Lorsque vous générez des applications à partir de sources, d'images ou de modèles, vous pouvez utiliser l'argument -l|--label pour ajouter des étiquettes aux objets créés. Les étiquettes facilitent la sélection collective, la configuration et la suppression des objets associés à l'application.

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

3.3.4.4. Visualisation de la sortie sans création

Pour voir une simulation de l'exécution de la commande new-app, vous pouvez utiliser l'argument -o|--output avec une valeur yaml ou json. Vous pouvez ensuite utiliser la sortie pour prévisualiser les objets créés ou la rediriger vers un fichier que vous pouvez modifier. Lorsque vous êtes satisfait, vous pouvez utiliser oc create pour créer les objets OpenShift Container Platform.

Pour enregistrer les artefacts de new-app dans un fichier, procédez comme suit :

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

Modifier le fichier :

$ vi myapp.yaml

Créez une nouvelle application en faisant référence au fichier :

$ oc create -f myapp.yaml

3.3.4.5. Création d'objets avec des noms différents

Les objets créés par new-app sont normalement nommés d'après le référentiel source ou l'image utilisée pour les générer. Vous pouvez définir le nom des objets produits en ajoutant le drapeau --name à la commande :

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

3.3.4.6. Création d'objets dans un autre projet

Normalement, new-app crée des objets dans le projet en cours. Cependant, vous pouvez créer des objets dans un autre projet en utilisant l'argument -n|--namespace:

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

3.3.4.7. Création d'objets multiples

La commande new-app permet de créer plusieurs applications en spécifiant plusieurs paramètres à new-app. Les étiquettes spécifiées dans la ligne de commande s'appliquent à tous les objets créés par la commande unique. Les variables d'environnement s'appliquent à tous les composants créés à partir de la source ou des images.

Pour créer une application à partir d'un référentiel source et d'une image Docker Hub :

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

Si un dépôt de code source et une image de constructeur sont spécifiés en tant qu'arguments séparés, new-app utilise l'image de constructeur comme constructeur pour le dépôt de code source. Si ce n'est pas le cas, spécifiez l'image du constructeur requise pour la source en utilisant le séparateur ~.

3.3.4.8. Regroupement d'images et de sources dans un même module

La commande new-app permet de déployer plusieurs images ensemble dans un seul pod. Pour spécifier les images à regrouper, utilisez le séparateur . L'argument de ligne de commande --group peut également être utilisé pour spécifier les images à regrouper. Pour regrouper l'image construite à partir d'un référentiel source avec d'autres images, spécifiez son image de construction dans le groupe :

$ oc new-app ruby+mysql

Pour déployer une image construite à partir de la source et une image externe ensemble :

$ oc new-app \
    ruby~https://github.com/openshift/ruby-hello-world \
    mysql \
    --group=ruby+mysql

3.3.4.9. Recherche d'images, de modèles et d'autres données

Pour rechercher des images, des modèles et d'autres entrées pour la commande oc new-app, ajoutez les drapeaux --search et --list. Par exemple, pour trouver toutes les images ou tous les modèles qui incluent PHP :

$ oc new-app --search php
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.