問題1:在jenkins的Build--Execute shell中,將編譯好的js拷貝到工作目錄,沒有權限。
原因分析:Jenkins默認會以Jenkins的用戶來執行shell
解決辦法:修改Execute shell的執行用戶
1)修改/etc/sysconfig/jenkins
#JENKINS_USER="jenkins"
JENKINS_USER="test"
2)把test用戶添加到jenkins組中
usermod -a -G jenkins test
3)修改jenkins目錄權限
sudo chmod -R g+rwx /var/lib/jenkins
sudo chmod -R g+rwx /var/cache/jenkins
sudo chmod -R g+rwx /var/log/jenkins
問題2:在jenkins的Build--Execute shell中,通過forever啟動nodejs,forever的日志出現下面的錯誤:
error: Forever detected script was killed by signal: SIGTERM
原因分析:Jenkins默認會在Build結束后Kill掉所有的衍生進程
解決辦法:
1.修改/etc/sysconfig/jenkins的JENKINS_JAVA_OPTIONS,加入-Dhudson.util.ProcessTree.disable=true。
#JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.util.ProcessTree.disable=true"
2.在Execute shell中,在執行forever啟動執行之前,修改Jenkins的環境變量BUILD_ID,
執行完之后再改回來,如:
OLD_BUILD_ID=$BUILD_ID
BUILD_ID=jenkins_$OLD_BUILD_ID #新ID可以是任意的
forever start server/server.js
BUILD_ID=$OLD_BUILD_ID
推薦方法2.
問題3:在jenkins的Build--Execute shell中,通過forever啟動nodejs要報錯,而通過交互式執行則正常。
原因分析:Jenkins默認會采取/bin/sh -xe來執行shell
解決辦法:
把Execute shell頭部的#!/bin/env bash中加入-il參數,如:
#!/bin/env bash -il
以交互+登陸式的方式執行shell。