Jenkins Build Execute Shell - 文件权限被拒绝

Posted

技术标签:

【中文标题】Jenkins Build Execute Shell - 文件权限被拒绝【英文标题】:Jenkins Build Execute Shell - File Permission denied 【发布时间】:2021-10-09 20:42:45 【问题描述】:

尝试使用 Jenkins 和 AWS EC2 建立一个简单的 NodeJS 项目。

Jenkins 在 push 上运行。但在构建步骤中总是会失败。这是我的构建命令:

npm install
./script/test
./script/deploy

这给了我错误:

+ ./script/test
/tmp/jenkins10867859339292112280.sh: 3: ./script/test: Permission denied
Build step 'Execute shell' marked build as failure
Finished: FAILURE

如果我在调用./script/test/ 之前添加chmod 777 ./script/test 它适用于测试文件。:

+ chmod 777 ./script/test
+ ./script/test

[90m․[0m

[92m [0m[32m 1 passing[0m[90m (28ms)[0m

如果我现在添加 chmod 777 ./script/deploy 不适用于部署文件:

+ chmod 777 ./script/deploy
+ ./script/deploy
/tmp/jenkins10865500977174113561.sh: 6: ./script/deploy: not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

现在我的构建命令看起来像:

npm install
chmod 777 ./script/test
./script/test
chmod 777 ./script/deploy
./script/deploy

测试文件有效,但现在找不到部署文件。

我尝试查看是否可以在之前使用命令ls -l ./script/deploy 找到它,这给了我这个结果:

+ chmod 777 ./script/deploy
+ ls -l ./script/deploy
-rwxrwxrwx 1 jenkins jenkins 338 Aug  4 18:31 ./script/deploy
+ ./script/deploy
/tmp/jenkins11221280265482222163.sh: 7: ./script/deploy: not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

这个结果似乎可以找到文件,但是在调用它时。不能。

测试文件:

#!/bin/sh
./node_modules/.bin/_mocha ./test/test.js

部署文件:

#!/bin/sh
ssh -i JenkinsKey ubuntu@172.31.76.179 <<EOF
    cd ~/3DViewer
    git pull origin master
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
    . ~/.nvm/nvm.sh
    nvm install v16.6.1
    npm install
    npm install -g nodemon pm2
    pm2 restart ecosystem.config.js
    exit
EOF

如果需要,可以提供我的构建日志。

【问题讨论】:

我看不出这里出了什么问题,但我不会使用 3 个构建命令,而是将它们打包到一个脚本中,比如 buildscript,其中包括 installtestdeploy,然后将由 sh -x ./scripts/buildscript 从 jenkins 调用。这使您可以更好地控制正在发生的事情。 @user1934428 这确实有效,但如果测试失败,我想让 Jenkins 失败,而不是让它部署失败的测试版本。 然后在你的脚本中测试,无论 ./script/test 是否失败,并且只有在它没有失败时才执行部署。问题出在哪里? 【参考方案1】:

尝试使用文件的绝对路径,如果它在工作区尝试使用

/bin/bash $workspace/script/deploy

其他尝试

/bin/bash <path of your script directory>/script/deploy

【讨论】:

这项工作!谢谢!我用/bin/bash $WORKSPACE/script/deploy 我的工作代码是:npm install /bin/bash $WORKSPACE/script/test /bin/bash $WORKSPACE/script/deploy

以上是关于Jenkins Build Execute Shell - 文件权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Build step 'Execute Windows batch command' marked build as failure

在 Jenkins 中,Execute Shell 如何/何时将构建标记为失败?

jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决

jenkins:Send files or execute commands over SSH使用方式【原创】

Build step ‘Execute shell‘ marked build as failure

快速获取Jenkins上build