CI/CD Jenkins setup with docker image for Cucumber (BDD) projects.
Jenkins ( cloudbees ) set up for running BDD script from git hub
1. Create a maven project for BDD push the script in git hub.
https://github.com/sumankumar01/JenkinsExecutionWithDocker
Jenkinsfile.
|
def network='jenkins-${BUILD_NUMBER}' def seleniumHub='selenium-hub-${BUILD_NUMBER}' def chrome='chrome-${BUILD_NUMBER}' def firefox='firefox-${BUILD_NUMBER}' def containertest='conatinertest-${BUILD_NUMBER}' def
MODL='cucumber.api.cli.Main --glue "StepDefinitions"
classpath:Features' pipeline
{ agent { any { image 'maven:3-alpine' args '-v $HOME/.m2:/root/.m2' } }
stages{ stage('Setting Up Selenium Grid') { steps{ sh
"docker run -d -P -p 4444:4444 --name ${seleniumHub} selenium/hub" sh "docker run -d -P -p 5900:5900 --link ${seleniumHub}:hub --name ${chrome}
selenium/node-chrome-
debug:3.141.59-yttrium" } } stage('Build Jar') { steps { sh
'mvn clean package -DskipTests' } } stage('Build Image') { steps { script { app
= docker.build("vagrant/containertest") sh
"pwd" } } } stage('Run Test') { steps{ sh
"docker run --rm -e
SELENIUM_HUB=${seleniumHub} -e BROWSER=chrome -v ${WORKSPACE}/target:/usr/share/suman/
vagrant/containertest" archiveArtifacts artifacts:
'target/**', fingerprint: true } } stage('Tearing Down Selenium Grid') { steps { //remove all the containers and
volumes sh
"docker rm -vf ${chrome}" sh
"docker rm -vf ${seleniumHub}"
} }
} } |
|
FROM
openjdk:8-jre-slim
WORKDIR
/usr/share/suman
ADD
/target/container-test-tests.jar container-test.jar ADD /target/libs
libs
ADD
pom.xml pom.xml ENV
BROWSER = chrome ENV
POMM = AutomationPipeline ENV
SELENIUM_HUB = http://192.168.3.12:4444/wd/hub
ENTRYPOINT
java -cp container-test.jar:libs/*
-DseleniumHubHost=$SELENIUM_HUB -Dbrowser=$BROWSER
cucumber.api.cli.Main --glue "StepDefinitions" classpath:Features /usr/share/suman/ |
2. Now set up Jenkins ( CloudBess ) for the execution and pull the script from git hub
3. Git, Jenkins, maven, Java8, docker should be cloud machine
4. Create a jenkins pipeline
6. We can see the running execution on through the VNC viewer
Now Open VNC Viewer and put the port shown on terminal: Usually it will be 5900: so put localhost:5900 on the VNC browser.
Video Link
Execute a script of Cucumber with Testng using Docker ( dockerfile, docker-compose-jenkins file)
https://github.com/sumankumar01/CucumberUsingTestngDocker
|
Runner class package CucumberOptions;
import
cucumber.api.CucumberOptions; import
cucumber.api.testng.AbstractTestNGCucumberTests;
@CucumberOptions( // features={"\\src\\test\\resources\\Features\\"}, features = { "src//test//resources//Features" },
plugin = { "html:target/cucumber-html-report", "json:target/cucumber.json", "pretty:target/cucumber-pretty.txt", "com.cucumber.listener.ExtentCucumberFormatter:target/cucumber-reports/report.html", "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml", "rerun:target/rerun.txt" },
tags = { "@Registartion" }, // dryRun=true,
glue = { "StepDefinitions" }
) public class TestRunner extends AbstractTestNGCucumberTests
{
} |
dockerfile
|
FROM
openjdk:8u191-jre-alpine3.8
RUN
apk add curl jq
#
Workspace WORKDIR
/usr/share/suman
ADD
/target/container-test-tests.jar container-test.jar ADD /target/libs
libs
#
in case of any other dependency like .csv
/ .json / .xls #
please ADD that as well
#
ADD suite files #
ADD testng.xml not
using #
ADD testng1.xml not using
#
ADD health check script ADD
healthcheck.sh healthcheck.sh
ENV BROWSER=chrome ENV
HUB_HOST=http://192.168.3.12:4444/wd/hub #
MODULE
ENTRYPOINT sh
healthcheck.sh |
|
version: "3" services: hub: image: selenium/hub:3.14 ports: - "4444:4444" chrome: image: selenium/node-chrome-debug:3.141.59-yttrium ports: - "5900:5900" depends_on: - hub environment: - HUB_HOST=hub bdd: image: vagrant/containertest depends_on: - chrome environment: - HUB_HOST=hub - BROWSER=chrome -
CUCUMBER_OPTIONS=classpath:Features volumes: -
./output://usr/share/suman/target/cucumber-reports |
|
echo
"Checking if hub is ready - $HUB_HOST"
while
[ "$( curl -s http://$HUB_HOST:4444/wd/hub/status | jq -r .value.ready )" != "true"
] do sleep 1 done
java -cp
container-test.jar:container-test-tests.jar:libs/* \ -DHUB_HOST=$HUB_HOST \ -DBROWSER=$BROWSER \
-Dcucumber.options="classpath:Features"
org.testng.TestNG -testclass
CucumberOptions.TestRunner /usr/share/suman/ |
|
def network='jenkins-${BUILD_NUMBER}' def seleniumHub='selenium-hub-${BUILD_NUMBER}' def chrome='chrome-${BUILD_NUMBER}' def firefox='firefox-${BUILD_NUMBER}' def containertest='conatinertest-${BUILD_NUMBER}' def
MODL='cucumber.api.cli.Main --glue "StepDefinitions"
classpath:Features' pipeline
{ agent { any { image 'maven:3-alpine' args
'-v $HOME/.m2:/root/.m2' } }
stages{ stage('Setting Up Selenium Grid') { steps{ //docker run -d -P -p 5900:5900
--link selenium-hub:hub selenium/node-chrome-debug:3.141.59-yttrium //docker run -d -P -p 5901:5900
--link selenium-hub:hub selenium/node-firefox-debug:3.141.59-yttrium
//
sh "docker network create
${network}" //
sh "docker run -d -p
4444:4444 --name ${seleniumHub} --network ${network} selenium/hub" // sh
"docker run -d -e HUB_PORT_4444_TCP_ADDR=${seleniumHub} -e
HUB_PORT_4444_TCP_PORT=4444 --network ${network} --name ${chrome} -p 5900:32768 selenium/node-chrome-debug:3.141.59-yttrium" //sh
"docker run -d -e HUB_PORT_4444_TCP_ADDR=${seleniumHub} -e
HUB_PORT_4444_TCP_PORT=4444 --network ${network} --name ${firefox} -p 5901:32769 selenium/node-firefox-debug" //sh
"docker run -d --rm -i --name zalenium -p 4444:4444 -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/videos:/home/seluser/videos
--privileged dosel/zalenium start"
//sleep(time:80,unit:"SECONDS") //sh
"docker run -d -P -p 4444:4444 --name ${seleniumHub} selenium/hub" // sh "docker run -d -P -p 5900:5900 --link ${seleniumHub}:hub --name ${chrome}
selenium/node-chrome-debug:3.141.59-yttrium" // sh
"docker-compose up" sh
"pwd" } } stage('Build Jar') { steps { sh
'sudo mvn
clean package -DskipTests -Dmaven.clean.failOnError=false' } } stage('Build Image') { steps { script { // vinsdocker/containertest
=> organization/application - it could be anything app
= docker.build("vagrant/containertest") sh
"pwd" } } } stage('Run Test') { steps{ // a directory 'search' is created
for container test-output // sh "docker run --rm -e SELENIUM_HUB=${seleniumHub} -e BROWSER=chrome
-v ${WORKSPACE}/target:/usr/share/suman/ --network ${network} vagrant/containertest" //sh
"docker run --rm -e
SELENIUM_HUB=${seleniumHub} -e BROWSER=chrome -v ${WORKSPACE}/target:/usr/share/suman/
vagrant/containertest" //archive all the files
under 'search' directory // sh
"docker-compose up" sh
"pwd" sh "docker-compose up" archiveArtifacts artifacts:
'target/**', fingerprint: true } } stage('Tearing Down Selenium Grid') { steps { //remove all the containers and
volumes sh
"docker rm -vf ${chrome}" // sh
"docker rm -vf ${firefox}" sh
"docker rm -vf ${seleniumHub}" // sh
"docker network rm
${network}" //
sh 'docker stop zalenium' } }
} } |
Comments
Post a Comment