jenkins节点管理
jenkins定时构建
背景
通过docker安装的jenkins,配置jenkins job的源码管理是通过git,但git拉取到的代码是在jenkins容器的目录当中/var/jenkins_home/workspace/<job_name>
,如果没有在jenkins镜像中安装运行环境,运行的时候就可能提示错误,如运行python项目时提示bash: python: command not found
jenkins docker安装
这里就不赘述jenkins的安装,可进一步参考jenkins安装,我这里使用的是jenkinsci/blueocean镜像
docker run --name monkey_jenkins -p 8080:8080 -p 50000:50000 -itd -v ~/Documents/jenkins_home:/var/jenkins_home jenkinsci/blueocean
You can run builds on the master (out of the box) but if you want to attach build slave servers: make sure you map the port: -p 50000:50000 - which will be used when you connect a slave agent.
注意,如果需要使用slavle节点,必须映射端口50000:50000
问题解决
由于宿主机已经搭建了对应的运行环境,所以把宿主机设置为jenkins的一个slave节点,并限制项目运行节点在宿主机上就可以
- 插件管理-可选插件搜索并安装SSH Agent,重启后生效
- Jenkins- 系统管理 - 全局安全配置, 把 SSH Server 设置为启用(默认是禁用)
- Jenkins- 系统管理 - 节点管理,新增节点
- 添加节点界面填写
- 名称:自定义一个节点名称
- 执行器数量:可以同时执行的job线程数,随便写个数字
- 远程工作目:宿主机上workspace目录
- 标签:自定义
- 用法:尽可能的使用这个节点
- 启动方式:Launch agent agents via SSH
- 主机:你自己的宿主机linux服务的ip
- Credentials:添加你的linux服务器远程访问的root账号和密码
- Host Key Verification Strategy:这项选择Non verifying Verifcation Stragegy
- 限制项目运行节点
- General-限制项目的运行节点,标签表达式输入步骤4中定义的节点名称
Launch agent agents via SSH 连接不上
我这里采用ssh方式不行,一直连接deny,也不知道怎么回事,于是采用了通过java web启动代理
设置好后节点会提示到节点连接Jenkins的方式,如我的为(在宿主机上执行,先下载agent.jar在执行目录下):
java -jar agent.jar -jnlpUrl http://localhost:8080/computer/mac/jenkins-agent.jnlp -secret xxxx -workDir "~/apitest"
shell脚本中有后台运行python http server异常退出
提示错误:Process leaked file descriptors. See https://www.jenkins.io/redirect/troubleshooting/process-leaked-file-descriptors for more information 然后server会退出
解决办法可参考jenkins Process leaked file descriptors
- Jenkins-->Manage Jenkins-->Configure System 在Global properties下,新增新的环境变量
key=BUILD_ID
value=allow_to_run_as_daemon start_my_service
jenkin定时构建
定时构建语法
* * * * *
:*
号等同于H
- 第一个
*
表示分钟,取值0~59,若其他值不做设定,则表示每个设定的分钟都会构建 - 第二个
*
表示小时,取值0~23, 若其他值不做设定,则表示每个设定小时的每分钟都会构建 - 第三个
*
表示一个月的第几天,取值1~31,若其他值不做设定,则表示每个月的那一天每分钟都会构建一次 - 第四个
*
表示第几月,取值1~12,若其他值不做设定,则表示每年的那个月每分钟都会构建一次 - 第五个
*
表示一周中的第几天,取值0~7,其中0和7代表的都是周日,若其他值不做设定,则表示每周的那一天几每分钟都会构建一次
定时构建示例
# 每隔5分钟构建一次(第一个*为分钟)
H/5 * * * *
# 每两小时构建一次(第二个*为小时)
H H/2 * * *
# 每隔3天执行一次(第三个*为一个月的第几天)
H H H/3 * *
# 每隔3天执行一次(每月的1-15号)
H H 1-15/3 * *
# 周六到周日,18点-23点,三小时构建一次(第五个*为一周中的第几天)
H 18-23/3 * * 6-7
# 每天凌晨2:00跑一次 (第二个*为小时)
H 2 * * *
# 每天中午12点定时构建一次(第二个*为小时)
H 12 * * *
# 每天的8点,12点,22点,一天构建3次
H 8,12,22 * * *
jenkins时间同步问题
查看jenkins系统管理-系统信息-系统属性发现user.timezone不对,在定时构建时jenkins时区问题会导致定时构建达不到预期效果。因此就需要修改容器时区,可进一步参考永久修改以容器化方式运行的Jenkins系统时间,这里使用docker run
加上参数去修复该问题
docker run --name monkey_jenkins -p 8080:8080 -p 50000:50000 -itd -v ~/Documents/jenkins_home:/var/jenkins_home -e JAVA_OPTS='-Duser.timezone=Asia/Shanghai' jenkinsci/blueocean