Skip to content
gitlab-ci.yml 3.02 KiB
Newer Older
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
## 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:
Дмитрий Сафронов's avatar
.  
Дмитрий Сафронов committed
  extends: .common
  stage: check
  except:
      - master
  script:
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
    - 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:
Дмитрий Сафронов's avatar
.  
Дмитрий Сафронов committed
  extends: .common
  stage: deploy
  only:
    refs:
      - master
    variables:
      - $GIT_URL =~ /^\S+$/
  script:
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
    - echo "Deploying configuration [${GIT_URL}] with parameters [${PARAMETERS}], playbook [${PLAYBOOK:-deploy.yml}]"
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
    - 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
    - |
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
      export ANSIBLE_CONFIG="${INVENTORY_DIRECTORY}/ansible.cfg"
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
      if [ -s ansible.cfg ]; then
        export ANSIBLE_CONFIG=ansible.cfg
      fi

      if [ -s requirements.yml ]; then
        ansible-galaxy install -r requirements.yml
      fi

Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
      if [ -s setup.yml ]; then
        ansible-playbook ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" setup.yml
      fi

Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
#      if [ -s run.sh ]; then
#        sh run.sh ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" "${PLAYBOOK:-deploy.yml}"
#      el

      ls -la

      cat "${PLAYBOOK:-deploy.yml}"

      if [ -s "${PLAYBOOK:-deploy.yml}" ]; then
        ansible-playbook ${PARAMETERS} -u ${USERNAME:-maintenance} -i "${INVENTORY_DIRECTORY}/inventory.ini" "${PLAYBOOK:-deploy.yml}"
Дмитрий Сафронов's avatar
Дмитрий Сафронов committed
      else
        echo "Error - no actions available!"
        exit 1
      fi