作为测试,我将其添加到我的Jenkinsfile:中
steps {
sh 'echo "SHOW TABLES;" | mysql'
}
但詹金斯说CCD_ 1。所以我运行了which mysql
,它显示为/usr/bin/mysql
。所以我检查了Jenkins内部的PATH
,上面写着/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
。
我假设如果Jenkins的PATH
包含/usr/bin
,那么Jenkins应该能够按名称访问mysql
可执行文件。
然而,当我运行ls -1 /usr/bin | wc -l
时,我可以看到有1801个文件。在我的Jenkinsfile中,我有
steps {
sh 'ls /usr/bin/ | wc -l'
}
我只得到590个文件。
为什么詹金斯的mysql: command not found
0和詹金斯以外的/usr/bin
不一样?如何从Jenkins内部运行/usr/bin/mysql
?
编辑:我的Jenkinsfile指定了一个docker代理,如下所示:
agent {
docker {
image 'node:current'
}
}
想明白了。在詹金斯档案里,我不得不使用
agent {
dockerfile {
args '--network="host"'
}
}
然后我不得不加入一个像这样的Dockerfile
FROM node:current
RUN apt-get update -y
RUN apt-get install mysql-client -y
并将mysql安装在Docker容器中。--network="host"
部分允许来自Docker容器的mysql调用使用--host=127.0.0.1
连接到主机上运行的mysql服务器。