Newer
Older
## VARIABLES
variables:
GIT_URL:
value: ""
description: "ОБЯЗАТЕЛЬНАЯ ПЕРЕМЕННАЯ: указываем имя репозитория с плейбуком"
LIMIT_HOSTS:
value: ""
description: "Ограничиваем определёнными хостами или группой хостов из inventory"
EXTRA_VARS:
value: ""
description: "Передаём нужные параметры"
##########################################################################################################
## PIPELINE DEFINITION
stages:
- check
- deploy
##########################################################################################################
### COMMON SECTION
.common:
image: $ANSIBLE_IMAGE
variables:
GIT_DEPTH: 1
ANSIBLE_FORCE_COLOR: "True"
ANSIBLE_HOST_KEY_CHECKING: "False"
before_script:
- eval $(ssh-agent -s); echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- chmod -R o-w ../
##########################################################################################################
### CHECK SECTION
check:
- echo "Checking inventory"
- ansible-inventory -i inventory.ini --graph
- ansible -i inventory.ini -m ping -u ${USERNAME:-maintenance} all:\!ungrouped:\!workstations || true
##########################################################################################################
### DEPLOY SECTION
deploy:
stage: deploy
only:
refs:
- master
variables:
- $GIT_URL =~ /^\S+$/
script:
- echo "Deploying configuration [${GIT_URL}] with parameters [${PARAMETERS}]"
- export INVENTORY_DIRECTORY="`pwd`"
- git config --global credential.helper store && echo "https://${GIT_LOGIN}:${GIT_PASSWORD}@$(echo ${GIT_URL} | sed -r 's#([^/])/[^/].*#\1#' | sed -e 's|https://||g')" > ~/.git-credentials
- mkdir -p /tmp/checkout && git clone "${GIT_URL}" /tmp/checkout && cd /tmp/checkout
- |
if [ -s ansible.cfg ]; then
export ANSIBLE_CONFIG=ansible.cfg
fi
if [ -s requirements.yml ]; then
ansible-galaxy install -r requirements.yml
fi
if [ -s setup.yml" ]; then
ansible-playbook ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" setup.yml
fi
sh run.sh ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" "${PLAYBOOK:-deploy.yml}"
ansible-playbook ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" "${PLAYBOOK:-deploy.yml}"