目标
我正在使用 Docker 在 Azure Devops 中运行 JMeter。我正在尝试使用 Blazemeter 的并行 Controller ,它不是 JMeter 原生的。因此,根据 justb4/jmeter 图像文档,我使用以下命令来获取图像并运行 JMeter 测试:
docker run --name jmetertest -i -v /home/vsts/work/1/s/plugins:/plugins -v $ROOTPATH:/test -w /test justb4/jmeter ${@:2}
错误
但是,它在尝试适应插件时会产生以下错误(我知道该插件由于没有插件进行测试而产生了差异):
cp: can't create '/test/lib/ext': No such file or directory
据我了解,这是当您尝试创建的目录的父目录之一不存在时产生的错误。是我做错了什么,还是图像实际上有问题?
引用文献
作为引用,我将包含图像文档和存储库的链接。
最佳答案
调查Dockerfile :
ENV JMETER_HOME /opt/apache-jmeter-${JMETER_VERSION}
if [ -d /plugins ]
then
for plugin in /plugins/*.jar; do
cp $plugin $(pwd)/lib/ext
done;
fi
它基本上将插件从 /plugins
文件夹(如果存在)复制到 /lib/ext
文件夹相对于当前工作目录
我不知道为什么要将此节 -w/test
添加到命令行中,但它明确“告诉”容器本地工作目录是 /test
,而不是 /opt/apache-jmeter-xxxx
,这就是脚本无法复制文件的原因。
总的来说,我认为这种方法不是非常有效,因为:
在 Azure DevOps 中,您不会有“本地”文件夹(除非您想在版本控制系统下添加插件二进制文件)
某些 JMeter 插件具有其他 .jar,如 dependencies因此,当您安装插件时,您应该:
- 将插件本身放在 JMeter 安装的/lib/ext 文件夹下
- 将插件依赖项放在 JMeter 安装的/lib 文件夹下
所以我建议修改Dockerfile,下载JMeter Plugins Manager和 installed the plugin(s) you need from the command line
类似于:
RUN wget https://jmeter-plugins.org/get/ -O /opt/apache-jmeter-${JMETER_VERSION}/lib/ext/jmeter-plugins-manager.jar
RUN wget https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar -P /opt/apache-jmeter-${JMETER_VERSION}/lib/
RUN java -cp /opt/apache-jmeter-${JMETER_VERSION}/lib/ext/jmeter-plugins-manager.jar org.jmeterplugins.repository.PluginManagerCMDInstaller
RUN /opt/apache-jmeter-${JMETER_VERSION}/bin/./PluginsManagerCMD.sh install bzm-parallel
关于docker - 将 JMeter 插件与 justb4/jmeter Docker 镜像一起使用会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67911367/