为什么 Jenkins 看不到 /usr/bin 中的程序?



作为测试,我将其添加到我的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 found0和詹金斯以外的/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服务器。

相关内容

最新更新