You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

226 lines
6.7 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. ---
  2. stages:
  3. - unit-tests
  4. - moderator
  5. - deploy-part1
  6. - deploy-part2
  7. - deploy-special
  8. variables:
  9. FAILFASTCI_NAMESPACE: 'kargo-ci'
  10. GITLAB_REPOSITORY: 'kargo-ci/kubernetes-sigs-kubespray'
  11. # DOCKER_HOST: tcp://localhost:2375
  12. ANSIBLE_FORCE_COLOR: "true"
  13. MAGIC: "ci check this"
  14. TEST_ID: "$CI_PIPELINE_ID-$CI_BUILD_ID"
  15. CI_TEST_VARS: "./tests/files/${CI_JOB_NAME}.yml"
  16. GS_ACCESS_KEY_ID: $GS_KEY
  17. GS_SECRET_ACCESS_KEY: $GS_SECRET
  18. CONTAINER_ENGINE: docker
  19. SSH_USER: root
  20. GCE_PREEMPTIBLE: "false"
  21. ANSIBLE_KEEP_REMOTE_FILES: "1"
  22. ANSIBLE_CONFIG: ./tests/ansible.cfg
  23. ANSIBLE_INVENTORY: ./inventory/sample/${CI_JOB_NAME}-${BUILD_NUMBER}.ini
  24. IDEMPOT_CHECK: "false"
  25. RESET_CHECK: "false"
  26. UPGRADE_TEST: "false"
  27. LOG_LEVEL: "-vv"
  28. # asia-east1-a
  29. # asia-northeast1-a
  30. # europe-west1-b
  31. # us-central1-a
  32. # us-east1-b
  33. # us-west1-a
  34. before_script:
  35. - /usr/bin/python -m pip install -r tests/requirements.txt
  36. - mkdir -p /.ssh
  37. .job: &job
  38. tags:
  39. - kubernetes
  40. - docker
  41. image: quay.io/kubespray/kubespray:v2.9.0
  42. .docker_service: &docker_service
  43. services:
  44. - docker:dind
  45. .create_cluster: &create_cluster
  46. <<: *job
  47. <<: *docker_service
  48. .testcases: &testcases
  49. <<: *job
  50. <<: *docker_service
  51. cache:
  52. key: "$CI_BUILD_REF_NAME"
  53. paths:
  54. - downloads/
  55. - $HOME/.cache
  56. before_script:
  57. - docker info
  58. - /usr/bin/python -m pip install -r requirements.txt
  59. - /usr/bin/python -m pip install -r tests/requirements.txt
  60. - mkdir -p /.ssh
  61. - mkdir -p $HOME/.ssh
  62. - ansible-playbook --version
  63. - export PYPATH=$([[ ! "$CI_JOB_NAME" =~ "coreos" ]] && echo /usr/bin/python || echo /opt/bin/python)
  64. - echo "CI_JOB_NAME is $CI_JOB_NAME"
  65. - echo "PYPATH is $PYPATH"
  66. script:
  67. - pwd
  68. - ls
  69. - echo ${PWD}
  70. - echo "${STARTUP_SCRIPT}"
  71. - cd tests && make create-${CI_PLATFORM} -s ; cd -
  72. # Check out latest tag if testing upgrade
  73. - test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
  74. # Checkout the CI vars file so it is available
  75. - test "${UPGRADE_TEST}" != "false" && git checkout "${CI_BUILD_REF}" tests/files/${CI_JOB_NAME}.yml
  76. # Workaround https://github.com/kubernetes-sigs/kubespray/issues/2021
  77. - 'sh -c "echo ignore_assert_errors: true | tee -a tests/files/${CI_JOB_NAME}.yml"'
  78. # Create cluster
  79. - >
  80. ansible-playbook
  81. -i ${ANSIBLE_INVENTORY}
  82. -b --become-user=root
  83. --private-key=${HOME}/.ssh/id_rsa
  84. -u $SSH_USER
  85. ${SSH_ARGS}
  86. ${LOG_LEVEL}
  87. -e @${CI_TEST_VARS}
  88. -e ansible_ssh_user=${SSH_USER}
  89. -e local_release_dir=${PWD}/downloads
  90. --limit "all:!fake_hosts"
  91. cluster.yml
  92. # Repeat deployment if testing upgrade
  93. - >
  94. if [ "${UPGRADE_TEST}" != "false" ]; then
  95. test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml";
  96. test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml";
  97. git checkout "${CI_BUILD_REF}";
  98. ansible-playbook
  99. -i ${ANSIBLE_INVENTORY}
  100. -b --become-user=root
  101. --private-key=${HOME}/.ssh/id_rsa
  102. -u $SSH_USER
  103. ${SSH_ARGS}
  104. ${LOG_LEVEL}
  105. -e @${CI_TEST_VARS}
  106. -e ansible_ssh_user=${SSH_USER}
  107. -e local_release_dir=${PWD}/downloads
  108. --limit "all:!fake_hosts"
  109. $PLAYBOOK;
  110. fi
  111. # Tests Cases
  112. ## Test Master API
  113. - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/010_check-apiserver.yml $LOG_LEVEL
  114. ## Ping the between 2 pod
  115. - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/030_check-network.yml $LOG_LEVEL
  116. ## Advanced DNS checks
  117. - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml $LOG_LEVEL
  118. ## Idempotency checks 1/5 (repeat deployment)
  119. - >
  120. if [ "${IDEMPOT_CHECK}" = "true" ]; then
  121. ansible-playbook
  122. -i ${ANSIBLE_INVENTORY}
  123. -b --become-user=root
  124. --private-key=${HOME}/.ssh/id_rsa
  125. -u $SSH_USER
  126. ${SSH_ARGS}
  127. ${LOG_LEVEL}
  128. -e @${CI_TEST_VARS}
  129. -e ansible_python_interpreter=${PYPATH}
  130. -e local_release_dir=${PWD}/downloads
  131. --limit "all:!fake_hosts"
  132. cluster.yml;
  133. fi
  134. ## Idempotency checks 2/5 (Advanced DNS checks)
  135. - >
  136. if [ "${IDEMPOT_CHECK}" = "true" ]; then
  137. ansible-playbook
  138. -i ${ANSIBLE_INVENTORY}
  139. -b --become-user=root
  140. --private-key=${HOME}/.ssh/id_rsa
  141. -u $SSH_USER
  142. ${SSH_ARGS}
  143. ${LOG_LEVEL}
  144. -e @${CI_TEST_VARS}
  145. --limit "all:!fake_hosts"
  146. tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
  147. fi
  148. ## Idempotency checks 3/5 (reset deployment)
  149. - >
  150. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  151. ansible-playbook
  152. -i ${ANSIBLE_INVENTORY}
  153. -b --become-user=root
  154. --private-key=${HOME}/.ssh/id_rsa
  155. -u $SSH_USER
  156. ${SSH_ARGS}
  157. ${LOG_LEVEL}
  158. -e @${CI_TEST_VARS}
  159. -e ansible_python_interpreter=${PYPATH}
  160. -e reset_confirmation=yes
  161. --limit "all:!fake_hosts"
  162. reset.yml;
  163. fi
  164. ## Idempotency checks 4/5 (redeploy after reset)
  165. - >
  166. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  167. ansible-playbook
  168. -i ${ANSIBLE_INVENTORY}
  169. -b --become-user=root
  170. --private-key=${HOME}/.ssh/id_rsa
  171. -u $SSH_USER
  172. ${SSH_ARGS}
  173. ${LOG_LEVEL}
  174. -e @${CI_TEST_VARS}
  175. -e ansible_python_interpreter=${PYPATH}
  176. -e local_release_dir=${PWD}/downloads
  177. --limit "all:!fake_hosts"
  178. cluster.yml;
  179. fi
  180. ## Idempotency checks 5/5 (Advanced DNS checks)
  181. - >
  182. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  183. ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH}
  184. -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root
  185. --limit "all:!fake_hosts"
  186. tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
  187. fi
  188. after_script:
  189. - cd tests && make delete-${CI_PLATFORM} -s ; cd -
  190. # For failfast, at least 1 job must be defined in .gitlab-ci.yml
  191. # Premoderated with manual actions
  192. ci-authorized:
  193. extends: .job
  194. stage: moderator
  195. before_script:
  196. - apt-get -y install jq
  197. script:
  198. - /bin/sh scripts/premoderator.sh
  199. except: ['triggers', 'master']
  200. include:
  201. - .gitlab-ci/lint.yml
  202. - .gitlab-ci/gce.yml
  203. - .gitlab-ci/digital-ocean.yml
  204. - .gitlab-ci/terraform.yml