我正在尝试将测试阶段添加到我的Jenkins文件中。
我在Jenkins安装了docker。
我用这个命令运行我的测试:
docker-compose run web python manage.py test
这是我的Jenkins文件:
node{
stage('Checkout'){
def dockerHome = tool 'docker'
env.PATH = "${dockerHome}/bin"
checkout scm
}
stage('Build image') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
sh "docker login --username=mygituks --password=mdj1646MDJ"
sh "docker build -t my_git_uks -f Dockerfile ."
sh "docker tag my_git_uks gituks/uks-git-2019:second"
}
}
stage('Run Tests') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
def testsError = null
try {
sh "docker-compose run web python manage.py test"
}
catch(err) {
testsError = err
echo "Failure"
}
}
}
stage('Push image') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
sh "docker push gituks/uks-git-2019:second"
}
}
}
我收到此错误:docker-compose:找不到命令
这是我也尝试过的一件事,我得到了这个错误:test.sh:第3行:找不到python:command
我添加了test.sh:
#!/bin/bash
python manage.py test
并将我的测试阶段改为:
stage('Run Tests') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
def testsError = null
try {
sh "bash test.sh"
}
catch(err) {
testsError = err
echo "Failure"
}
}
希望有人可以帮我解决这个问题或给出我的任何提示。
解决了
node{
stage('Checkout'){
def dockerHome = tool 'docker'
env.PATH = "${dockerHome}/bin"
PATH = "$PATH:/usr/bin"
checkout scm
}
stage('Build image') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
sh "docker login --username=mygituks --password=mdj1646MDJ"
sh "docker build -t my_git_uks -f Dockerfile ."
sh "docker tag my_git_uks gituks/uks-git-2019:second"
}
}
stage('Run Tests') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
echo "PATH is: $PATH"
sh "docker exec my_git_web python manage.py test"
}
}
stage('Push image') {
withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin']){
sh "docker push gituks/uks-git-2019:second"
}
}
}
您可能没有在代理上安装docker-compose。
你可以:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
docker.image("docker").inside() {
sh "docker-compose run web python manage.py test"
}