dk: début support projets maven
This commit is contained in:
parent
ad44a1c2e5
commit
f1a9c7a5e5
324
dk
324
dk
|
@ -206,8 +206,7 @@ COMMANDES
|
|||
70300 pour PHP 7.3
|
||||
Si la valeur n'est pas spécifiée ou vaut 'none', elle est ignorée.
|
||||
* COMPOSER_IMAGE -- Image utilisée pour lancer composer. La valeur par
|
||||
défaut est:
|
||||
$DEFAULT_COMPOSER_IMAGE
|
||||
défaut est $DEFAULT_COMPOSER_IMAGE
|
||||
Spécifier 'none' pour lancer directement composer sans passer par une
|
||||
image docker.
|
||||
L'image spécifiée doit disposer de la commande 'su-exec' afin de
|
||||
|
@ -235,6 +234,41 @@ COMMANDES
|
|||
peuvent être utilisés pour redéfinir les variables COMPOSER_*, e.g
|
||||
$scriptname composer COMPOSER_IMAGE=none install
|
||||
|
||||
maven|mvn [args...]
|
||||
Frontend pour lancer maven à l'intérieur d'un container. S'il existe un
|
||||
fichier .maven.conf dans le répertoire du projet, il est sourcé. Ce
|
||||
fichier définit des variables qui indiquent comment la commande mvn est
|
||||
lancée. Les variables suivantes peuvent être définies:
|
||||
* MAVEN_JAVA -- Version de java à sélectionner à l'intérieur de
|
||||
l'image. Spécifier 'any' ou 'force' pour prendre la valeur par
|
||||
défaut. Spécifier 'none' pour ne pas utiliser l'image
|
||||
* MAVEN_IMAGE -- Image utilisée pour lancer mvn. La valeur par défaut
|
||||
est $DEFAULT_MAVEN_IMAGE
|
||||
Spécifier 'none' pour lancer directement mvn sans passer par une image
|
||||
docker.
|
||||
L'image spécifiée doit disposer de la commande 'su-exec' afin de
|
||||
pouvoir lancer la commande avec l'utilisateur courant. Le répertoire
|
||||
\$HOME est monté à l'intérieur du container
|
||||
* MAVEN_MACHINE -- Nom de la docker machine sur laquelle se connecter
|
||||
pour lancer l'image docker. La valeur par défaut est -u, ce qui force
|
||||
l'utilisation de l'instance docker locale.
|
||||
* MAVEN_CMD -- Chemin vers l'exécutable mvn. Par défaut, utiliser la
|
||||
commande trouvée dans le PATH
|
||||
* MAVEN_SETUP -- Liste de commandes à lancer pour configurer le
|
||||
container. Dans ce cas, un container ayant pour base \$MAVEN_IMAGE
|
||||
et nommé d'après le nom du projet est préparé et les 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.
|
||||
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é
|
||||
avec l'utilisateur root. La commande alternative 'shell' lance le shell
|
||||
avec le compte utilisateur.
|
||||
Pour faciliter l'utilisation dans un script, les premiers arguments
|
||||
peuvent être utilisés pour redéfinir les variables MAVEN_*, e.g
|
||||
$scriptname maven MAVEN_IMAGE=none clean package
|
||||
|
||||
OPTIONS générales
|
||||
(ces options sont communes à toutes les commandes)
|
||||
-d, --chdir PROJDIR
|
||||
|
@ -309,6 +343,13 @@ OPTIONS build
|
|||
COMPOSER_IMAGE=
|
||||
COMPOSER_CMD=
|
||||
COMPOSER_SETUP=
|
||||
## valeurs par défaut pour les projets maven
|
||||
MAVEN_ACTION= # action projet maven (package|none)
|
||||
MAVEN_ARGS=() # arguments de mvn
|
||||
MAVEN_JAVA=
|
||||
MAVEN_IMAGE=
|
||||
MAVEN_CMD=
|
||||
MAVEN_SETUP=
|
||||
## pour chaque application définie dans APPS
|
||||
{app}_URL= # url du dépôt
|
||||
{app}_DEVEL_SRCDIR= # répertoire source du dépôt en mode devel
|
||||
|
@ -322,7 +363,10 @@ OPTIONS build
|
|||
{app}_BRANCH= # branche à sélectionner pour le checkout
|
||||
{app}_ORIGIN= # origine de la branche à sélectionner
|
||||
{app}_TYPE= # type de projet (composer|none)
|
||||
{app}_AFTER_UPDATE=() # liste de commandes à lancer après le checkout
|
||||
{app}_BEFORE_BUILD=() # liste de commandes à lancer après le
|
||||
# checkout et avant le build du projet (pour
|
||||
# les types de projets supportés)
|
||||
{app}_AFTER_UPDATE=() # liste de commandes à lancer après le build
|
||||
# valeurs pour les projets composer. ces valeurs remplacent le cas
|
||||
# échéant celles définies dans le fichier .composer.conf du projet
|
||||
{app}_COMPOSER_ACTION=
|
||||
|
@ -332,6 +376,12 @@ OPTIONS build
|
|||
{app}_COMPOSER_IMAGE=
|
||||
{app}_COMPOSER_CMD=
|
||||
{app}_COMPOSER_SETUP=
|
||||
{app}_MAVEN_ACTION=
|
||||
{app}_MAVEN_ARGS=()
|
||||
{app}_MAVEN_JAVA=
|
||||
{app}_MAVEN_IMAGE=
|
||||
{app}_MAVEN_CMD=
|
||||
{app}_MAVEN_SETUP=
|
||||
Certaines valeurs peuvent être valuées selon le profil
|
||||
{profile}_CLEAN=
|
||||
{profile}_APPS=()
|
||||
|
@ -351,6 +401,12 @@ OPTIONS build
|
|||
{app}_{profile}_COMPOSER_IMAGE=
|
||||
{app}_{profile}_COMPOSER_CMD=
|
||||
{app}_{profile}_COMPOSER_SETUP=
|
||||
{app}_{profile}_MAVEN_ACTION=
|
||||
{app}_{profile}_MAVEN_ARGS=()
|
||||
{app}_{profile}_MAVEN_JAVA=
|
||||
{app}_{profile}_MAVEN_IMAGE=
|
||||
{app}_{profile}_MAVEN_CMD=
|
||||
{app}_{profile}_MAVEN_SETUP=
|
||||
-u, --uu, --update-apps-only
|
||||
Ne faire que la mise à jour depuis les dépôts dépendants.
|
||||
-w, --ww, --update-apps-devel
|
||||
|
@ -384,8 +440,10 @@ VARIABLES de update-apps.conf
|
|||
Pour toutes les variables de type BRANCH, utiliser la syntaxe ^COMMIT
|
||||
pour ignorer ORIGIN et sélectionner un commit en particulier
|
||||
TYPE
|
||||
vaut 'composer' par défaut si le fichier composer.json existe à la
|
||||
racine du projet. sinon vaut 'none' par défaut
|
||||
la valeur par défaut dépend des fichiers présents à la racine du projet
|
||||
- si un fichier composer.json existe, vaut 'composer' par défaut
|
||||
- si un fichier pom.xml existe, vaut 'maven' par défaut
|
||||
- sinon vaut 'none' par défaut
|
||||
AFTER_UPDATE
|
||||
Cette variable est une liste de commandes à lancer après la maj du dépôt
|
||||
- si le chemin est absolu ou relatif, lancer la commande telle quelle
|
||||
|
@ -789,7 +847,8 @@ function build_update_apps() {
|
|||
fi
|
||||
|
||||
etitle "Mise à jour des dépendances"
|
||||
local app var URL SRC DEVEL_SRCDIR DEST NAME have_RSYNC_OPTS RSYNC_OPTS ORIGIN BRANCH TYPE after_update after_updates
|
||||
local app var URL SRC DEVEL_SRCDIR DEST NAME have_RSYNC_OPTS RSYNC_OPTS ORIGIN BRANCH TYPE
|
||||
local before_build before_builds after_update after_updates
|
||||
for app in "${APPS[@]}"; do
|
||||
etitle "$app"
|
||||
|
||||
|
@ -848,6 +907,7 @@ function build_update_apps() {
|
|||
# possible de détecter le type quand on a le projet
|
||||
# en cas de maj ici, mettre à jour aussi le code ci-dessous
|
||||
if [ -f "$DEST/composer.json" ]; then TYPE=composer
|
||||
elif [ -f "$DEST/pom.xml" ]; then TYPE=maven
|
||||
else TYPE=none
|
||||
fi
|
||||
fi
|
||||
|
@ -899,6 +959,7 @@ function build_update_apps() {
|
|||
# possible de détecter le type quand on a le projet
|
||||
# en cas de maj ici, mettre à jour aussi le code ci-dessus et ci-dessous
|
||||
if [ -f "$DEST/composer.json" ]; then TYPE=composer
|
||||
elif [ -f "$DEST/pom.xml" ]; then TYPE=maven
|
||||
else TYPE=none
|
||||
fi
|
||||
fi
|
||||
|
@ -949,6 +1010,7 @@ function build_update_apps() {
|
|||
# possible de détecter le type quand on a le projet
|
||||
# en cas de maj ici, mettre à jour aussi le code ci-dessus
|
||||
if [ -f "$DEST/composer.json" ]; then TYPE=composer
|
||||
elif [ -f "$DEST/pom.xml" ]; then TYPE=maven
|
||||
else TYPE=none
|
||||
fi
|
||||
fi
|
||||
|
@ -958,14 +1020,30 @@ function build_update_apps() {
|
|||
die "ni URL ni SRC ne sont définis"
|
||||
fi
|
||||
|
||||
after_updates="${var}_AFTER_UPDATE"
|
||||
if is_defined "$after_updates"; then
|
||||
after_updates="$after_updates[@]"; after_updates=("${!after_updates}")
|
||||
elif [ "$TYPE" == composer ]; then
|
||||
after_updates=(sqlmig)
|
||||
before_builds="${var}_BEFORE_BUILD"
|
||||
if is_defined "$before_builds"; then
|
||||
before_builds="$before_builds[@]"; before_builds=("${!before_builds}")
|
||||
else
|
||||
after_updates=()
|
||||
before_builds=()
|
||||
fi
|
||||
for before_build in "${before_builds[@]}"; do
|
||||
if [ "${before_build#/}" != "$before_build" ]; then
|
||||
# commande absolue, la lancer telle quelle
|
||||
etitle "$before_build"
|
||||
eval "$before_build" || { eend; eend; return 1; }
|
||||
eend
|
||||
elif [ "${before_build#./}" != "$before_build" ]; then
|
||||
# commande relative, la lancer telle quelle
|
||||
etitle "$before_build"
|
||||
eval "$before_build" || { eend; eend; return 1; }
|
||||
eend
|
||||
else
|
||||
# c'est une fonction update_apps_func_*
|
||||
etitle "$before_build"
|
||||
eval "update_apps_func_$before_build" || { eend; eend; return 1; }
|
||||
eend
|
||||
fi
|
||||
done
|
||||
|
||||
estep "Type de dépôt: $TYPE"
|
||||
if [ "$TYPE" == composer ]; then
|
||||
|
@ -1007,8 +1085,56 @@ function build_update_apps() {
|
|||
cd "$cwd"
|
||||
fi
|
||||
fi
|
||||
elif [ "$TYPE" == maven ]; then
|
||||
local cvname cvvalue
|
||||
local maven_java maven_image maven_cmd maven_setup maven_action
|
||||
local -a maven_vars maven_args
|
||||
|
||||
for cvname in maven_java maven_image maven_cmd maven_setup; do
|
||||
cvvalue="${var}_${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"
|
||||
[ -n "$cvvalue" ] || { cvvalue="${var}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||
[ -n "$cvvalue" ] || { cvvalue="${PROFILE}_${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||
[ -n "$cvvalue" ] || { cvvalue="${cvname^^}"; cvvalue="${!cvvalue}"; }
|
||||
[ -n "$cvvalue" ] && maven_vars+=("${cvname^^}=$cvvalue")
|
||||
done
|
||||
|
||||
maven_action="${var}_${PROFILE}_MAVEN_ACTION"; maven_action="${!maven_action}"
|
||||
[ -n "$maven_action" ] || { maven_action="${var}_MAVEN_ACTION"; maven_action="${!maven_action}"; }
|
||||
[ -n "$maven_action" ] || { maven_action="${PROFILE}_MAVEN_ACTION"; maven_action="${!maven_action}"; }
|
||||
[ -n "$maven_action" ] || maven_action="$MAVEN_ACTION"
|
||||
|
||||
maven_args="${var}_${PROFILE}_MAVEN_ARGS"
|
||||
is_defined "$maven_args" || maven_args="${var}_MAVEN_ARGS"
|
||||
is_defined "$maven_args" || maven_args="${PROFILE}_MAVEN_ARGS"
|
||||
is_defined "$maven_args" || maven_args="MAVEN_ARGS"
|
||||
maven_args="${maven_args}[@]"; maven_args=("${!maven_args}")
|
||||
|
||||
if [ -z "$BUILD_UPDATE_DEVEL" ]; then
|
||||
case "${maven_action:-p}" in
|
||||
c|clean) maven_action=clean;;
|
||||
po|package_only) maven_action=package;;
|
||||
p|package) maven_action="clean package";;
|
||||
none|nop) maven_action=;;
|
||||
*) ewarn "$maven_action: action invalide"; maven_action=;;
|
||||
esac
|
||||
if [ -n "$maven_action" ]; then
|
||||
setx cwd=pwd
|
||||
cd "$DEST"
|
||||
estep "Compilation du projet maven"
|
||||
auto_maven "${maven_vars[@]}" $maven_action "${maven_args[@]}" || { eend; return 1; }
|
||||
cd "$cwd"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
after_updates="${var}_AFTER_UPDATE"
|
||||
if is_defined "$after_updates"; then
|
||||
after_updates="$after_updates[@]"; after_updates=("${!after_updates}")
|
||||
elif [ "$TYPE" == composer ]; then
|
||||
after_updates=(sqlmig)
|
||||
else
|
||||
after_updates=()
|
||||
fi
|
||||
for after_update in "${after_updates[@]}"; do
|
||||
if [ "${after_update#/}" != "$after_update" ]; then
|
||||
# commande absolue, la lancer telle quelle
|
||||
|
@ -1940,6 +2066,166 @@ exit((PHP_VERSION_ID < $version)? 0: 1);
|
|||
fi
|
||||
}
|
||||
|
||||
function default_local_maven() {
|
||||
# lancement direct
|
||||
case "$1" in
|
||||
rootshell|rshell|rootbash|rbash)
|
||||
shift
|
||||
# ewarn parce qu'on est pas root dans ce shell contrairement à ce qui est demandé
|
||||
ewarn "Lancement d'un shell utilisateur alors qu'un shell root est demandé"
|
||||
bash "$@"
|
||||
;;
|
||||
usershell|shell|userbash|bash)
|
||||
shift
|
||||
estep "Lancement d'un shell utilisateur"
|
||||
bash "$@"
|
||||
;;
|
||||
*)
|
||||
[ -n "$MAVEN_CMD" ] || MAVEN_CMD=mvn
|
||||
"$MAVEN_CMD" "$@"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
function default_docker_maven() {
|
||||
# lancement dans un container
|
||||
local user group projdir actualcmd args
|
||||
setx user=id -un; setx user=getent passwd "$user"
|
||||
setx group=id -gn; setx group=getent group "$group"
|
||||
setx projdir=pwd
|
||||
case "$1" in
|
||||
rootshell|rshell|rootbash|rbash)
|
||||
shift
|
||||
actualcmd='eval "bash $args"'
|
||||
;;
|
||||
usershell|shell|userbash|bash)
|
||||
shift
|
||||
actualcmd='eval "su-exec \"$user\" bash $args"'
|
||||
;;
|
||||
*)
|
||||
actualcmd='eval "su-exec \"$user\" \"$maven\" $args"'
|
||||
;;
|
||||
esac
|
||||
setx args=qvals "$@"
|
||||
|
||||
local -a basecmd cmd setupscript runscript
|
||||
basecmd=(
|
||||
-e user="$user"
|
||||
-e group="$group"
|
||||
-e projdir="$projdir"
|
||||
-e setup="$MAVEN_SETUP"
|
||||
-e maven="$MAVEN_CMD"
|
||||
-e args="$args"
|
||||
${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"}
|
||||
-v "$HOME:$HOME"
|
||||
)
|
||||
if [ "${projdir#$HOME/}" == "$projdir" ]; then
|
||||
# si le répertoire de projet ne se trouve pas dans $HOME, le monter aussi
|
||||
cmd+=(-v "$projdir:$projdir")
|
||||
fi
|
||||
setupscript='eval "$setup"'
|
||||
runscript='
|
||||
echo "$user" >>/etc/passwd; user="${user%%:*}"
|
||||
echo "$group" >>/etc/group; group="${group%%:*}"
|
||||
|
||||
[ -n "$maven" ] || maven=mvn
|
||||
|
||||
cd "$projdir"
|
||||
'"$actualcmd"
|
||||
|
||||
if [ -n "$MAVEN_SETUP" ]; then
|
||||
# lancement dans un container docker à préparer
|
||||
local NAME 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}"
|
||||
|
||||
# vérifier l'existence de l'image
|
||||
setx dkid=docker image ls --format '{{.ID}}' "${container_name}_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"
|
||||
cmd=(
|
||||
"$DOCKER" create -it --name "${container_name}_ct"
|
||||
"${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 rm "$dkid" || return 1
|
||||
fi
|
||||
|
||||
# prendre comme image le container créé
|
||||
MAVEN_IMAGE="${container_name}_image"
|
||||
fi
|
||||
|
||||
cmd=(
|
||||
"$DOCKER" run -it --rm
|
||||
"${basecmd[@]}"
|
||||
"$MAVEN_IMAGE"
|
||||
bash -c "$runscript"
|
||||
)
|
||||
"${cmd[@]}"
|
||||
}
|
||||
function local_maven() { default_local_maven "$@"; }
|
||||
function docker_maven() { default_docker_maven "$@"; }
|
||||
function auto_maven() {
|
||||
local MAVEN_JAVA=
|
||||
local MAVEN_IMAGE="$DEFAULT_MAVEN_IMAGE"
|
||||
local MAVEN_MACHINE=-u
|
||||
local MAVEN_CMD=
|
||||
local MAVEN_SETUP=
|
||||
[ -f .maven.conf ] && source ./.maven.conf
|
||||
# les premiers arguments peuvent servir à redéfinir les variables
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
MAVEN_JAVA=*) setv "$1"; shift;;
|
||||
MAVEN_IMAGE=*) setv "$1"; shift;;
|
||||
MAVEN_MACHINE=*) setv "$1"; shift;;
|
||||
MAVEN_CMD=*) setv "$1"; shift;;
|
||||
MAVEN_SETUP=*) setv "$1"; shift;;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
local use_image
|
||||
if [ "$MAVEN_JAVA" == force -o "$MAVEN_JAVA" == any ]; then
|
||||
MAVEN_JAVA=
|
||||
use_image=1
|
||||
elif [ "$MAVEN_JAVA" == none ]; then
|
||||
MAVEN_JAVA=
|
||||
use_image=
|
||||
else
|
||||
use_image=1
|
||||
fi
|
||||
if [ -n "$use_image" ]; then
|
||||
[ "$MAVEN_IMAGE" != none ] || die "Vous devez spécifier l'image à utiliser pour maven"
|
||||
|
||||
local PREVIOUS_DOCKER_MACHINE_NAME="$DOCKER_MACHINE_NAME"
|
||||
if [ -n "$MAVEN_MACHINE" -a "$DOCKER_MACHINE_NAME" != "$MAVEN_MACHINE" ]; then
|
||||
local -x DOCKER_TLS_VERIFY= DOCKER_HOST= DOCKER_CERT_PATH= DOCKER_MACHINE_NAME=
|
||||
if [ "$MAVEN_MACHINE" != -u ]; then
|
||||
local env
|
||||
setx env=docker-machine env "$MAVEN_MACHINE" 2>/dev/null || {
|
||||
eerror "$MAVEN_MACHINE: une erreur s'est produite lors de la sélection du noeud avec docker-machine"
|
||||
return 1
|
||||
}
|
||||
eval "$env"
|
||||
fi
|
||||
fi
|
||||
|
||||
docker_maven "$@"
|
||||
else
|
||||
local_maven "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
||||
function resolve_dm_alias() {
|
||||
|
@ -2013,8 +2299,8 @@ else DOCKER=docker
|
|||
fi
|
||||
|
||||
DEFAULT_PROFILE=devel
|
||||
# pour le moment ne pas lancer composer dans un container par défaut
|
||||
DEFAULT_COMPOSER_IMAGE=none #docker.univ-reunion.fr/image/phpbuilder
|
||||
DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder
|
||||
DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder
|
||||
PROFILE=
|
||||
DM_ALIASES=()
|
||||
DM_PROFILES=()
|
||||
|
@ -2545,6 +2831,16 @@ NR == 1 { print; next }
|
|||
done
|
||||
auto_composer "${args[@]}"
|
||||
;;
|
||||
maven|mvn)
|
||||
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch"
|
||||
[ -f .build.scripts.sh ] && source ./.build.scripts.sh
|
||||
[ -f build.scripts.sh ] && source ./build.scripts.sh
|
||||
args=()
|
||||
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||
args+=("$1"); shift
|
||||
done
|
||||
auto_maven "${args[@]}"
|
||||
;;
|
||||
_*|*_)
|
||||
# transmettre directement à docker
|
||||
cmd="${cmd#_}"
|
||||
|
|
Loading…
Reference in New Issue