jenkins 配置说明

这是给团队写的 jenkins 会出现问题的说明,简单的描述了 jenkins 使用中会出现的问题,以及应对方法。当然最好的应对方法是没有问题。

jenkins 是什么

jenkins 自动化的命令运行引擎,pipeline (流水线) 是按照既定的逻辑来执行 jenkinsfile 中的代码。

也就是说它只是一个流程执行引擎,所有的命令都需要依赖其它软件包。 比如 npm ,maven, ansiable 等等。当使用 docker 来启动 jenkins 时,需要在 dockerfile 里面加上打包需要的依赖。

jenkins 结构

参看提交到 github 的 docker 配置文件中的 jenkins 的配置。

这里可以直接使用 docker-compose 来启动和停止 jenkins, 文件说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# jenkins dockerfile 文件,留意几个文件映射
version: '3'

services:
jenkins:
user: root
restart: always
build: .
image: dbj/jenkinsci
volumes:
- ./home:/root
- ./data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- ./ansible:/etc/ansible
ports:
- "8080:8080"
- "50000:50000"
- "10100:10100"

jenkins 文件说明

1
2
3
4
5
6
7
8
9
10
11
12
root@pprt-s2:~/jenkins# tree -L 2
.
├── ansible
│ └── hosts hosts 为 ansible 服务器组配置,新增服务器配置
├── data data 映射为 jenkins 文件目录
│ └── workspace workspace 为项目工作空间,每个pipeline 在这里都会又多文件夹
├── docker-compose.yml
├── Dockerfile
├── home 映射到 /root 主目录,保存 ssh key 和一些用户缓存
│ ├── docker-entrypoint.sh
│ ├── goproxy-shell
│ └── maven

Jenkins 错误

jenkins 中所报的错误,都不是 jenkins 的错误,而是配置的错误,网络的错误,组件的错误。 如果出现错误参看 jenksin 日志,基本能够定位到错误问题。

  • 配置的错误

    配置发生错误,需要检测 jenkinsfile 语法是否正确。 所取的配置文件是否加载正确,传入的配置参数是否正确。

  • 网络的错误

    网络发生错误。主要是在访问三方依赖服务的时候会发生。

    一是在拉取代码,推送打好的 docker 包时发生。 特别是在 github 上拉去代码,当拉去文件庞大时,访问国外网络资源,会导致 jenkins 命令执行超时的问题。

    手工解决办法: 在 workspace 里面有和项目名称一致的目录开头的文件夹

    1
    2
    3
    - <project>             # 项目执行 pipeline 目录
    - <project>@script # 项目代码目录
    - <project>@tmp # 项目其他文件目录

    比如jenkins 里面的 zeus 项目,会有 zeus zeus@script zeus@tmp 三个文件夹,如果有其他 git 代码地址一样的,可以直接将执行成功过的内容拷贝到需要执行的项目,我们的子项目都在一个仓库里,所以很容易找得到其他成功过的项目。

  • 组件的错误

    需要在 jenkins 里面正确的配置依赖组件,比如 npm 、ansible 、maven 等等。

    涉及到的组件错误,参看 jenkins 日志都能够很好的解决。

jenkins 缓存

在上线过程中,不管是 node 、PHP、maven 都会拉对应源文件,为了提交打包速度,会将指定的目录缓存在本地硬盘。

缓存的问题在于,可能会出现缓存中包冲突,如果对此有疑问,可以直接检查于项目同名的项目目录,这里编译后的代码和上线运行的代码一致 。

ansiable 上线问题

我们上线 ansiable 主要是用来远程执行 docker-compose 命令,具体可以参考项目 depoly-config 分支下的 <Project>/file/bookplay.xml .

如果 docker 内部出现冲突,执行docker-compose 时命令执行未成功,输出的是警告,而不是错误。导致无法捕获。产生的原因基本上和docker natwork 有关, docker-compose down 无法关掉网络,导致执行失败。 这里需要手动到服务器去处理。网络问题是由于前期有容器做了网络共享,导致网络关闭失败。 产生这个问题的体现为: Jenkins 上线成功,但是线上代码还是旧版本。

作者

张巍

发布于

2020-01-03

更新于

2022-04-22

许可协议

评论