Intégration de la branche dk-deploy

This commit is contained in:
Jephté Clain 2019-06-05 10:14:23 +04:00
commit fb96852bf6
1 changed files with 239 additions and 40 deletions

279
dk
View File

@ -9,39 +9,69 @@ USAGE
$scriptname CMDs... $scriptname CMDs...
COMMANDES COMMANDES
build [SERVICE] b|build [SERVICE]
Construire les images Construire les images
push p|push
push [SERVICES...] p|push [SERVICES...]
La première syntaxe est utilisable avec un projet docker. Elle permet de 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 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 La deuxième syntaxe est utilisée avec un projet docker-compose. Elle
permet de pousser les images correspondant aux services qui ont été permet de pousser les images correspondant aux services qui ont été
construit vers le serveur. construit vers le serveur.
start, run [SERVICE] s|start|run [SERVICE]
Démarrer le(s) service(s) Démarrer le(s) service(s)
stop [SERVICE] k|stop [SERVICE]
Arrêter le(s) service(s) Arrêter le(s) service(s)
up 1|up
Créer l'environnement, démarrer les services et suivre les logs de façon Créer l'environnement, démarrer les services et suivre les logs de façon
interactive. interactive.
logs [SERVICE] Vaguement équivalent à -- start -- logs
l|logs [SERVICE]
Afficher les logs Afficher les logs
down 0|down
Arrêter les services et supprimer l'environnement Arrêter les services et supprimer l'environnement
brd d|brd
Construire les images (comme avec build), démarrer les services et 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 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 arrête l'affichage des logs avec Ctrl+C, arrêter les services et
supprimer l'environnement (comme avec down) supprimer l'environnement (comme avec down)
Vaguement équivalent à -- build -- start [args] -- logs
suivi de -- down
bs bs
Construire les images (comme avec build) puis démarrer les services Construire les images (comme avec build) puis démarrer les services
(comme avec start) (comme avec start)
ip [SERVICE] Equivalent à -- build -- start [args]
y|deploy [args...]
(Re)déployer un stack. Cette commande ne fonctionne qu'en mode swarm.
Implique --stack
by|bd [args...]
Equivalent à --stack -- build -- deploy args...
Utilisable notamment en développement
bp [args...]
Equivalent à --stack -- build -- push args...
bpy|bpd [args...]
Equivalent à --stack -- build -- push -- deploy args...
service COMMAND SERVICE [args...]
Frontend pour 'docker service COMMAND args... SERVICE'
Cette commande ne fonctionne qu'en mode swarm. Il n'est pas nécessaire
de préfixer le nom du service avec le nom du stack, pour être cohérent
avec les autres commandes
IMPORTANT: notez que les arguments sont placés avant le nom du service.
Celà signifie qu'on ne peut spécifier que des options à la commande.
Penser aussi à protéger ces options de l'analyse eg.
$scriptname -- service logs web -f
Pour des cas d'utilisation plus complexe, il faut lancer directement
docker service
u|update SERVICE [args...]
Mettre à jour un service, équivalent à 'service update SERVICE'
scale SERVICE=REPLICAS [args...]
Mettre à jour le nom de réplicas d'un service, équivalent à la commande
'service scale SERVICE=REPLICAS'
ip|show-ip [SERVICE]
Afficher l'adresse IP interne du service Afficher l'adresse IP interne du service
exec SERVICE COMMAND x|exec SERVICE COMMAND
Lancer la commande dans le container spécifié 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 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. nécessaire que si aucune politique de redémarrage n'a été définie.
ps ps
@ -50,7 +80,7 @@ COMMANDES
Lister les images actuellement présentes Lister les images actuellement présentes
rm rm
Supprimer une image Supprimer une image
prune X|prune
Supprimer les containers et les images inutilisées Supprimer les containers et les images inutilisées
OPTIONS générales OPTIONS générales
@ -70,7 +100,15 @@ OPTIONS générales
Spécifier l'hôte pour la commande systemd-unit Spécifier l'hôte pour la commande systemd-unit
OPTIONS build 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.
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 aux fichiers
docker-compose.PROFILE.yml
Cette option n'est nécessaire qu'avec build puisque les commandes
deploy, bd, bpd et update impliquent --stack
-j, --no-cache -j, --no-cache
Ne pas utiliser le cache lors du build Ne pas utiliser le cache lors du build
-g, --ug, --no-update-apps -g, --ug, --no-update-apps
@ -93,6 +131,11 @@ OPTIONS build
--ub, --update-apps-branch BRANCH --ub, --update-apps-branch BRANCH
Spécifier la branche par défaut pour update-apps 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 VARIABLES de update-apps.conf
ORIGIN ORIGIN
vaut 'origin' par défaut vaut 'origin' par défaut
@ -168,12 +211,7 @@ function docker_check_name() {
fi fi
} }
function compose_set_env_args() { function compose_set_project_name() {
replace_env_args+=(-f docker-compose.yml)
if [ -f docker-compose.override.yml ]; then
replace_env_args+=(-f docker-compose.override.yml)
fi
local PROJECT_NAME= PROJECT_NAME_REMOVE_SUFFIX=.service PROJECT_NAME_ADD_PROFILE=1 local PROJECT_NAME= PROJECT_NAME_REMOVE_SUFFIX=.service PROJECT_NAME_ADD_PROFILE=1
[ -f .compose.env ] && source ./.compose.env [ -f .compose.env ] && source ./.compose.env
@ -181,9 +219,6 @@ function compose_set_env_args() {
PROJECT_NAME="${PROJECT_NAME%$PROJECT_NAME_REMOVE_SUFFIX}" PROJECT_NAME="${PROJECT_NAME%$PROJECT_NAME_REMOVE_SUFFIX}"
if [ -n "$PROFILE" ]; then if [ -n "$PROFILE" ]; then
if [ -f "docker-compose.$PROFILE.yml" ]; then
replace_env_args+=(-f "docker-compose.$PROFILE.yml")
fi
[ -n "$COMPOSE_PROJECT_NAME" ] || COMPOSE_PROJECT_NAME="$PROJECT_NAME${PROJECT_NAME_ADD_PROFILE:+_${PROFILE}}" [ -n "$COMPOSE_PROJECT_NAME" ] || COMPOSE_PROJECT_NAME="$PROJECT_NAME${PROJECT_NAME_ADD_PROFILE:+_${PROFILE}}"
else else
[ -n "$COMPOSE_PROJECT_NAME" ] || COMPOSE_PROJECT_NAME="$PROJECT_NAME" [ -n "$COMPOSE_PROJECT_NAME" ] || COMPOSE_PROJECT_NAME="$PROJECT_NAME"
@ -196,6 +231,48 @@ function compose_set_env_args() {
[ -n "$PROFILE" -a -n "$PROJECT_NAME_ADD_PROFILE" ] && container_name="${container_name}_$PROFILE" [ -n "$PROFILE" -a -n "$PROJECT_NAME_ADD_PROFILE" ] && container_name="${container_name}_$PROFILE"
fi 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
if [ -n "$PROFILE" ]; then
if [ -n "$USE_STACK" -a -f "docker-stack.$PROFILE.yml" ]; then
replace_env_args+=(-f "docker-stack.$PROFILE.yml")
elif [ -f "docker-compose.$PROFILE.yml" ]; then
replace_env_args+=(-f "docker-compose.$PROFILE.yml")
fi
fi
compose_set_project_name "$@"
}
function docker_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+=(-c docker-stack.override.yml)
elif [ -f docker-compose.override.yml ]; then
replace_deploy_args+=(-c docker-compose.override.yml)
fi
if [ -n "$PROFILE" ]; then
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
fi
compose_set_project_name "$@"
}
function host_run() { function host_run() {
# lancer le script $2..@ sur l'hôte $1 # lancer le script $2..@ sur l'hôte $1
@ -209,15 +286,14 @@ function host_run() {
estep "Lancement de $script localement" estep "Lancement de $script localement"
runscript_as_root "$script" "$@" runscript_as_root "$script" "$@"
elif progexists docker-machine; then elif progexists docker-machine; then
local dm; setx dm=docker-machine active 2>/dev/null if [ "${host%%.*}" == "$DOCKER_MACHINE_NAME" ]; then
if [ "${host%%.*}" == "$dm" ]; then
estep "Copie du script vers root@$host" estep "Copie du script vers root@$host"
scp "$script" "root@$host:/tmp/tmp-dk-service-script" || die scp "$script" "root@$host:/tmp/tmp-dk-service-script" || die
estep "Lancement du script à distance" estep "Lancement du script à distance"
local -a args; args=(/tmp/tmp-dk-service-script "$@") local -a args; args=(/tmp/tmp-dk-service-script "$@")
ssh -qt "root@$host" "$(qvals "${args[@]}"); rm -f /tmp/tmp-dk-service-script" ssh -qt "root@$host" "$(qvals "${args[@]}"); rm -f /tmp/tmp-dk-service-script"
else else
ewarn "La machine active ($dm) n'est pas la destination ($host)" ewarn "La machine active ($DOCKER_MACHINE_NAME) n'est pas la destination ($host)"
fi fi
else else
estep "Copie du script vers root@$host" estep "Copie du script vers root@$host"
@ -457,7 +533,7 @@ function auto_build() {
function default_compose_push() { function default_compose_push() {
${FAKE:+qvals} docker-compose \ ${FAKE:+qvals} docker-compose \
"${replace_env_args[@]}" "${env_args[@]}" \ "${replace_env_args[@]}" "${env_args[@]}" \
push \ push \
"$@" "$@"
} }
function default_docker_push() { function default_docker_push() {
@ -611,6 +687,60 @@ function auto_down() {
fi fi
} }
function default_docker_deploy() {
${FAKE:+qvals} docker \
stack deploy \
"${replace_deploy_args[@]}" "${deploy_args[@]}" \
"$container_name" "$@"
}
function docker_deploy() { default_docker_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
docker_set_deploy_args set_container_name
[ -n "$WITH_REGISTRY_AUTH" ] && replace_deploy_args+=(--with-registry-auth)
docker_deploy "$@"
else
die "Impossible de trouver ni docker-compose.yml ni docker-stack.yml"
fi
}
function default_docker_service() {
${FAKE:+qvals} docker service "$@"
}
function docker_service() { default_docker_service "$@"; }
function auto_service() {
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
local command="$1"; shift
[ -n "$command" ] || {
eerror "Vous devez spécifier la commande"
return 1
}
case "$command" in
ls) # ces commandes n'ont pas besoin du nom de service
docker_service "$command" "$@"
;;
*) # ces commandes ont besoin du nom du service
local service="$1"; shift
[ -n "$service" ] || {
eerror "Vous devez spécifier le nom du service"
return 1
}
docker_set_deploy_args set_container_name
service="${container_name}_${service#${container_name}_}"
docker_service "$command" "$@" "$service"
;;
esac
else
die "Impossible de trouver ni docker-compose.yml ni docker-stack.yml"
fi
}
function default_compose_show_ip() { function default_compose_show_ip() {
local -a cmd cids; local cid local -a cmd cids; local cid
cmd=( cmd=(
@ -775,24 +905,13 @@ DM_PROFILES=()
set_defaults dk set_defaults dk
export PROFILE export PROFILE
DM_AVAILABLE=
if progexists docker-machine; then
DM_AVAILABLE=1
setx active_dm=docker-machine active 2>/dev/null
for dm_profile in "${DM_PROFILES[@]}"; do
splitpair "$dm_profile" dm profile
if [ "$dm" == "$active_dm" ]; then
DEFAULT_PROFILE="$profile"
break
fi
done
fi
chdir= chdir=
DM_SET_MACHINE= DM_SET_MACHINE=
USE_STACK=
FAKE= FAKE=
NO_CACHE= NO_CACHE=
HOST= HOST=
WITH_REGISTRY_AUTH=1
update_apps_mode=ub update_apps_mode=ub
update_apps_origin= update_apps_origin=
update_apps_branch= update_apps_branch=
@ -803,6 +922,7 @@ args=(
-P,--prod PROFILE=prod -P,--prod PROFILE=prod
-T,--test PROFILE=test -T,--test PROFILE=test
-m:,--set-machine: DM_SET_MACHINE= -m:,--set-machine: DM_SET_MACHINE=
--stack USE_STACK=1
-n,--fake FAKE=1 -n,--fake FAKE=1
-j,--no-cache NO_CACHE=1 -j,--no-cache NO_CACHE=1
-h:,--host: HOST= -h:,--host: HOST=
@ -810,14 +930,25 @@ args=(
-u,--uu,--update-apps-only update_apps_mode=u -u,--uu,--update-apps-only update_apps_mode=u
--uo:,--update-apps-origin: update_apps_origin= --uo:,--update-apps-origin: update_apps_origin=
--ub:,--update-apps-branch: update_apps_branch= --ub:,--update-apps-branch: update_apps_branch=
-l,--without-registry-auth WITH_REGISTRY_AUTH=
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
progexists docker-machine && DM_AVAILABLE=1 || DM_AVAILABLE=
if [ -n "$DM_SET_MACHINE" ]; then if [ -n "$DM_SET_MACHINE" ]; then
[ -n "$DM_AVAILABLE" ] || die "docker-machine n'est pas disponible" [ -n "$DM_AVAILABLE" ] || die "docker-machine n'est pas disponible"
setx dm_env=docker-machine env "$DM_SET_MACHINE" || die setx dm_env=docker-machine env "$DM_SET_MACHINE" || die
eval "$dm_env" eval "$dm_env"
fi fi
if [ -n "$DM_AVAILABLE" ]; then
for dm_profile in "${DM_PROFILES[@]}"; do
splitpair "$dm_profile" dm profile
if [ "$dm" == "$DOCKER_MACHINE_NAME" ]; then
DEFAULT_PROFILE="$profile"
break
fi
done
fi
# construire par défaut # construire par défaut
[ $# -eq 0 ] && set -- build [ $# -eq 0 ] && set -- build
@ -915,6 +1046,7 @@ while [ $# -gt 0 ]; do
build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" 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
[ -f build.scripts.sh ] && source ./build.scripts.sh [ -f build.scripts.sh ] && source ./build.scripts.sh
USE_STACK=1
args=() args=()
while [ $# -gt 0 -a "$1" != -- ]; do while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift args+=("$1"); shift
@ -922,6 +1054,73 @@ while [ $# -gt 0 ]; do
enote "Profil $PROFILE" enote "Profil $PROFILE"
auto_build && auto_up "${args[@]}" 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[@]}"
;;
bp)
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 "${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[@]}"
;;
service)
args=()
while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift
done
enote "Profil $PROFILE"
auto_service "${args[@]}" || die
;;
u|update)
args=()
while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift
done
enote "Profil $PROFILE"
auto_service update "${args[@]}" || die
;;
scale)
args=()
while [ $# -gt 0 -a "$1" != -- ]; do
args+=("$1"); shift
done
enote "Profil $PROFILE"
auto_service scale "${args[@]}" || die
;;
ip|show-ip) ip|show-ip)
args=() args=()
while [ $# -gt 0 -a "$1" != -- ]; do while [ $# -gt 0 -a "$1" != -- ]; do