diff --git a/dk b/dk index bc8eb74..781dc9b 100755 --- a/dk +++ b/dk @@ -230,6 +230,7 @@ COMMANDES spécifiées y sont lancées. Ce container est réutilisé à chaque fois. Ce paramétrage est utilisé pour par exemple installer certains packages nécessaire au projet. + * COMPOSER_SETUP_IMAGE -- nom final de l'image pour COMPOSER_SETUP La commande 'rshell' est une extension qui lance un shell bash au lieu de lancer la commande composer, ce qui permet de faire des opérations plus complexes si le besoin s'en fait sentir. NB: le shell est lancé @@ -267,6 +268,7 @@ COMMANDES spécifiées y sont lancées. Ce container est réutilisé à chaque fois. Ce paramétrage est utilisé pour par exemple installer certains packages nécessaire au projet. + * MAVEN_SETUP_IMAGE -- nom final de l'image pour MAVEN_SETUP La commande 'rshell' est une extension qui lance un shell bash au lieu de lancer la commande mvn, ce qui permet de faire des opérations plus complexes si le besoin s'en fait sentir. NB: le shell est lancé @@ -1083,10 +1085,10 @@ function build_update_apps() { estep "Type de dépôt: $TYPE" if [ "$TYPE" == composer ]; then local cvname cvvalue - local composer_php composer_php_max composer_image composer_cmd composer_setup composer_action + local composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image composer_action local -a composer_vars composer_args - for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup; do + for cvname in composer_php composer_php_max composer_image composer_cmd composer_setup composer_setup_image; do cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}" [ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; } @@ -1122,10 +1124,10 @@ function build_update_apps() { fi elif [ "$TYPE" == maven ]; then local cvname cvvalue - local maven_java maven_image maven_cmd maven_setup maven_action + local maven_java maven_image maven_cmd maven_setup maven_setup_image maven_action local -a maven_vars maven_args - for cvname in maven_java maven_image maven_cmd maven_setup; do + for cvname in maven_java maven_image maven_cmd maven_setup maven_setup_image; do cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}" [ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; } [ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; } @@ -1979,6 +1981,7 @@ function default_docker_composer() { -e group="$group" -e projdir="$projdir" -e setup="$COMPOSER_SETUP" + -e setup_image="$COMPOSER_SETUP_IMAGE" -e composer="$COMPOSER_CMD" -e args="$args" ) @@ -2008,35 +2011,36 @@ fi if [ -n "$COMPOSER_SETUP" ]; then # lancement dans un container docker à préparer - local NAME project_name container_name dkid + local NAME setup_image project_name container_name dkid if [ -f docker-compose.yml ]; then compose_set_project_name set_container_name else NAME="$(basename -- "$(pwd)")" docker_check_name set_container_name fi - container_name="dk_composer_${container_name}" + setup_image="$COMPOSER_SETUP_IMAGE" + [ -n "$setup_image" ] || setup_image="dk_composer_${container_name}_image" # vérifier l'existence de l'image - setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image" + setx dkid=docker image ls --format '{{.ID}}' "$setup_image" # créer le container le cas échéant if [ -z "$dkid" ]; then - estep "Création du container $container_name avec l'image $COMPOSER_IMAGE" + estep "Création de l'image $setup_image à partir de $COMPOSER_IMAGE" cmd=( - "$DOCKER" create -it --name "${container_name}_ct" + "$DOCKER" create -it --name "${setup_image}_tmpct" "${basecmd[@]}" "$COMPOSER_IMAGE" bash -c "$setupscript" ) setx dkid="${cmd[@]}" || return 1 "$DOCKER" container start -ai "$dkid" || return 1 - "$DOCKER" container commit "$dkid" "${container_name}_image" || return 1 + "$DOCKER" container commit "$dkid" "$setup_image" || return 1 "$DOCKER" container rm "$dkid" || return 1 fi # prendre comme image le container créé - COMPOSER_IMAGE="${container_name}_image" + COMPOSER_IMAGE="$setup_image" fi cmd=( @@ -2062,13 +2066,16 @@ function auto_composer() { local COMPOSER_MACHINE=-u local COMPOSER_CMD= local COMPOSER_SETUP= + local COMPOSER_SETUP_IMAGE= if [ -f .composer.yaml ]; then local registry eval "$(<.composer.yaml grep ^composer_ | - sed 's/^composer_php_min: /COMPOSER_PHP=/; - s/^composer_php_max: /COMPOSER_PHP_MAX=/; - s/^composer_registry: /registry=/; - s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/')" + sed 's/^composer_php_min: /COMPOSER_PHP=/ + s/^composer_php_max: /COMPOSER_PHP_MAX=/ + s/^composer_registry: /registry=/ + s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/ + s/^composer_setup: /COMPOSER_SETUP=/ + s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')" elif [ -f .composer.conf ]; then source ./.composer.conf fi @@ -2213,6 +2220,7 @@ function default_docker_maven() { -e group="$group" -e projdir="$projdir" -e setup="$MAVEN_SETUP" + -e setup_image="$MAVEN_SETUP_IMAGE" -e maven="$MAVEN_CMD" -e args="$args" ${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"} @@ -2237,35 +2245,36 @@ cd "$projdir" if [ -n "$MAVEN_SETUP" ]; then # lancement dans un container docker à préparer - local NAME project_name container_name dkid + local NAME setup_image project_name container_name dkid if [ -f docker-compose.yml ]; then compose_set_project_name set_container_name else NAME="$(basename -- "$(pwd)")" docker_check_name set_container_name fi - container_name="dk_maven_${container_name}" + setup_image="$MAVEN_SETUP_IMAGE" + [ -n "$setup_image" ] || setup_image="dk_maven_${container_name}_image" # vérifier l'existence de l'image - setx dkid=docker image ls --format '{{.ID}}' "${container_name}_image" + setx dkid=docker image ls --format '{{.ID}}' "$setup_image" # créer le container le cas échéant if [ -z "$dkid" ]; then - estep "Création du container $container_name avec l'image $MAVEN_IMAGE" + estep "Création de l'image $setup_image à partir de $MAVEN_IMAGE" cmd=( - "$DOCKER" create -it --name "${container_name}_ct" + "$DOCKER" create -it --name "${setup_image}_tmpct" "${basecmd[@]}" "$MAVEN_IMAGE" bash -c "$setupscript" ) setx dkid="${cmd[@]}" || return 1 "$DOCKER" container start -ai "$dkid" || return 1 - "$DOCKER" container commit "$dkid" "${container_name}_image" || return 1 + "$DOCKER" container commit "$dkid" "$setup_image" || return 1 "$DOCKER" container rm "$dkid" || return 1 fi # prendre comme image le container créé - MAVEN_IMAGE="${container_name}_image" + MAVEN_IMAGE="$setup_image" fi cmd=( @@ -2290,6 +2299,7 @@ function auto_maven() { local MAVEN_MACHINE=-u local MAVEN_CMD= local MAVEN_SETUP= + local MAVEN_SETUP_IMAGE= [ -f .maven.conf ] && source ./.maven.conf # les premiers arguments peuvent servir à redéfinir les variables while [ $# -gt 0 ]; do diff --git a/dkbuild b/dkbuild index d434b00..20df4db 100755 --- a/dkbuild +++ b/dkbuild @@ -786,18 +786,29 @@ Les paramètres optionnels sont commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois. Ce paramétrage est utilisé par exemple pour installer certains packages nécessaire au projet. +* setup-image=SETUP_IMAGE + forcer le nom de l'image pour setup= (la valeur de project-name= est ignorée) * project-name=PROJECT_NAME si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom est calculé automatiquement -Si un fichier .composer.conf existe dans le répertoire du projet, il est sourcé -pour obtenir les valeurs par défaut des paramètres: +Si un fichier .composer.yaml existe dans le répertoire du projet, il est analysé +pour obtenir les valeurs par défaut des paramètres suivants: +* composer_php_min: valeur par défaut de php= +* composer_php_max: valeur par défaut de php-max= +* composer_registry: ET composer_image: valeur par défaut de image= +* composer_setup: valeur par défaut de setup= +* composer_setup_image: valeur par défaut de setup-image= + +Sinon, si un fichier .composer.conf existe dans le répertoire du projet, il est +sourcé pour obtenir les valeurs par défaut des paramètres: * COMPOSER_PHP -- valeur par défaut de php= * COMPOSER_PHP_MAX -- valeur par défaut de php-max= * COMPOSER_IMAGE -- valeur par défaut de image= * COMPOSER_MACHINE -- valeur par défaut de machine= * COMPOSER_CMD -- valeur par défaut de composer= * COMPOSER_SETUP -- valeur par défaut de setup= +* COMPOSER_SETUP_IMAGE -- valeur par défaut de setup-image= ## mvn -- construire projet maven @@ -859,6 +870,8 @@ Les paramètres optionnels sont commandes spécifiées y sont lancées. Ce container est réutilisé à chaque fois. Ce paramétrage est utilisé par exemple pour installer certains packages nécessaire au projet. +* setup-image=SETUP_IMAGE + forcer le nom de l'image pour setup= (la valeur de project-name= est ignorée) * project-name=PROJECT_NAME si setup= est défini, nommer l'image sur la base de ce nom. par défaut, le nom est calculé automatiquement @@ -870,6 +883,7 @@ pour obtenir les valeurs par défaut des paramètres: * MAVEN_MACHINE -- valeur par défaut de machine= * MAVEN_CMD -- valeur par défaut de mvn= * MAVEN_SETUP -- valeur par défaut de setup= +* MAVEN_SETUP_IMAGE -- valeur par défaut de setup-image= ## run -- lancer des commandes @@ -2214,6 +2228,7 @@ function define_functions_cmd() { -e group="$group" -e projdir="$projdir" -e setup="$setup" + -e setup_image="$setup_image" -e composer="$composer" -e args="$args" ) @@ -2243,32 +2258,33 @@ fi if [ -n "$setup" ]; then local project_name container_name ctid + local setup_image="$setup_image" # lancement dans un container docker à préparer [ -n "$project_name" ] || setx project_name=get_project_name setx container_name=get_container_name "$project_name" - container_name="dkbuild_composer_${container_name}" + [ -n "$setup_image" ] || setup_image="dkbuild_composer_${container_name}_image" # vérifier l'existence de l'image - setx ctid=docker image ls --format '{{.ID}}' "${container_name}_image" + setx ctid=docker image ls --format '{{.ID}}' "$setup_image" # créer le container le cas échéant if [ -z "$ctid" ]; then - estep "Création du container $container_name à partir de l'image $image" + estep "Création de l'image $setup_image à partir de $image" cmd=( - docker create -it --name "${container_name}_ct" + docker create -it --name "${setup_image}_tmpct" "${basecmd[@]}" "$image" bash -c "$setupscript" ) setx ctid="${cmd[@]}" && docker container start -ai "$ctid" && - docker container commit "$ctid" "${container_name}_image" && + docker container commit "$ctid" "$setup_image" && docker container rm "$ctid" || die fi # prendre comme image le container créé - image="${container_name}_image" + image="$setup_image" fi case "$action" in @@ -2317,8 +2333,29 @@ fi [ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}" local composer="${DEFAULTS[composer_composer]}" local setup="${DEFAULTS[composer_setup]}" + local setup_image="${DEFAULTS[composer_setup-image]}" local project_name="${DEFAULTS[composer_project-name]}" - if [ -f "$destdir/.composer.conf" ]; then + if [ -f "$destdir/.composer.yaml" ]; then + eval "$( + COMPOSER_PHP= + COMPOSER_PHP_MAX= + COMPOSER_IMAGE="$COMPOSER_IMAGE" + COMPOSER_SETUP= + COMPOSER_SETUP_IMAGE= + eval "$(<"$destdir/.composer.yaml" grep ^composer_ | + sed 's/^composer_php_min: /COMPOSER_PHP=/ + s/^composer_php_max: /COMPOSER_PHP_MAX=/ + s/^composer_registry: /registry=/ + s/^composer_image: \(.*\)/COMPOSER_IMAGE="${registry:-$REGISTRY}\/\1"/ + s/^composer_setup: /COMPOSER_SETUP=/ + s/^composer_setup_image: /COMPOSER_SETUP_IMAGE=/')" + [ -z "$php" ] && echo_setv php="$COMPOSER_PHP" + [ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX" + [ -z "$image" ] && echo_setv image="$COMPOSER_IMAGE" + [ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP" + [ -z "$setup_image" ] && echo_setv setup_image="$COMPOSER_SETUP_IMAGE" + )" + elif [ -f "$destdir/.composer.conf" ]; then eval "$( COMPOSER_PHP= COMPOSER_PHP_MAX= @@ -2326,6 +2363,7 @@ fi COMPOSER_MACHINE=-u COMPOSER_CMD= COMPOSER_SETUP= + COMPOSER_SETUP_IMAGE= source "$destdir/.composer.conf" [ -z "$php" ] && echo_setv php="$COMPOSER_PHP" [ -z "$php_max" ] && echo_setv php_max="$COMPOSER_PHP_MAX" @@ -2333,6 +2371,7 @@ fi [ -z "$machine" ] && echo_setv machine="$COMPOSER_MACHINE" [ -z "$composer" ] && echo_setv composer="$COMPOSER_CMD" [ -z "$setup" ] && echo_setv setup="$COMPOSER_SETUP" + [ -z "$setup_image" ] && echo_setv setup_image="$COMPOSER_SETUP_IMAGE" )" fi @@ -2348,6 +2387,7 @@ fi host-mappings=*) host_mappings="${1#host-mappings=}";; composer=*) composer="${1#composer=}";; setup=*) setup="${1#setup=}";; + setup-image=*) setup_image="${1#setup-image=}";; project-name=*) project_name="${1#project-name=}";; *=*) ewarn "composer: $1: argument ignoré";; *) break;; @@ -2513,6 +2553,7 @@ exit((PHP_VERSION_ID < $version)? 0: 1); -e group="$group" -e projdir="$projdir" -e setup="$setup" + -e setup_image="$setup_image" -e mvn="$mvn" -e args="$args" ${java:+-e JAVA="$java"} @@ -2538,32 +2579,33 @@ cd "$projdir" if [ -n "$setup" ]; then local project_name container_name ctid + local setup_image="$setup_image" # lancement dans un container docker à préparer [ -n "$project_name" ] || setx project_name=get_project_name setx container_name=get_container_name "$project_name" - container_name="dkbuild_maven_${container_name}" + [ -n "$setup_image" ] || setup_image="dkbuild_maven_${container_name}_image" # vérifier l'existence de l'image - setx ctid=docker image ls --format '{{.ID}}' "${container_name}_image" + setx ctid=docker image ls --format '{{.ID}}' "$setup_image" # créer le container le cas échéant if [ -z "$ctid" ]; then - estep "Création du container $container_name à partir de l'image $image" + estep "Création de l'image $setup_image à partir de $image" cmd=( - docker create -it --name "${container_name}_ct" + docker create -it --name "${setup_image}_tmpct" "${basecmd[@]}" "$image" bash -c "$setupscript" ) setx ctid="${cmd[@]}" && docker container start -ai "$ctid" && - docker container commit "$ctid" "${container_name}_image" && + docker container commit "$ctid" "$setup_image" && docker container rm "$ctid" || die fi # prendre comme image le container créé - image="${container_name}_image" + image="$setup_image" fi case "$action" in @@ -2608,6 +2650,7 @@ cd "$projdir" [ "$host_mappings" == __UNDEFINED__ ] && host_mappings="${DEFAULTS[docker_host-mappings]}" local mvn="${DEFAULTS[mvn_mvn]}" local setup="${DEFAULTS[mvn_setup]}" + local setup_image="${DEFAULTS[mvn_setup-image]}" local project_name="${DEFAULTS[mvn_project-name]}" if [ -f "$destdir/.maven.conf" ]; then eval "$( @@ -2616,12 +2659,14 @@ cd "$projdir" MAVEN_MACHINE=-u MAVEN_CMD= MAVEN_SETUP= + MAVEN_SETUP_IMAGE= source "$destdir/.maven.conf" [ -z "$java" ] && echo_setv java="$MAVEN_JAVA" [ -z "$image" ] && echo_setv image="$MAVEN_IMAGE" [ -z "$machine" ] && echo_setv machine="$MAVEN_MACHINE" [ -z "$mvn" ] && echo_setv mvn="$MAVEN_CMD" [ -z "$setup" ] && echo_setv setup="$MAVEN_SETUP" + [ -z "$setup_image" ] && echo_setv setup_image="$MAVEN_SETUP_IMAGE" )" fi @@ -2636,6 +2681,7 @@ cd "$projdir" host-mappings=*) host_mappings="${1#host-mappings=}";; mvn=*) mvn="${1#mvn=}";; setup=*) setup="${1#setup=}";; + setup-image=*) setup_image="${1#setup-image=}";; project-name=*) project_name="${1#project-name=}";; *=*) ewarn "mvn: $1: argument ignoré";; *) break;;