Jenkinsfile 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. pipeline {
  2. agent {
  3. node {
  4. label 'jenkins-agent-web'
  5. customWorkspace '/workspace'
  6. }
  7. }
  8. options {
  9. timestamps()
  10. parallelsAlwaysFailFast()
  11. retry(3)
  12. timeout(time: 15, unit: 'MINUTES')
  13. }
  14. environment {
  15. IMAGE_NAME = 'contacts'
  16. PROJECT_NAME = 'contacts'
  17. IMAGE_REPO = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker/contacts'
  18. AR_REPO_LOCATION = 'us-east1'
  19. AR_URL = 'us-east1-docker.pkg.dev/overleaf-ops/ol-docker'
  20. BRANCH_NAME = "${env.CHANGE_BRANCH ? env.CHANGE_BRANCH : env.BRANCH_NAME}"
  21. JENKINS_BUILD_NUMBER = "${BUILD_NUMBER}"
  22. BUILD_NUMBER = "${SHORT_SHA}_${BUILD_NUMBER}"
  23. DOCKER_COMPOSE_FLAGS = '-f docker-compose.ci.yml'
  24. COMMIT_SHA = "${GIT_COMMIT}"
  25. SHORT_SHA = "${GIT_COMMIT.take(7)}"
  26. }
  27. stages {
  28. stage ('Build') {
  29. steps {
  30. dir ('services/contacts') {
  31. sh 'make build'
  32. }
  33. }
  34. }
  35. stage ('Tests') {
  36. parallel {
  37. stage ('Push Branch Image') {
  38. steps {
  39. dir ('services/contacts') {
  40. sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}'
  41. }
  42. }
  43. }
  44. stage ('Shellcheck') {
  45. steps {
  46. dir ('services/contacts') {
  47. sh 'make shellcheck'
  48. }
  49. }
  50. }
  51. stage ('Lint') {
  52. steps {
  53. dir ('services/contacts') {
  54. sh 'make lint_ci'
  55. }
  56. }
  57. }
  58. stage ('Format') {
  59. steps {
  60. dir ('services/contacts') {
  61. sh 'make format_ci'
  62. }
  63. }
  64. }
  65. stage ('Typecheck') {
  66. steps {
  67. dir ('services/contacts') {
  68. sh 'make typecheck_ci'
  69. }
  70. }
  71. }
  72. stage ('Test Unit') {
  73. steps {
  74. dir ('services/contacts') {
  75. sh 'make test_unit'
  76. }
  77. }
  78. }
  79. stage ('Test Acceptance') {
  80. steps {
  81. dir ('services/contacts') {
  82. sh 'make test_acceptance'
  83. }
  84. }
  85. }
  86. }
  87. }
  88. stage('Push Production') {
  89. steps {
  90. dir('services/contacts') {
  91. sh 'docker push ${AR_URL}/${IMAGE_NAME}:${BRANCH_NAME}-${BUILD_NUMBER}'
  92. }
  93. }
  94. }
  95. }
  96. post {
  97. cleanup {
  98. dir('services/contacts') {
  99. sh 'make clean'
  100. }
  101. sh 'make clean_jenkins'
  102. }
  103. }
  104. }