• Jenkins Pipeline+Maven+Gitlab持续集成构建问题集锦


    目录


    问题

    1、全局配置一定要写正确,之前where git 给的地址时E:Gitcmdgit.exe一直报错,其实Windows真正的git.exe在bin目录下

      如果是Linux中,使用whereis git查看git安装地址,一般都在/usr/bin/git

    2、Windows环境的pipeline调用mvn 需要写成这样

     bat 'D:\chromeDownload\apache-maven-3.6.0-bin\apache-maven-3.6.0\bin\mvn install'

    复制代码
    node {
    
        stage('Pull Code'){
            
            git branch: 'master', credentialsId: 'gitlab_account', url: 'http://********.git'
            
        }
        
       stage('Code Check') {
                echo "敬请期待!"
             }
    
       stage('Unit Test') {
             echo "敬请期待!"
          }
         
    
       stage('Compile') {
           echo '编译开始'
           bat 'D:\chromeDownload\apache-maven-3.6.0-bin\apache-maven-3.6.0\bin\mvn install'
           
        
       }
    
       stage('Build Images') {
            echo '敬请期待!'
          
        }
    
        stage('Backup'){
            echo '旧版本软件包已经备份'
        }
    
        stage('Deploy'){
           echo '敬请期待!'
        }
    
        stage('Integration Testing') {
              echo "敬请期待!"
           }
    
        stage('UI Automated Testing') {
              echo "敬请期待!"
           }
    
        stage('Send Testing Report') {
              echo "敬请期待!"
           }
    
    }
    复制代码

    Linux下脚本

    复制代码
    node {
    
    
        stage('Pull Code'){
            
            git branch: 'master', credentialsId: 'git_account', url: 'http://********.git'
            
        }
        
       stage('Code Check') {
                echo "代码检查!"
             }
    
       stage('Unit Test') {
             echo "单元测试 !"
          }
         
    
       stage('Compile') {
            echo '编译开始'
            sh "/var/tools/apache-maven-3.3.9/bin/mvn install"
       }
    
       stage('Build Images') {
            echo '敬请期待!'
          
        }
    
        stage('Backup'){
            echo '旧版本软件包已经备份'
        }
        
        stage('Delete Old war'){
            echo "删除老的包"
        }
        
    
        stage('Deploy'){
           echo '部署!'
        }
    
        stage('Integration Testing') {
              echo "敬请期待!"
           }
    
        stage('UI Automated Testing') {
              echo "敬请期待!"
           }
    
        stage('Send Testing Report') {
              echo "敬请期待!"
           }
    
    }
    复制代码

    3、出现 fatal: Authentication failed for 'http://***.git/'

    ERROR: Error cloning remote repo 'origin'
    hudson.plugins.git.GitException: Command "/usr/bin/git fetch --tags --progress http*****.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
    stdout: 
    stderr: remote: HTTP Basic: Access denied
    fatal: Authentication failed for 'http://***.git/'

    刚开始怀疑是执行Jenkins机器没有把公钥放在gitlab上,其实不是这个原因。

    明显是权限账号问题,检查凭证,是不是账号密码输入错误了,或者pipeline中的脚本 credentialsId 写错了(我就犯了这么低级的错误,哈哈哈)

      

     4、出现下图not found

    复制代码
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Code Check)
    [Pipeline] echo
    代码检查!
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Unit Test)
    [Pipeline] echo
    单元测试 !
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Compile)
    [Pipeline] echo
    编译开始
    [Pipeline] sh
    + /home/tools/apache-maven-3.3.9/bin/mvn install
    /var/jenkins_home/workspace/wechatcapi@tmp/durable-4f4430f6/script.sh: 1: /var/jenkins_home/workspace/wechatcapi@tmp/durable-4f4430f6/script.sh: /home/tools/apache-maven-3.3.9/bin/mvn: not found
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    ERROR: script returned exit code 127
    Finished: FAILURE
    复制代码

    原因:是因为缺少插件:Pipeline Maven Integration (此原因已排除,读者忽略,仅做记录 )

    实际原因:pipeline中脚本要指定容器中mvn地址,而不是宿主机的

    stage('Compile') {
    echo '编译开始'
    sh "/var/tools/apache-maven-3.3.9/bin/mvn clean"
    }

    这里用了容器的mvn但是容器中还缺少环境变量配置:

    vi /etc/profile 又提示:

    bash: vi: command not found

    安装vi 又提示没有权限

    jenkins@443d62de8949:/var/tools$ apt-get install vi
    E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
    E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

    解决方法:进入容器时使用root账户进入

    sudo docker exec -it -u root e36f /bin/bash

    先更新源:

    apt-get update

    apt-get upgrade

    再安装vi

    apt-get install vi

    如果安装vi不行,那就安装vim

    apt-get install vim
     
    5.docker安装Jenkins报错is not a directory on the Jenkins master(but perhaps it exists on some agents)

    尽量不要使用docker安装Jenkins!!!,有很多的坑。

    1.安装docker并启动
    2.下载Jenkins的docker镜像
    docker pull jenkinsci/blueocean
     3.启动镜像
    docker run
    -u root
    --rm
    -d
    -p 8080:8080
    -p 50000:50000
    -v jenkins-data:/var/jenkins_home
    -v /var/run/docker.sock:/var/run/docker.sock
    jenkinsci/blueocean
    4.访问Jenkins,并初始化配置
    localhost:8080,需要解锁Jenkins

    需要输入密码,密码的位置已经告诉我们了,但是在服务器上是没有这个路径的,需要进入容器内部来获取

    查看运行的docker容器,会看到Jenkins的id:docker ps

    进入镜像内,-it后填查到的id号:docker exec -it xxxxxx bash

    获取密码:cat /var/jenkins_home/secrets/initialAdminPassword

    填入网页即可

    自定义Jenkins,我选择了推荐的插件

    配置配置git、jdk、maven

    此时问题开始出现,配置报错maven home不存在,其实本机是存在的。

    xxxx is not a directory on the Jenkins master(but perhaps it exists on some agents)

    java home也是一样的报错。

    解决:

    需要将本地的maven和java挂载到Jenkins容器,重新启动安装jenkins:

    新建一个Jenkins_home挂载目录
    mkdir /var/jenkins_home
     

    注意挂载目录授权
    sudo chown -R 1000 /var/jenkins_home
     启动:

    -v命令进行挂载,其中冒号前面的是本机的目录,将本机的javahome和mavenhome的路径,挂载到Jenkins容器上,冒号后面是容器上的目录,可以写跟本机目录相同。

    docker run
    -u root
    --rm
    -d
    -p 8080:8080
    -p 50000:50000
    -v /var/run/docker.sock:/var/run/docker.sock
    -v /usr/java/jdk1.8.0_181/bin/java:/usr/java/jdk1.8.0_181/bin/java
    -v /usr/java/jdk1.8.0_181:/usr/java/jdk1.8.0_181
    -v /usr/local/maven:/usr/local/maven
    -v /var/jenkins_home:/var/jenkins_home
    jenkinsci/blueocean
    这样启动后就本地的容器中/var/jenkins_home 目录下的内容就会存入本机的/var/jenkins_home下,密码也可以从这个目录下获取而不用进入容器内部。

    这样解决了大部分问题,其他的还是有一些问题的,所以尽量不要用docker启动Jenkins。
     

    6、settings.xml文件配置放置位置

      可以看到有两个.m2目录,正确的地方是/var/jenkins_home/.m2这个目录下放置settings.xml文件,同时记得修改settings文件中地址:<localRepository>/var/jenkins_home/.m2</localRepository>

    root@e36f8029c9f2:~/.m2# find / -name .m2
    /root/.m2
    /var/jenkins_home/.m2
  • 相关阅读:
    [原]zoj3772--【水题】线段树区间查询+矩阵乘法
    站立会议报告(5)
    团队博客(8)
    站立会议报告(4)
    团队博客(7)
    站立会议报告(3)
    团队博客(6)
    站立会议报告(2)
    团队博客(5)
    团队博客(4)
  • 原文地址:https://www.cnblogs.com/mscm/p/13151995.html
Copyright © 2020-2023  润新知