diff --git a/dk b/dk index 8e5f0cb..f052389 100755 --- a/dk +++ b/dk @@ -9,39 +9,55 @@ USAGE $scriptname CMDs... COMMANDES - build [SERVICE] + b|build [SERVICE] Construire les images - push - push [SERVICES...] + p|push + p|push [SERVICES...] La première syntaxe est utilisable avec un projet docker. Elle permet de pousser l'image qui a été construite avec build vers le serveur La deuxième syntaxe est utilisée avec un projet docker-compose. Elle permet de pousser les images correspondant aux services qui ont été construit vers le serveur. - start, run [SERVICE] + s|start|run [SERVICE] Démarrer le(s) service(s) - stop [SERVICE] + k|stop [SERVICE] Arrêter le(s) service(s) - up + 1|up Créer l'environnement, démarrer les services et suivre les logs de façon interactive. - logs [SERVICE] + Vaguement équivalent à -- start -- logs + l|logs [SERVICE] Afficher les logs - down + 0|down Arrêter les services et supprimer l'environnement - brd + d|brd Construire les images (comme avec build), démarrer les services et suivre les logs de façon interactive (comme avec up). Dès que l'on arrête l'affichage des logs avec Ctrl+C, arrêter les services et supprimer l'environnement (comme avec down) + Vaguement équivalent à -- build -- start [args] -- logs + suivi de -- down bs Construire les images (comme avec build) puis démarrer les services (comme avec start) - ip [SERVICE] + Equivalent à -- build -- start [args] + y|deploy + (Re)déployer un service. Cette commande ne fonctionne qu'en mode swarm + avec docker-compose. Implique --stack + S'il existe un fichier docker-stack.yml, il est utilisé de préférence à + la place de docker-compose.yml. De même, les fichiers de profil de la + forme docker-stack.PROFILE.yml sont utilisés de préférence à + docker-compose.PROFILE.yml + by|bd + Equivalent à --stack -- build -- deploy [args] + Utilisable notamment en développement + bpy|bpd + Equivalent à --stack -- build -- push -- deploy [args] + ip|show-ip [SERVICE] Afficher l'adresse IP interne du service - exec SERVICE COMMAND + x|exec SERVICE COMMAND Lancer la commande dans le container spécifié - systemd-unit + systemd|systemd-unit Générer une unité systemd qui démarre les services. A priori, ce n'est nécessaire que si aucune politique de redémarrage n'a été définie. ps @@ -50,7 +66,7 @@ COMMANDES Lister les images actuellement présentes rm Supprimer une image - prune + X|prune Supprimer les containers et les images inutilisées OPTIONS générales @@ -70,7 +86,13 @@ OPTIONS générales Spécifier l'hôte pour la commande systemd-unit OPTIONS build - (ces options ne sont valides que pour les commandes build, brd, bs) + (ces options ne sont valides que pour les commandes build, brd, bs, bd, bpd) + --stack + Indiquer que le build est fait pour un déploiement avec deploy. + Les fichiers de la forme docker-stack[.PROFILE].yml s'ils existent sont + utilisés de préférence à docker-compose[.PROFILE].yml + Cette option n'est nécessaire que si on fait uniquement le build puisque + les commandes deploy, bd, et bpd impliquent --stack -j, --no-cache Ne pas utiliser le cache lors du build -g, --ug, --no-update-apps @@ -93,6 +115,11 @@ OPTIONS build --ub, --update-apps-branch BRANCH Spécifier la branche par défaut pour update-apps +OPTIONS deploy + -l, --without-registry-auth + Ne pas transporter les informations d'autorisation aux agents swarm + (c'est à dire ne pas utiliser l'option --with-registry-auth) + VARIABLES de update-apps.conf ORIGIN vaut 'origin' par défaut @@ -168,12 +195,7 @@ function docker_check_name() { fi } -function compose_set_env_args() { - replace_env_args+=(-f docker-compose.yml) - if [ -f docker-compose.override.yml ]; then - replace_env_args+=(-f docker-compose.override.yml) - fi - +function compose_set_project_name() { local PROJECT_NAME= PROJECT_NAME_REMOVE_SUFFIX=.service PROJECT_NAME_ADD_PROFILE=1 [ -f .compose.env ] && source ./.compose.env @@ -181,8 +203,10 @@ function compose_set_env_args() { PROJECT_NAME="${PROJECT_NAME%$PROJECT_NAME_REMOVE_SUFFIX}" if [ -n "$PROFILE" ]; then - if [ -f "docker-compose.$PROFILE.yml" ]; then - replace_env_args+=(-f "docker-compose.$PROFILE.yml") + if [ -n "$USE_STACK" -a -f "docker-stack.$PROFILE.yml" ]; then + replace_env_args+=(-c "docker-stack.$PROFILE.yml") + elif [ -f "docker-compose.$PROFILE.yml" ]; then + replace_env_args+=(-c "docker-compose.$PROFILE.yml") fi [ -n "$COMPOSE_PROJECT_NAME" ] || COMPOSE_PROJECT_NAME="$PROJECT_NAME${PROJECT_NAME_ADD_PROFILE:+_${PROFILE}}" else @@ -196,6 +220,34 @@ function compose_set_env_args() { [ -n "$PROFILE" -a -n "$PROJECT_NAME_ADD_PROFILE" ] && container_name="${container_name}_$PROFILE" fi } +function compose_set_env_args() { + if [ -n "$USE_STACK" -a -f docker-stack.yml ]; then + replace_env_args+=(-f docker-stack.yml) + else + replace_env_args+=(-f docker-compose.yml) + fi + if [ -n "$USE_STACK" -a -f docker-stack.override.yml ]; then + replace_env_args+=(-f docker-stack.override.yml) + elif [ -f docker-compose.override.yml ]; then + replace_env_args+=(-f docker-compose.override.yml) + fi + + compose_set_project_name "$@" +} +function compose_set_deploy_args() { + if [ -n "$USE_STACK" -a -f docker-stack.yml ]; then + replace_deploy_args+=(-c docker-stack.yml) + else + replace_deploy_args+=(-c docker-compose.yml) + fi + if [ -n "$USE_STACK" -a -f docker-stack.override.yml ]; then + replace_deploy_args+=(-f docker-stack.override.yml) + elif [ -f docker-compose.override.yml ]; then + replace_deploy_args+=(-f docker-compose.override.yml) + fi + + compose_set_project_name "$@" +} function host_run() { # lancer le script $2..@ sur l'hôte $1 @@ -457,7 +509,7 @@ function auto_build() { function default_compose_push() { ${FAKE:+qvals} docker-compose \ "${replace_env_args[@]}" "${env_args[@]}" \ - push \ + push \ "$@" } function default_docker_push() { @@ -611,6 +663,26 @@ function auto_down() { fi } +function default_compose_deploy() { + ${FAKE:+qvals} docker \ + stack deploy \ + "${replace_deploy_args[@]}" "${deploy_args[@]}" \ + "$container_name" "$@" +} +function compose_deploy() { default_compose_deploy "$@"; } +function auto_deploy() { + local -a replace_env_args env_args + local -a replace_deploy_args deploy_args + local project_name container_name + if [ -f docker-compose.yml -o -f docker-stack.yml ]; then + compose_set_deploy_args set_container_name + [ -n "$WITH_REGISTRY_AUTH" ] && replace_deploy_args+=(--with-registry-auth) + compose_deploy "$@" + else + die "Impossible de trouver ni docker-compose.yml ni docker-stack.yml" + fi +} + function default_compose_show_ip() { local -a cmd cids; local cid cmd=( @@ -790,9 +862,11 @@ fi chdir= DM_SET_MACHINE= +USE_STACK= FAKE= NO_CACHE= HOST= +WITH_REGISTRY_AUTH=1 update_apps_mode=ub update_apps_origin= update_apps_branch= @@ -803,6 +877,7 @@ args=( -P,--prod PROFILE=prod -T,--test PROFILE=test -m:,--set-machine: DM_SET_MACHINE= + --stack USE_STACK=1 -n,--fake FAKE=1 -j,--no-cache NO_CACHE=1 -h:,--host: HOST= @@ -810,6 +885,7 @@ args=( -u,--uu,--update-apps-only update_apps_mode=u --uo:,--update-apps-origin: update_apps_origin= --ub:,--update-apps-branch: update_apps_branch= + -l,--without-registry-auth WITH_REGISTRY_AUTH= ) parse_args "$@"; set -- "${args[@]}" @@ -915,6 +991,7 @@ while [ $# -gt 0 ]; do 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 + USE_STACK=1 args=() while [ $# -gt 0 -a "$1" != -- ]; do args+=("$1"); shift @@ -922,6 +999,38 @@ while [ $# -gt 0 ]; do enote "Profil $PROFILE" auto_build && auto_up "${args[@]}" ;; + y|deploy) + USE_STACK=1 + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_deploy "${args[@]}" || die + ;; + by|bd) + 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 + USE_STACK=1 + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_build && auto_deploy "${args[@]}" + ;; + bpy|bpd) + 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 + enote "Profil $PROFILE" + auto_build && auto_push && auto_deploy "${args[@]}" + ;; ip|show-ip) args=() while [ $# -gt 0 -a "$1" != -- ]; do