run.yml 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. ---
  2. spec:
  3. inputs:
  4. as:
  5. default: run-ansible
  6. stage:
  7. default: ansible
  8. root_dir:
  9. default: ${CI_PROJECT_DIR}/ansible
  10. description: 'Root directory for the Ansible config and playbooks.'
  11. project_file:
  12. description: 'Ansible Playbook to run.'
  13. inventory_file:
  14. default: ${CI_PROJECT_DIR}/ansible/inventory
  15. description: 'Ansible Inventory File'
  16. remote_ssh:
  17. description: 'Remote ssh'
  18. ---
  19. '$[[ inputs.as ]]':
  20. stage: '$[[ inputs.stage ]]'
  21. image:
  22. name: alpine:latest
  23. entrypoint: [""]
  24. variables:
  25. PROJECT_DIR: "$[[ inputs.root_dir ]]"
  26. PROJECT_FILE: "$[[ inputs.project_file ]]"
  27. INVENTORY_FILE: "$[[ inputs.inventory_file ]]"
  28. SSH_KEY: "$[[ inputs.remote_ssh ]]"
  29. before_script: |
  30. echo "Before → Executing..."
  31. echo "Before → Installing dependencies"
  32. apk add --no-cache openssh-client ansible-core
  33. echo "Before → Enter Ansible root directory"
  34. cd ${PROJECT_DIR}
  35. echo "Before → Adding ssh key"
  36. echo "${SSH_KEY}" > id_rsa && chmod 600 id_rsa
  37. eval $(ssh-agent -s)
  38. ssh-add id_rsa
  39. echo "Before → Setting additional environment variables"
  40. export ANSIBLE_HOST_KEY_CHECKING=false
  41. script: |
  42. echo "Script → Executing..."
  43. echo "Script → Run Ansible Playbooks"
  44. ansible-playbook -i ${INVENTORY_FILE} ${PROJECT_FILE}
  45. rules:
  46. - if: '$CI_COMMIT_REF_NAME == "main"'
  47. changes:
  48. - '$[[ inputs.root_dir ]]/$[[ inputs.project_file ]]'