坑爹的Jenkins官方文档

Jenkins官方文档执行的几个错误解决

开始做一些devops工程方面的工作,那必然第一个接触的就是Jenkins。

但是Jenkins的文档真是太坑了。

为了跑通一个官方例子,今天一下午全耗在这上了。索性最终是踩坑完毕。

下面总结下我遇到的几个坑。大家可及时跳过。

我实验的例子是官方的使用Maven构建Java应用程序

先说一下我部署Jenkins的方法。

docker run \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /etc/localtime:/etc/localtime:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins-blueocean \
--restart=always \
jenkinsci/blueocean

-v /etc/localtime:/etc/localtime:ro 作用是同步主机时区

-v /var/run/docker.sock:/var/run/docker.sock

表示Docker守护程序通过其监听的基于Unix的套接字。该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化 其他Docker容器,则该守护进程是必需的。

或者不是通过volume,也可以直接挂载到服务器的目录上,这样查看文件比较方便

-v $HOME/jenkins_home:/var/jenkins_home

1,本地构建问题

官方的例子是,将源码仓库下载到jenkins所在的服务器。

只要将git仓库下载到jenkin本地的路径下。jenkins可以识别这是一个git仓库进而构建它。

注意:使用docker部署的,所以填写的路径是jenkins容器里的路径。

我之前用-v $HOME/jenkins_home:/var/jenkins_home将/var/jenkins_home目录挂载出来了。

坑爹的Jenkins官方文档

不用尝试了,会报错

Checkout of Git remote '/var/jenkins_home/GitHub/simple-java-maven-app' aborted because it references a local directory, which may be insecure. You can allow local checkouts anyway by setting the system property 'hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT' to true.

查了下,这个变量可以配置,具体怎么做我还没查到。

但是不想解决了,没什么意义。因为我们以后也不会用本地构建。都是从远程仓库拉代码的。

2,maven版本问题

案例中给的Jenkinsfile使用的镜像版本是maven:3-alpine

agent {
      docker {
          image 'maven:3-alpine'
          args '-v /root/.m2:/root/.m2'
      }
  }

但是在他的代码里


  
  [3.5.4,)
  

所以会报错

坑爹的Jenkins官方文档

Detected Maven Version: 3.5.0 is not in the allowed range [3.5.4,).

[INFO] ------------------------------------------------------------------------

[INFO] BUILD FAILURE

去dockerhub上找了个镜像image 'maven:3.6.1-alpine'

问题解决

3,没有权限权限

然后到了最后一步Deliver

按照官方的写法

stage('Deliver') {
  steps {
  sh './jenkins/scripts/deliver.sh'
  }
}

结果报错

+ ./jenkins/scripts/deliver.sh

/var/jenkins_home/workspace/demo1@tmp/durable-aed01882/script.sh: line 1: ./jenkins/scripts/deliver.sh: Permission denied

script returned exit code 126

主要是这个问题困扰了我好久

在网上看到的解决方案,基本上都是改用户,改文件权限。我试了都不行。

因为我用docker启动的时候就指定了用户是root

并不是jenkins

然后我修改了下stage,加上了sleep(100)

让容器暂停下,不要很快的退出。

docker exec -it 9ee087b880b9 /bin/sh

进到容器里,我执行了下

sh ./jenkins/scripts/deliver.sh

是成功的,没问题啊。

然后又仔细看了下报错,原来jenkins是直接执行的

./jenkins/scripts/deliver.sh

并不是

sh ./jenkins/scripts/deliver.sh

原来如此啊。之前deliver.sh它并不是一个可执行文件,直接执行自然是不行的。

那么简单的只要改一下

stage('Deliver') {
  steps {
  sh 'sh ./jenkins/scripts/deliver.sh'
  }
}

或者

stage('Deliver') {
  steps {
      sh 'chmod +x ./jenkins/scripts/deliver.sh'
      sh './jenkins/scripts/deliver.sh'
  }
}
坑爹的Jenkins官方文档

成功。yes

最后说一句:

我错了,我不该看中文文档。

看英文的,英文的有更新,中文的太落后了。

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章