1. Dockerfile
FROM jenkins/ jenkins: 2.411 - jdk11
USER root
#以下生成密钥方式为旧格式,因为新格式暂不能被 "Publish over SSH--->Jenkins SSH Key" 功能识别
RUN ssh- keygen - q - m PEM - t rsa - b 2048 - N '' - f / root/ . ssh/ id_rsa
ADD . / apache- maven- 3.6 .3 - bin. tar. gz / usr/ local/
ADD . / jdk1. 8.0_221 . tar. gz / usr/ local
#配置maven全局环境变量
RUN echo "export MAVEN_HOME=/usr/local/apache-maven-3.6.3 \n export PATH=\$MAVEN_HOME/bin:\$PATH:/opt/java/openjdk/bin" >> / etc/ profile
RUN echo "source /etc/profile" >> / root/ . bashrc
2. docker-compose
version: "3.5"
services:
jenkins:
image: harbor. od. com/ jenkins/ jenkins- ssh- mvnset: v2. 411
ports:
- 8081 : 8080
- 50000 : 50000
restart: "always"
container_name: jenkins
environment:
JAVA_OPTS: "-Duser.timezone=Asia/Shanghai"
JAVA_OPTS: "-server -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
# 配置访问路径,不然访问404
JENKINS_OPTS: "--prefix=/jenkins"
JENKINS_ARGS: "--prefix=/jenkins"
volumes:
- / etc/ localtime: / etc/ localtime: ro
- / docker- compose/ jenkins/ jenkins_home: / var / jenkins_home
- / var / run/ docker. sock: / var / run/ docker. sock
- / usr/ bin/ docker: / usr/ bin/ docker
- / docker- compose/ jenkins/ shell: / shell
privileged: true
3. 定时构建(类似于crontab)
分散负载应该用 ‘H 15 * * * ’ 而不是 ‘46 15 * * *
提示"H" 的意思是哈希,比如有很多工程都在同一时间去定时构建,系统认为会对负载有一定影响,使用"H" 同样
还是会生效,就是避开系统高峰期执行,如果某工程必须在某一个点执行可以用"H(30-31) 15 * * *" 来表示
4. 问题现象
当我们运行容器后,设置了定时任务但是发现执行时间于本地时间不一致,我设置17 点定时构建,
但是实际的执行是在凌晨
5. 处理方式
5.1 查看jenkins环境内容:系统管理–> 系统信息–> user.timezone查看时区为(Etc/UTC)
Etc/ UTC是协调世界时(Coordinated Universal Time)的一个时区,
也被称为格林威治平均时间(Greenwich Mean Time)或世界标准时间。
Asia/ Shanghai则是中国上海所在的时区,在东八区,UTC+ 8 (北京时间)。
Etc/ UTC时区表示的是全球的标准时间,没有时区偏移和夏令时调整,
Asia/ Shanghai时区表示的是中国上海的本地时间,在东八区,不考虑夏令时。
5.2 挂载/etc/timezone文件至容器
#需要确认宿主机的timezone时区是否东八区
[ root@zabbix jenkins] # cat / etc/ timezone
Asia/ Shanghai
#docker-compose增加挂载文件,定时构建就和本地时间保持一致了
volumes:
- / etc/ timezone: / etc/ timezone