problems_jenkins
problems_jenkins
1 jenkins创建pipeline时使用本地仓库url时报错
desc:
本地仓库url路径为: /develop/ideaws/simple-app,为一个真实存在的路径
errorlog:
不是一个有效的URL
solution:将该仓库移动到 当前用户的 家目录下,就可以了。
note:后来尝试了一下其他的在/develop/ideaws/下的本地git仓库,发现可以正常创建pipeline。
2 Jenkins的pipeline构建时报错 mvn: Permission denied
desc:
在执行这条命令 mvn -B -DskipTests clean package
时报错了
应该是权限问题,尝试过网上的一些方法,将jenkins账户加入到我的当前用户所在组witt,然后重启jenkins,再次build,还是同样的错误。
后来看到网上一篇文章,受其启发,终于解决了。文章内容如下:
相同mvn命令,本地编译异常,通过jenkins编译报错,定位是用户权限问题,
在shell中添加whoami打印jenkins用的是jenkins用户,
jenkins是通过yum安装时自动创建的系统用户(没有目录,没有配置文件),无法通过su命令切换,
要么改成root或其他用户,要么将mvn相关目录所有者改为jenkins(实测无效,可能时因为jenkins不是普通用户,无配置)
解决方案:将jenkins默认用户改为root或其他:
//修改用户为root或其他
vim /etc/sysconfig/jenkins # centos中的jenkins配置文件路径
//重启jenkins
systemctl restart jenkins
修改后编译成功!
原文链接:https://blog.csdn.net/evanxuhe/article/details/82706780
solution:
我的是ubuntu系统,jenkins配置文件的路径是这个:/etc/default/jenkins
于是经过多次尝试后,最终修改了该文件的如下内容:
sudo vim /etc/default/jenkins
# 修改如下内容
JENKINS_USER=root
然后重启jenkins,解决:sudo systemctl restart jenkins
note:
这么修改之后,pipeline中修改Jenkinsfile文件后,保存push到git本地仓库中,也能成功了,原来也是报没有权限或 pipe closed
的错误。
3 jenkins在blue ocean中无法每次build都无法拉取git最新commit的代码
solution:
// 进入 /var/lib/jenkins/workspace/jenkinsLearning_main
,执行 sudo git pull origin main
拉取git仓库中的最新commit。(实际测试下来,这一步完全可以省略)
-
方法1: 不在blue ocean中build,在classic UI中build,具体方法如下
- 进入classic UI,点击右侧pipeline列表中的
jenkinsLearning
- 点击截图红框中的“build now”按钮,即可使用最新的commit来build
- 接下来可以进入blue ocean看图形化日志,也可以在classic UI看纯文本日志,都是实时更新的。
- 进入classic UI,点击右侧pipeline列表中的
-
方法2:也可以在blue ocean中build,具体方法如下:
- 点击截图红框中的“三角”按钮,直接运行
4 Jenkinsfile总是无法读取在environment模块中自定义的变量
经过研究结论如下(干脆直接把整个Jenkinsfile的内容拷贝过来):
pipeline {
agent any
environment {
a = 'aaa'
}
stages {
stage('build') {
environment {
b = 'bbb'
}
steps {
sh '# mvn -B -DskipTests clean package'
echo "${b}"
}
}
stage('test') {
environment {
c = 'ccc'
}
// post {
// always {
// junit 'target/surefire-reports/*.xml'
// }
// }
steps {
sh '# mvn test'
echo '${a}' // output: ${a}
echo '${env.a}' // output: ${env.a}
echo "${a}" // output: aaa
echo "${env.a}" // output: aaa,小结:如果变量存在且作用域可以覆盖到此处,则 "${a}" 和 "${env.a}" 都能显示正常的值
echo "env.a's value is ${env.a}" // output: env.a's value is aaa
echo '${b}' // output: ${b}
echo '${env.b}' // output: ${env.b},小结:引用变量的话,不能用单引号,需要用双引号!
// echo "${b}" // 报错:No such property: b for class: groovy.lang.Binding,原因:b的作用域在仅限于 stage('build')
echo "${env.b}" // output: null,小结:如果变量不存在或作用域无法到此处,则 "${b}"报错,"${env.b}" 值显示为 null
// echo "env.b's value is ${env.b}" //
echo "${c}" // output: ccc
echo "env.c's value is ${c}" // output: env.c's value is ccc
echo "env.c's value is ${env.c}" // output: env.c's value is ccc
}
}
stage('deliver') {
steps {
sh '# ./jenkins/scripts/deliver.sh'
}
}
}
}