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. 方法1: 不在blue ocean中build,在classic UI中build,具体方法如下

    1. 进入classic UI,点击右侧pipeline列表中的jenkinsLearning
    2. 点击截图红框中的“build now”按钮,即可使用最新的commit来build
    3. 接下来可以进入blue ocean看图形化日志,也可以在classic UI看纯文本日志,都是实时更新的。
  2. 方法2:也可以在blue ocean中build,具体方法如下:

  • 点击截图红框中的“三角”按钮,直接运行
根据git仓库构建的pipeline

手动书写pipeline script的pipeline

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'
      }
    }
  }
}

5

6

7

8

posted @ 2021-11-15 00:22  mediocrep  阅读(109)  评论(0编辑  收藏  举报
既然选择了远方,便只顾风雨兼程!