Help needed with pipelines and e2e testing

22 views
Skip to first unread message

Roberto Lo Giacco

unread,
Apr 24, 2018, 12:12:49 PM4/24/18
to Jenkins Users
Hi, I'm familiar with Jenkins but new to pipelines and I'm attempting to migrate a complex setup.

The project I'm trying to migrate is based on Maven and divided into separate applications: one dedicated to the front-end (rest), another dedicated to translation (integration), one dedicated to content (cms), etc...

In the current, old style, Jenkins setup we have the following steps:

  1. Build: executes maven and runs some static analysis
  2. DEV Deploy: puts the artifacts on multiple servers
  3. Stub Deploy: updates the back-end service stubs
  4. Acceptance Test: runs a series of end-to-end tests using the DEV environment (step 2) and the stubbed back-end (step 3) collecting the results
  5. Regression Test: like step 5, but the tests cover everything and gets executed during the night (it takes over 40 minutes to complete): also enables following steps
  6. Archive: executed only when the previous chain is successfully completed with no warnings and a release tag has been created
  7. UAT Deploy: executed only when step 6 is completed (meaning a release tag and regression tests are mandatory)
I've created a docker-compose describing the whole structure above (grand total of 8 containers) and I'm now trying to implement thos whole thing on pipelines.

So far, this is what I've achieved:

pipeline {
 agent
{
  docker
{
   image
'maven:3-alpine'
   args
'-v /root/.m2:/root/.m2'
 
}
 
}
 stages
{
  stage
('Build') {
   steps
{
    sh
'printenv'
    sh
'mvn verify'
    archiveArtifacts
(artifacts: '*/target/*.jar,*/target/*.war', fingerprint: true, onlyIfSuccessful: true)
    junit
'*/target/surefire-reports/**/*.xml'
   
}
 
}
  stage
('Test') {
   
when {
   
not {
     expression
{
     
return currentBuild.rawBuild.getCause(hudson.triggers.TimerTrigger$TimerTriggerCause)
     
}
   
}
   
}
   steps
{
    echo
'start containers (docker-compose not working)'
    echo
'deploy war files'
    sh
'mvn integration-test -P ci'
    echo
'publish report'
   
}
 
}
  stage('Regression Test') {
   when {
    anyOf {
     expression {
      return currentBuild.rawBuild.getCause(hudson.triggers.TimerTrigger$TimerTriggerCause)
     }
     tag ''
    }
   }
   steps {
    echo 'same as above but'
    sh 'mvn integration-test -P ci,regression'
   }
  }
  stage
('Release') {
   
when {
    branch
 'master'
    tag ''
   
}
   steps
{
    echo
'deploy to UAT using SSH'
   
}
 
}
 
}
 post
{
  success
{
   slackSend
(color: '#2EB886', message: "Everything looks nice and dandy...\nJob '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
 
}
  failure
{
   slackSend
(color: '#D00000', message: "Something's wrong...\nJob '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
 
}
  unstable
{
   slackSend
(color: '#DAA038', message: "Who broke the tests?\nJob '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
 
}
  regression
{
   echo
"Watch out, we broke the build!"
   slackSend
(color: '#FF0000', message: "Hey @channel, watch out: we broke the build!\nJob '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
 
}
 
fixed {
   echo
"Well done lads, we are back in business!"
   slackSend
(color: '#00D000', message: "Well done lads, we are back in business!\nJob '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
 
}
 
}
}

As you can see I'm unable to run docker-compose as the tool is missing: yes, I can install it, but is it the best way?
Reply all
Reply to author
Forward
0 new messages