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.

608 lines
15 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
7 years ago
7 years ago
7 years ago
  1. stages:
  2. - moderator
  3. - unit-tests
  4. - deploy-gce-part1
  5. - deploy-gce-part2
  6. - deploy-gce-special
  7. variables:
  8. FAILFASTCI_NAMESPACE: 'kargo-ci'
  9. # DOCKER_HOST: tcp://localhost:2375
  10. ANSIBLE_FORCE_COLOR: "true"
  11. # asia-east1-a
  12. # asia-northeast1-a
  13. # europe-west1-b
  14. # us-central1-a
  15. # us-east1-b
  16. # us-west1-a
  17. before_script:
  18. - pip install -r tests/requirements.txt
  19. - mkdir -p /.ssh
  20. - cp tests/ansible.cfg .
  21. .job: &job
  22. tags:
  23. - kubernetes
  24. - docker
  25. image: quay.io/ant31/kargo:master
  26. .docker_service: &docker_service
  27. services:
  28. - docker:dind
  29. .create_cluster: &create_cluster
  30. <<: *job
  31. <<: *docker_service
  32. .gce_variables: &gce_variables
  33. GCE_USER: travis
  34. SSH_USER: $GCE_USER
  35. TEST_ID: "$CI_PIPELINE_ID-$CI_BUILD_ID"
  36. CI_TEST_VARS: "./tests/files/${CI_JOB_NAME}.yml"
  37. CONTAINER_ENGINE: docker
  38. PRIVATE_KEY: $GCE_PRIVATE_KEY
  39. GS_ACCESS_KEY_ID: $GS_KEY
  40. GS_SECRET_ACCESS_KEY: $GS_SECRET
  41. CLOUD_MACHINE_TYPE: "g1-small"
  42. GCE_PREEMPTIBLE: "false"
  43. ANSIBLE_KEEP_REMOTE_FILES: "1"
  44. ANSIBLE_CONFIG: ./tests/ansible.cfg
  45. IDEMPOT_CHECK: "false"
  46. RESET_CHECK: "false"
  47. UPGRADE_TEST: "false"
  48. KUBEADM_ENABLED: "false"
  49. LOG_LEVEL: "-vv"
  50. MAGIC: "ci check this"
  51. .gce: &gce
  52. <<: *job
  53. <<: *docker_service
  54. cache:
  55. key: "$CI_BUILD_REF_NAME"
  56. paths:
  57. - downloads/
  58. - $HOME/.cache
  59. before_script:
  60. - docker info
  61. - pip install -r tests/requirements.txt
  62. - mkdir -p /.ssh
  63. - mkdir -p $HOME/.ssh
  64. - echo $PRIVATE_KEY | base64 -d > $HOME/.ssh/id_rsa
  65. - echo $GCE_PEM_FILE | base64 -d > $HOME/.ssh/gce
  66. - echo $GCE_CREDENTIALS > $HOME/.ssh/gce.json
  67. - chmod 400 $HOME/.ssh/id_rsa
  68. - ansible-playbook --version
  69. - export PYPATH=$([[ ! "$CI_JOB_NAME" =~ "coreos" ]] && echo /usr/bin/python || echo /opt/bin/python)
  70. - echo "CI_JOB_NAME is $CI_JOB_NAME"
  71. - echo "PYPATH is $PYPATH"
  72. script:
  73. - pwd
  74. - ls
  75. - echo ${PWD}
  76. - echo "${STARTUP_SCRIPT}"
  77. - >
  78. ansible-playbook tests/cloud_playbooks/create-gce.yml -i tests/local_inventory/hosts.cfg -c local
  79. ${LOG_LEVEL}
  80. -e gce_credentials_file=${HOME}/.ssh/gce.json
  81. -e gce_project_id=${GCE_PROJECT_ID}
  82. -e gce_service_account_email=${GCE_ACCOUNT}
  83. -e inventory_path=${PWD}/inventory/inventory.ini
  84. -e test_id=${TEST_ID}
  85. -e preemptible=$GCE_PREEMPTIBLE
  86. # Check out latest tag if testing upgrade
  87. # Uncomment when gitlab kargo repo has tags
  88. #- test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
  89. - test "${UPGRADE_TEST}" != "false" && git checkout 72ae7638bcc94c66afa8620dfa4ad9a9249327ea
  90. # Create cluster
  91. - >
  92. ansible-playbook
  93. -i inventory/inventory.ini
  94. -b --become-user=root
  95. --private-key=${HOME}/.ssh/id_rsa
  96. -u $SSH_USER
  97. ${SSH_ARGS}
  98. ${LOG_LEVEL}
  99. -e @${CI_TEST_VARS}
  100. -e ansible_python_interpreter=${PYPATH}
  101. -e ansible_ssh_user=${SSH_USER}
  102. -e local_release_dir=${PWD}/downloads
  103. --limit "all:!fake_hosts"
  104. cluster.yml
  105. # Repeat deployment if testing upgrade
  106. - >
  107. if [ "${UPGRADE_TEST}" != "false" ]; then
  108. test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml";
  109. test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml";
  110. git checkout "${CI_BUILD_REF}";
  111. ansible-playbook
  112. -i inventory/inventory.ini
  113. -b --become-user=root
  114. --private-key=${HOME}/.ssh/id_rsa
  115. -u $SSH_USER
  116. ${SSH_ARGS}
  117. ${LOG_LEVEL}
  118. -e @${CI_TEST_VARS}
  119. -e ansible_python_interpreter=${PYPATH}
  120. -e ansible_ssh_user=${SSH_USER}
  121. -e local_release_dir=${PWD}/downloads
  122. --limit "all:!fake_hosts"
  123. $PLAYBOOK;
  124. fi
  125. # Tests Cases
  126. ## Test Master API
  127. - >
  128. ansible-playbook -i inventory/inventory.ini -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
  129. -e "{kubeadm_enabled: ${KUBEADM_ENABLED}}"
  130. ## Ping the between 2 pod
  131. - ansible-playbook -i inventory/inventory.ini -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
  132. ## Advanced DNS checks
  133. - ansible-playbook -i inventory/inventory.ini -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
  134. ## Idempotency checks 1/5 (repeat deployment)
  135. - >
  136. if [ "${IDEMPOT_CHECK}" = "true" ]; then
  137. ansible-playbook
  138. -i inventory/inventory.ini
  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. -e ansible_python_interpreter=${PYPATH}
  146. -e local_release_dir=${PWD}/downloads
  147. --limit "all:!fake_hosts"
  148. cluster.yml;
  149. fi
  150. ## Idempotency checks 2/5 (Advanced DNS checks)
  151. - >
  152. if [ "${IDEMPOT_CHECK}" = "true" ]; then
  153. ansible-playbook
  154. -i inventory/inventory.ini
  155. -b --become-user=root
  156. --private-key=${HOME}/.ssh/id_rsa
  157. -u $SSH_USER
  158. ${SSH_ARGS}
  159. ${LOG_LEVEL}
  160. -e @${CI_TEST_VARS}
  161. --limit "all:!fake_hosts"
  162. tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
  163. fi
  164. ## Idempotency checks 3/5 (reset deployment)
  165. - >
  166. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  167. ansible-playbook
  168. -i inventory/inventory.ini
  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 reset_confirmation=yes
  177. --limit "all:!fake_hosts"
  178. reset.yml;
  179. fi
  180. ## Idempotency checks 4/5 (redeploy after reset)
  181. - >
  182. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  183. ansible-playbook
  184. -i inventory/inventory.ini
  185. -b --become-user=root
  186. --private-key=${HOME}/.ssh/id_rsa
  187. -u $SSH_USER
  188. ${SSH_ARGS}
  189. ${LOG_LEVEL}
  190. -e @${CI_TEST_VARS}
  191. -e ansible_python_interpreter=${PYPATH}
  192. -e local_release_dir=${PWD}/downloads
  193. --limit "all:!fake_hosts"
  194. cluster.yml;
  195. fi
  196. ## Idempotency checks 5/5 (Advanced DNS checks)
  197. - >
  198. if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then
  199. ansible-playbook -i inventory/inventory.ini -e ansible_python_interpreter=${PYPATH}
  200. -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root
  201. --limit "all:!fake_hosts"
  202. tests/testcases/040_check-network-adv.yml $LOG_LEVEL;
  203. fi
  204. after_script:
  205. - >
  206. ansible-playbook -i inventory/inventory.ini tests/cloud_playbooks/delete-gce.yml -c local $LOG_LEVEL
  207. -e @${CI_TEST_VARS}
  208. -e test_id=${TEST_ID}
  209. -e gce_project_id=${GCE_PROJECT_ID}
  210. -e gce_service_account_email=${GCE_ACCOUNT}
  211. -e gce_credentials_file=${HOME}/.ssh/gce.json
  212. -e inventory_path=${PWD}/inventory/inventory.ini
  213. # Test matrix. Leave the comments for markup scripts.
  214. .coreos_calico_aio_variables: &coreos_calico_aio_variables
  215. # stage: deploy-gce-part1
  216. MOVED_TO_GROUP_VARS: "true"
  217. .ubuntu_canal_ha_variables: &ubuntu_canal_ha_variables
  218. # stage: deploy-gce-part1
  219. UPGRADE_TEST: "graceful"
  220. .centos_weave_kubeadm_variables: &centos_weave_kubeadm_variables
  221. # stage: deploy-gce-part1
  222. UPGRADE_TEST: "graceful"
  223. .ubuntu_canal_kubeadm_variables: &ubuntu_canal_kubeadm_variables
  224. # stage: deploy-gce-part1
  225. MOVED_TO_GROUP_VARS: "true"
  226. .rhel7_weave_variables: &rhel7_weave_variables
  227. # stage: deploy-gce-part1
  228. MOVED_TO_GROUP_VARS: "true"
  229. .centos7_flannel_addons_variables: &centos7_flannel_addons_variables
  230. # stage: deploy-gce-part2
  231. MOVED_TO_GROUP_VARS: "true"
  232. .debian8_calico_variables: &debian8_calico_variables
  233. # stage: deploy-gce-part2
  234. MOVED_TO_GROUP_VARS: "true"
  235. .coreos_canal_variables: &coreos_canal_variables
  236. # stage: deploy-gce-part2
  237. IDEMPOT_CHECK: "true"
  238. .rhel7_canal_sep_variables: &rhel7_canal_sep_variables
  239. # stage: deploy-gce-special
  240. MOVED_TO_GROUP_VARS: "true"
  241. .ubuntu_weave_sep_variables: &ubuntu_weave_sep_variables
  242. # stage: deploy-gce-special
  243. MOVED_TO_GROUP_VARS: "true"
  244. .centos7_calico_ha_variables: &centos7_calico_ha_variables
  245. # stage: deploy-gce-special
  246. IDEMPOT_CHECK: "true"
  247. .coreos_alpha_weave_ha_variables: &coreos_alpha_weave_ha_variables
  248. # stage: deploy-gce-special
  249. MOVED_TO_GROUP_VARS: "true"
  250. .ubuntu_rkt_sep_variables: &ubuntu_rkt_sep_variables
  251. # stage: deploy-gce-part1
  252. MOVED_TO_GROUP_VARS: "true"
  253. .ubuntu_vault_sep_variables: &ubuntu_vault_sep_variables
  254. # stage: deploy-gce-part1
  255. MOVED_TO_GROUP_VARS: "true"
  256. .ubuntu_flannel_variables: &ubuntu_flannel_variables
  257. # stage: deploy-gce-special
  258. MOVED_TO_GROUP_VARS: "true"
  259. # Builds for PRs only (premoderated by unit-tests step) and triggers (auto)
  260. coreos-calico-aio:
  261. stage: deploy-gce-part1
  262. <<: *job
  263. <<: *gce
  264. variables:
  265. <<: *gce_variables
  266. <<: *coreos_calico_aio_variables
  267. when: on_success
  268. except: ['triggers']
  269. only: [/^pr-.*$/]
  270. coreos-calico-sep-triggers:
  271. stage: deploy-gce-part1
  272. <<: *job
  273. <<: *gce
  274. variables:
  275. <<: *gce_variables
  276. <<: *coreos_calico_aio_variables
  277. when: on_success
  278. only: ['triggers']
  279. centos7-flannel-addons:
  280. stage: deploy-gce-part2
  281. <<: *job
  282. <<: *gce
  283. variables:
  284. <<: *gce_variables
  285. <<: *centos7_flannel_addons_variables
  286. when: on_success
  287. except: ['triggers']
  288. only: [/^pr-.*$/]
  289. centos7-flannel-addons-triggers:
  290. stage: deploy-gce-part1
  291. <<: *job
  292. <<: *gce
  293. variables:
  294. <<: *gce_variables
  295. <<: *centos7_flannel_addons_variables
  296. when: on_success
  297. only: ['triggers']
  298. ubuntu-weave-sep:
  299. stage: deploy-gce-special
  300. <<: *job
  301. <<: *gce
  302. variables:
  303. <<: *gce_variables
  304. <<: *ubuntu_weave_sep_variables
  305. when: on_success
  306. except: ['triggers']
  307. only: [/^pr-.*$/]
  308. ubuntu-weave-sep-triggers:
  309. stage: deploy-gce-part1
  310. <<: *job
  311. <<: *gce
  312. variables:
  313. <<: *gce_variables
  314. <<: *ubuntu_weave_sep_variables
  315. when: on_success
  316. only: ['triggers']
  317. # More builds for PRs/merges (manual) and triggers (auto)
  318. ubuntu-canal-ha:
  319. stage: deploy-gce-part1
  320. <<: *job
  321. <<: *gce
  322. variables:
  323. <<: *gce_variables
  324. <<: *ubuntu_canal_ha_variables
  325. when: manual
  326. except: ['triggers']
  327. only: ['master', /^pr-.*$/]
  328. ubuntu-canal-ha-triggers:
  329. stage: deploy-gce-part1
  330. <<: *job
  331. <<: *gce
  332. variables:
  333. <<: *gce_variables
  334. <<: *ubuntu_canal_ha_variables
  335. when: on_success
  336. only: ['triggers']
  337. ubuntu-canal-kubeadm:
  338. stage: deploy-gce-part1
  339. <<: *job
  340. <<: *gce
  341. variables:
  342. <<: *gce_variables
  343. <<: *ubuntu_canal_kubeadm_variables
  344. when: manual
  345. except: ['triggers']
  346. only: ['master', /^pr-.*$/]
  347. ubuntu-canal-kubeadm-triggers:
  348. stage: deploy-gce-part1
  349. <<: *job
  350. <<: *gce
  351. variables:
  352. <<: *gce_variables
  353. <<: *ubuntu_canal_kubeadm_variables
  354. when: on_success
  355. only: ['triggers']
  356. centos-weave-kubeadm:
  357. stage: deploy-gce-part1
  358. <<: *job
  359. <<: *gce
  360. variables:
  361. <<: *gce_variables
  362. <<: *centos_weave_kubeadm_variables
  363. when: manual
  364. except: ['triggers']
  365. only: ['master', /^pr-.*$/]
  366. centos-weave-kubeadm-triggers:
  367. stage: deploy-gce-part1
  368. <<: *job
  369. <<: *gce
  370. variables:
  371. <<: *gce_variables
  372. <<: *centos_weave_kubeadm_variables
  373. when: on_success
  374. only: ['triggers']
  375. rhel7-weave:
  376. stage: deploy-gce-part1
  377. <<: *job
  378. <<: *gce
  379. variables:
  380. <<: *gce_variables
  381. <<: *rhel7_weave_variables
  382. when: manual
  383. except: ['triggers']
  384. only: ['master', /^pr-.*$/]
  385. rhel7-weave-triggers:
  386. stage: deploy-gce-part1
  387. <<: *job
  388. <<: *gce
  389. variables:
  390. <<: *gce_variables
  391. <<: *rhel7_weave_variables
  392. when: on_success
  393. only: ['triggers']
  394. debian8-calico-upgrade:
  395. stage: deploy-gce-part2
  396. <<: *job
  397. <<: *gce
  398. variables:
  399. <<: *gce_variables
  400. <<: *debian8_calico_variables
  401. when: manual
  402. except: ['triggers']
  403. only: ['master', /^pr-.*$/]
  404. debian8-calico-triggers:
  405. stage: deploy-gce-part1
  406. <<: *job
  407. <<: *gce
  408. variables:
  409. <<: *gce_variables
  410. <<: *debian8_calico_variables
  411. when: on_success
  412. only: ['triggers']
  413. coreos-canal:
  414. stage: deploy-gce-part2
  415. <<: *job
  416. <<: *gce
  417. variables:
  418. <<: *gce_variables
  419. <<: *coreos_canal_variables
  420. when: manual
  421. except: ['triggers']
  422. only: ['master', /^pr-.*$/]
  423. coreos-canal-triggers:
  424. stage: deploy-gce-part1
  425. <<: *job
  426. <<: *gce
  427. variables:
  428. <<: *gce_variables
  429. <<: *coreos_canal_variables
  430. when: on_success
  431. only: ['triggers']
  432. rhel7-canal-sep:
  433. stage: deploy-gce-special
  434. <<: *job
  435. <<: *gce
  436. variables:
  437. <<: *gce_variables
  438. <<: *rhel7_canal_sep_variables
  439. when: manual
  440. except: ['triggers']
  441. only: ['master', /^pr-.*$/,]
  442. rhel7-canal-sep-triggers:
  443. stage: deploy-gce-part1
  444. <<: *job
  445. <<: *gce
  446. variables:
  447. <<: *gce_variables
  448. <<: *rhel7_canal_sep_variables
  449. when: on_success
  450. only: ['triggers']
  451. centos7-calico-ha:
  452. stage: deploy-gce-special
  453. <<: *job
  454. <<: *gce
  455. variables:
  456. <<: *gce_variables
  457. <<: *centos7_calico_ha_variables
  458. when: manual
  459. except: ['triggers']
  460. only: ['master', /^pr-.*$/]
  461. centos7-calico-ha-triggers:
  462. stage: deploy-gce-part1
  463. <<: *job
  464. <<: *gce
  465. variables:
  466. <<: *gce_variables
  467. <<: *centos7_calico_ha_variables
  468. when: on_success
  469. only: ['triggers']
  470. # no triggers yet https://github.com/kubernetes-incubator/kargo/issues/613
  471. coreos-alpha-weave-ha:
  472. stage: deploy-gce-special
  473. <<: *job
  474. <<: *gce
  475. variables:
  476. <<: *gce_variables
  477. <<: *coreos_alpha_weave_ha_variables
  478. when: manual
  479. except: ['triggers']
  480. only: ['master', /^pr-.*$/]
  481. ubuntu-rkt-sep:
  482. stage: deploy-gce-part1
  483. <<: *job
  484. <<: *gce
  485. variables:
  486. <<: *gce_variables
  487. <<: *ubuntu_rkt_sep_variables
  488. when: manual
  489. except: ['triggers']
  490. only: ['master', /^pr-.*$/]
  491. ubuntu-vault-sep:
  492. stage: deploy-gce-part1
  493. <<: *job
  494. <<: *gce
  495. variables:
  496. <<: *gce_variables
  497. <<: *ubuntu_vault_sep_variables
  498. when: manual
  499. except: ['triggers']
  500. only: ['master', /^pr-.*$/]
  501. ubuntu-flannel-sep:
  502. stage: deploy-gce-special
  503. <<: *job
  504. <<: *gce
  505. variables:
  506. <<: *gce_variables
  507. <<: *ubuntu_flannel_variables
  508. when: manual
  509. except: ['triggers']
  510. only: ['master', /^pr-.*$/]
  511. # Premoderated with manual actions
  512. ci-authorized:
  513. <<: *job
  514. stage: moderator
  515. before_script:
  516. - apt-get -y install jq
  517. script:
  518. - /bin/sh scripts/premoderator.sh
  519. except: ['triggers', 'master']
  520. syntax-check:
  521. <<: *job
  522. stage: unit-tests
  523. script:
  524. - ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root cluster.yml -vvv --syntax-check
  525. - ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root upgrade-cluster.yml -vvv --syntax-check
  526. - ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root reset.yml -vvv --syntax-check
  527. - ansible-playbook -i inventory/local-tests.cfg -u root -e ansible_ssh_user=root -b --become-user=root extra_playbooks/upgrade-only-k8s.yml -vvv --syntax-check
  528. except: ['triggers', 'master']
  529. yamllint:
  530. <<: *job
  531. stage: unit-tests
  532. script:
  533. - yamllint roles
  534. except: ['triggers', 'master']
  535. tox-inventory-builder:
  536. stage: unit-tests
  537. <<: *job
  538. script:
  539. - pip install tox
  540. - cd contrib/inventory_builder && tox
  541. when: manual
  542. except: ['triggers', 'master']