Jenkins 实战


一. 常用设置

修改Jenkinsfile的路径

注意大小写

修改时区

【系统管理】->【脚本命令行】运行下面的命令

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

一旦容器重启就失效了,所以要进入到用户设置里面,修改 用户自定义时区

https://www.jenkins.io/doc/book/using/change-time-zone/

允许匿名用户访问

系统设置 >> 全局安全设置,勾选 “匿名用户具有可读权限”

自动删除过期的流水线

为防止无用的数据占用太多的存储空间,可以配置自动删除策略。
jenkins首页,点击任务链接 >> 配置 >> 勾选 删除旧的流水线,设置 保留旧的流水线的最大数

二. 一些坑

问题1. Error fetching remote repo ‘origin’ caused by: ... command "git clean -fdx" returned status code 1: .... permission denied

分析:
这个步骤在jenkinsfile中没有配置,是系统的默认行为,看日志是在 clean git -fdx 的时候删除文件没有权限导致的。
所能想到的办法就是删除workspace中的文件,重新来过
解决方法:
进入workspace文件夹,删除里面的全部文件,再重新触发流水线

遗留问题:

  1. 为什么git clean要去删除target目录下的文件
  2. 为什么有两个workspace目录,而真正起作用确不是docker中配置的

问题2. package ... is already associated with another repository.

分析:package 不在指定的git库下面
解决方案:查看printdev信息,找到变量的值(如果是全局变量,建议直接在jenkins file脚本中写死repo的路径)

到指定的位置修改该变量的值

问题3. 构建失败但不显示错误

找到错误的办法:
点击 构建历史,点击历史构建中对应的 图标

问题4. dial tcp 151.101.228.133:443: connect: connection refused

分析:github的相应域名背后是有cdn服务的,但是cdn指向的ip通常只是近一些,比如日本之类的亚洲IP,但是访问并不稳定,需要使用https://www.ipaddress.com/ 查看到对应的域名能够快速的访问的ip
解决方案:

  1. 在hosts里面增加配置的方式,暂时解决了问题,很难确保后续IP是否会变动
sudo vim /etc/hosts

增加如下内容:

140.82.114.34 docker.pkg.github.com
199.232.68.133 githubusercontent.com
199.232.68.133 pkg.githubusercontent.com
140.82.112.6 api.github.com
  1. 使用acr(容器注册表)的方式,即把package存储到本地的服务器,这种方式需要评估费用,并做好调试

问题5. The JVM should have exited but did not.

The following non-daemon threads are still running (DestroyJavaVM is OK):
Thread[AWT-Shutdown,5,system], stackTrace:java.lang.Object#wait
sun.awt.AWTAutoShutdown#run at line:314
java.lang.Thread#run at line:748

分析:发生这种情况是由于BeanShell服务器正在运行,由于某种原因而没有退出。结果,java进程将永远不会退出并且会挂起。
解决方案:
如果jmeter是docker部署的,那么加上

--systemproperty jmeterengine.force.system.exit=true
docker run --interactive --rm --volume `pwd`/test/jmeter:/jmeter egaillardon/jmeter --nongui --testfile boat-house.jmx --logfile output/result.jtl -Jdomain=HOST -e -o ./output --systemproperty jmeterengine.force.system.exit=true

参考:https://github.com/egaillardon/jmeter

问题6. Failed to connect to api.github.com/13.250.168.23:443

分析:
出现这种问题的时候Github站点访问一般都有问题,要不就是访问过慢,要不就是500错误
遗留问题:
设置了host,确定不是这个IP;运行命令的jenkins服务器IP也不是这个;我所有部署的服务器都不是这个IP。
所以我的疑问有两个

  1. 这个斜杠后面的IP究竟代表什么
  2. 这个IP是从哪里来的

问题7. 反向代理设置有误,导致始终无法加载

分析:按照wiki上的说明,分别对jenkins系统 以及 blue 插件进行配置

参考:https://wiki.jenkins.io/display/JENKINS/Jenkins+says+my+reverse+proxy+setup+is+broken
https://wiki.jenkins.io/display/JENKINS/Running+Jenkins+behind+Nginx

问题8. warning: failed to remove src/boat-house-android-proj/.gradle/buildOutputCleanup/outputFiles.bin: Permission denied

分析:没有权限,jenkins流水线一开始跑的时候,都会运行 git clean -fdx,以确保删除build过程产生的文件,从而保证每次build都是最新的
解决方案:

    post {
      always {
         # 删除所有没有版本管理的文件,在jenkins流水线一开是
         sh "sudo git clean -fdx"
      
         # 太暴力,不建议使用,删除所有文件,意味着流水线下一次要重新下载所有文件 
         # sh "sudo rm -rf *"
        
         # 删除指定的文件夹,这种做法不通用,增加了复杂度
        sh "sudo rm -rf src/product-service/api/target"
        sh "sudo rm -rf src/account-service/api/target"
      }
    }

问题9. found orphan containers (xxxx) for this project.If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

解决方案:查看是否缺少基础镜像

问题10. 初始化时,插件安装失败

解决方案:进入linux,删除jenkins容器,删除jenkins容器的运行目录,重新配置和安装

posted @ 2022-12-16 15:58  远方V3  阅读(188)  评论(0编辑  收藏  举报