Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. #!groovy
  2.  
  3. String GIT_VERSION
  4.  
  5. node {
  6.  
  7. def buildEnv
  8. def devAddress
  9.  
  10. stage ('Checkout') {
  11. deleteDir()
  12. checkout scm
  13. GIT_VERSION = sh (
  14. script: 'git describe --tags',
  15. returnStdout: true
  16. ).trim()
  17. }
  18.  
  19. stage ('Build Custom Environment') {
  20. buildEnv = docker.build("build_env:${GIT_VERSION}", 'custom-build-env')
  21. }
  22.  
  23. buildEnv.inside {
  24.  
  25. stage ('Build') {
  26. sh 'sbt compile'
  27. sh 'sbt sampleClient/universal:stage'
  28. }
  29.  
  30. stage ('Test') {
  31. parallel (
  32. 'Test Server' : {
  33. sh 'sbt server/test'
  34. },
  35. 'Test Sample Client' : {
  36. sh 'sbt sampleClient/test'
  37. }
  38. )
  39. }
  40.  
  41. stage ('Prepare Docker Image') {
  42. sh 'sbt server/docker:stage'
  43. }
  44. }
  45.  
  46. stage ('Build and Push Docker Image') {
  47. withCredentials([[$class: "UsernamePasswordMultiBinding", usernameVariable: 'DOCKERHUB_USER', passwordVariable: 'DOCKERHUB_PASS', credentialsId: 'Docker Hub']]) {
  48. sh 'docker login --username $DOCKERHUB_USER --password $DOCKERHUB_PASS'
  49. }
  50. def serverImage = docker.build("sambott/grpc-test:${GIT_VERSION}", 'server/target/docker/stage')
  51. serverImage.push()
  52. sh 'docker logout'
  53. }
  54.  
  55. stage ('Deploy to DEV') {
  56. devAddress = deployContainer("sambott/grpc-test:${GIT_VERSION}", 'DEV')
  57. }
  58.  
  59. stage ('Verify Deployment') {
  60. buildEnv.inside {
  61. sh "sample-client/target/universal/stage/bin/demo-client ${devAddress}"
  62. }
  63. }
  64. }
  65.  
  66. stage 'Deploy to LIVE'
  67. timeout(time:2, unit:'DAYS') {
  68. input message:'Approve deployment to LIVE?'
  69. }
  70. node {
  71. deployContainer("sambott/grpc-test:${GIT_VERSION}", 'LIVE')
  72. }
  73.  
  74. def deployContainer(image, env) {
  75. docker.image('lachlanevenson/k8s-kubectl:v1.5.2').inside {
  76. withCredentials([[$class: "FileBinding", credentialsId: 'KubeConfig', variable: 'KUBE_CONFIG']]) {
  77. def kubectl = "kubectl --kubeconfig=\$KUBE_CONFIG --context=${env}"
  78. sh "${kubectl} set image deployment/grpc-demo grpc-demo=${image}"
  79. sh "${kubectl} rollout status deployment/grpc-demo"
  80. return sh (
  81. script: "${kubectl} get service/grpc-demo -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'",
  82. returnStdout: true
  83. ).trim()
  84. }
  85. }
  86. }
  87.  
  88.  
  89. // vim: set syntax=groovy :
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement