• 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

  • 相关阅读:
    报错:Message is larger than modules
    报错:常量字符串过长
    C#监控WinCE手机用户操作的程序,并通过usb连接发送到pc监听服务
    .Net Compact Framework coredll.dll API列表
    Oracle任意日期得到该周第一天的日期
    ORACLE查看锁表进程及杀死进程的语句
    客户端js与服务端通过BASE64进行交互
    为什么在powerdesigner成功将表生成到oracle,用sql操作提示表或视图不存在
    gprof的简单实用
    学习笔记fputs与printf
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15554192.html
Copyright © 2020-2023  润新知