I have a jenkins script that looks like this:
pipeline {
agent {
label 'machine'
}
stages {
stage('GC Open Build') {
steps {
sh '''
docker run -i --rm \
-u $(id -u):$(id -g) \
-e USER_NAME=$(id -un) \
-e GROUP_NAME=$(id -gn) \
-e HOME \
-v $HOME:$HOME \
-v /PROJ:/PROJ:shared \
-v /srv:/srv \
-w $PWD \
i-st-pd-docker-vxxxxxx
bash | hostname
'''
}
}
}
}
It executes successfully, but the hostname it displays is not the docker container, but the machine on which it runs.
If I try with '-t' in the docker run command, then I get "the input device is not a tty":
pipeline {
agent {
label 'machine'
}
stages {
stage('GC Open Build') {
steps {
sh '''
docker run -it --rm \
-u $(id -u):$(id -g) \
-e USER_NAME=$(id -un) \
-e GROUP_NAME=$(id -gn) \
-e HOME \
-v $HOME:$HOME \
-v /PROJ:/PROJ:shared \
-v /srv:/srv \
-w $PWD \
i-st-pd-docker-v.xxxx
bash | hostname
'''
}
}
}
}
the input device is not a TTY ERROR: script returned exit code 1
Any suggestions to be able to run a set of commands (other than "hostname" from inside the docker container?
Thank you!
Jenkins has native Docker
support available for declarative pipelines . So you can either use your Docker
image as an agent or you can use the Docker step.
Using the image as an agent.
pipeline {
agent any
stages {
stage('Build') {
agent {
docker {
image 'gradle:6.7-jdk11'
// Run the container on the node specified at the
// top-level of the Pipeline, in the same workspace,
// rather than on a new node entirely:
reuseNode true
}
}
steps {
sh 'gradle --version'
}
}
}
}
Using docker step
docker.image('mysql:5').inside("--link ${c.id}:db") {
/* Wait until mysql service is up */
sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.