通过詹金斯传递参数到shell脚本的问题

我有一个远程计算机X.X.X.X,该远程计算机具有docker,其内部具有如下所示的脚本

docker exec -i $docker_container_id python /test/script.py $param1 $param2 /host/test/

当我从远程计算机上运行它时,它已成功执行

我的本​​地计算机上运行着詹金斯,我试图在远程计算机上执行相同的命令

我遵循的步骤,

1)创建一个自由式项目
2)这是一个参数化项目,并选择了三个字符串docker_container_id,param1,param2
3)“ pre build shell脚本”部分具有以下脚本

echo $docker_container_id
        docker exec -i $docker_container_id python /test/script.py $param1 $param2 /host/test/

echo带有容器ID,但未获取参数,而是出现此错误

echo $docker_container_id 
docker exec -i $docker_container_id python /host/base/ci/src/automated_tests.py $param1 $param2 /host/test/
test_container_id

1)因此,参数未在docker命令中传递,但可用于'echo'

2)当我尝试使用以下命令(即)传递双引号参数,但出现以下错误时,

"docker exec -i $docker_container_id python /test/script.py $param1 $param2 /host/test/"

错误:

echo $docker_container_id 
"docker exec -i base_test python /host/base/ci/src/automated_tests.py $BRANCH $DATE /host/base/"
bash: line 4: docker exec -i test_container_id python /host/base/ci/src/automated_tests.py param1 param2 /host/test/: No such file or directory
test

令人惊讶的是,现在传递了参数,但出现错误“没有这样的文件或目录”

gaoshao1982 回答:通过詹金斯传递参数到shell脚本的问题

使用docker exec -i docker_container_id "python /app/test.py $param1 $param2 /host/test/",它将在主机而不是容器内查找$param1。您的命令似乎也不正确,请在exec docker_container_id中使用bash。处理这两种价值

export param1=test && export param2=test2 && docker exec -i $docker_container_id bash -c "python /app/test.py $param1 $param2 /host/test"

此外,再次检查Jenkins execute shell,是否传递了变量,并且docker能够从Jenkins参数中使用这些变量。如果费用有问题,请将其作为ENV传递给docker exec命令。

docker exec -e BRANCH=$BRANCH -i base_test bash -c "python /app/test.py $BRANCH $DATE /host/base/"

此外,您可以直接执行ssh命令而无需ssh-pluging。

enter image description here

最后一件事,请仔细检查脚本中的值,而不是Jenkins UI。

从讨论中我们还指出,这是詹金斯(Jenkins)显示问题,并且值在容器中正确扩展,因此更好地检查脚本。

本文链接:https://www.f2er.com/3167988.html

大家都在问