Jenkins in docker ... pipeline script from SCM ... sh 'adb devices...' not working

211 views
Skip to first unread message

Cepin

unread,
Jan 4, 2018, 9:32:08 AM1/4/18
to Jenkins Users
Hi all,
machine with centos 7
Docker version 17.12.0-ce, build c97c6d6
Jenkins ver. 2.60.3
all plugins updated

situation:
Jenkins (running in container Alpine linux) is configured to download Jenkins file from gitlab and the start some containers (based on debian:stretch-slim) and run there some scripts....the Jenkins file looks like:

node {
    stage('Git fetch') {
        git poll: false, changelog: false, url: 'https://XXX/gitlab/test.git', credentialsId: 'DOL', branch: 'master'
    }
    def appium_ready = false
    withDockerServer([uri: "tcp://localhost:2376"]) {
        parallel Cucumber: {
            stage ('Starting Cucumber')
            {
                try {
                    docker.image('docker_ruby').inside('--user root:root --net=host') {
                        echo 'Waiting for Appium'
                        waitUntil {
                          sleep 2
                          return (appium_ready == true)
                        }
                        try {


                            // #### Show start HERE ####
                            sh 'cucumber -t @add_unread -t ~@wip'


                        }
                        catch ( error ) {
                            cucumber 'report.json'
                        }
                        cucumber 'report.json'
                    }
                }
                catch ( error ) {
                    sh 'curl http://localhost:4444/lifecycle-manager/LifecycleServlet?action=shutdown || echo "Selenium server unreachable";exit 1' //shutdown selenium & fail
                }
                sh 'curl http://localhost:4444/lifecycle-manager/LifecycleServlet?action=shutdown || echo "Selenium server unreachable"'
            }
        },
        Appium: {
            stage ('Starting Appium')
            {
                docker.image('docker_appium').inside('--user root:root --net=host') {
                    sh 'adb devices; cd scripts && ./start_environment_new.sh 2>&1 >/dev/null'
                    appium_ready = true
                    sh 'PID_SEL=`cat /tmp/selenium.pid`; while( ps -p $PID_SEL > /dev/null ); do sleep 5;done' // wait doesn't work
                }
            }
        }
    }
}


Everything works fine but when it is in the "sh 'adb devices; cd scripts && ./start_environment_new.sh 2>&1 >/dev/null'" then it will timeout and say "Shell Script script returned exit code -2"
The shell script starts with usual: "#!/bin/bash"

All this approach was working fine until most probably something was updated ... docker, Jenkins plugins, some host OS stuff. 

Please don't you anybody have same issue a ideally fix for it? I found some hints on google but nothing was working for me :(.

Here is the CLI output:
[Pipeline] }
[Pipeline] // stage
[Pipeline] withDockerServer
[Pipeline] {
[Pipeline] parallel
[Pipeline] [Cucumber] { (Branch: Cucumber)
[Pipeline] [Appium] { (Branch: Appium)
[Pipeline] [Cucumber] stage
[Pipeline] [Cucumber] { (Starting Cucumber)
[Pipeline] [Appium] stage
[Pipeline] [Appium] { (Starting Appium)
[Pipeline] [Cucumber] sh
[Cucumber] [voicemail_ta_android] Running shell script
[Pipeline] [Appium] sh
[Cucumber] + docker inspect -f . docker_ruby
[Appium] [voicemail_ta_android] Running shell script
[Appium] + docker inspect -f . docker_appium
[Cucumber] .
[Appium] .
[Pipeline] [Cucumber] withDockerContainer
[Cucumber] Jenkins seems to be running inside container 9350a6f58ccb1d0000b7fcac229dee8079a191aed4452b1403e3ee4b43f92c63
[Cucumber] $ docker run -t -d -u 1000:1000 --user root:root --net=host -w /var/jenkins_home/workspace/voicemail_ta_android --volumes-from 9350a6f58ccb1d0000b7fcac229dee8079a191aed4452b1403e3ee4b43f92c63 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat docker_ruby
[Pipeline] [Cucumber] {
[Pipeline] [Appium] withDockerContainer
[Appium] Jenkins seems to be running inside container 9350a6f58ccb1d0000b7fcac229dee8079a191aed4452b1403e3ee4b43f92c63
[Appium] $ docker run -t -d -u 1000:1000 --user root:root --net=host -w /var/jenkins_home/workspace/voicemail_ta_android --volumes-from 9350a6f58ccb1d0000b7fcac229dee8079a191aed4452b1403e3ee4b43f92c63 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat docker_appium
[Pipeline] [Appium] {
[Pipeline] [Cucumber] echo
[Cucumber] Waiting for Appium
[Pipeline] [Cucumber] waitUntil
[Pipeline] [Cucumber] {
[Pipeline] [Appium] sh
[Appium] [voicemail_ta_android] Running shell script
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.25 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.3 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.36 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.43 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.51 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.62 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Cucumber] }
[Cucumber] Will try again after 0.74 sec
[Pipeline] [Cucumber] {
[Pipeline] [Cucumber] sleep
[Cucumber] Sleeping for 2 sec
[Pipeline] [Appium] }
[Appium] $ docker stop --time=1 fd73d4d5c85464418c551dc5232d6ba29ab3f6c12b25617bc94ade803f3da8c6
[Appium] $ docker rm -f fd73d4d5c85464418c551dc5232d6ba29ab3f6c12b25617bc94ade803f3da8c6

When I will connect to container where the script should be executed I can execute it manually without problems.


Thanks for any advice!
Ondrej







Victor Martinez

unread,
Jan 4, 2018, 10:11:22 AM1/4/18
to Jenkins Users
You might get some benefits of adding some -x debug traces in the script './start_environment_new.sh' to know what it does under the hood.

Besides of that, did you check whether those docker images should be attach to a particular version? it might be related to the usage of 'latest' by default and maybe there were some releases recently.

Cheers
Reply all
Reply to author
Forward
0 new messages