
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
基于OpenWRT镜像的Jenkins持续集成/部署服务器,具有小体积特点,且与官方Alpine版本不同,提供glibc支持。
这是一个功能完整的Jenkins服务器,基于长期支持(LTS)版本。更多信息请访问http://jenkins.io/。
最新版本请查看https://hub.docker.com/r/mcreations/jenkins/
bashdocker run -p 8080:8080 -p 50000:50000 docker.xuanyuan.run/mcreations/jenkins
注意:关于50000端口映射的作用,请参见下文“附加构建执行器”部分。
Jenkins工作区存储在/data/jenkins_home目录,所有Jenkins数据(包括插件和配置)都保存在此目录。建议显式创建卷以方便管理和升级:
bashdocker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/data/jenkins_home docker.xuanyuan.run/mcreations/jenkins
这将在Docker主机上自动创建jenkins_home卷,该卷在容器停止/重启/删除后仍会保留。
避免将主机目录直接绑定挂载到/data/jenkins_home,这可能导致文件权限问题。如果确实需要绑定挂载,请确保主机目录对容器内的jenkins用户(uid 201)可访问,或使用-u some_other_user参数:
bashdocker run --name myjenkins -p 8080:8080 -p 50000:50000 -v /your/jenkins_home:/data/jenkins_home docker.xuanyuan.run/mcreations/jenkins
如果使用卷挂载,只需备份jenkins_home目录即可。建议将jenkins_home视为数据库来管理(在Docker中通常将数据库放在卷上)。
如果卷位于容器内,可使用docker cp $ID:/data/jenkins_home命令提取数据。注意某些操作系统上的符号链接可能会被转换为副本(这可能导致Jenkins的lastStableBuild等链接出现问题)。
更多信息请查看Docker文档的https://docs.docker.com/engine/tutorials/dockervolumes/部分。
可通过groovy脚本指定Jenkins主实例的执行器数量。默认设置为2个执行器,可扩展镜像修改为所需数量:
创建executors.groovy:
groovyimport jenkins.model.* Jenkins.instance.setNumExecutors(5)
创建Dockerfile:
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins COPY executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
默认情况下,可在主节点上运行构建。
如果需要通过JNLP(Java Web Start)附加构建从节点服务器:确保映射50000端口:-p 50000:50000,该端口用于从节点代理连接。
如果仅使用https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin,则不需要映射此端口。
可能需要自定义运行Jenkins的JVM,通常用于传递系统属性或调整堆内存设置。使用JAVA_OPTS环境变量实现:
bashdocker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com docker.xuanyuan.run/mcreations/jenkins
Jenkins日志可通过属性文件和java.util.logging.config.file Java属性配置。例如:
bashmkdir data cat > data/log.properties <<EOF handlers=java.util.logging.ConsoleHandler jenkins.level=FINEST java.util.logging.ConsoleHandler.level=FINEST EOF docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Djava.util.logging.config.file=/data/jenkins_home/log.properties" -v `pwd`/data:/data/jenkins_home docker.xuanyuan.run/mcreations/jenkins
如果要在带有前缀的反向代理后安装Jenkins(例如:mysite.com/jenkins),需添加环境变量JENKINS_OPTS="--prefix=/jenkins",然后根据使用的Apache或Nginx配置反向代理:
运行Jenkins镜像时传递的参数将被传递给Jenkins启动器,例如:
bashdocker run docker.xuanyuan.run/mcreations/jenkins --version
这将输出Jenkins版本,就像运行可执行war包一样。
也可通过JENKINS_OPTS定义Jenkins参数,这在基于官方镜像自定义派生镜像时特别有用。以下示例Dockerfile使用此选项强制使用HTTPS并包含证书:
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins:1.565.3 COPY https.pem /var/lib/jenkins/cert COPY https.key /var/lib/jenkins/pk ENV JENKINS_OPTS --httpPort=-1 --httpsPort=8083 --httpsCertificate=/var/lib/jenkins/cert --httpsPrivateKey=/var/lib/jenkins/pk EXPOSE 8083
还可通过定义JENKINS_SLAVE_AGENT_PORT更改默认从节点代理端口:
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins:1.565.3 ENV JENKINS_SLAVE_AGENT_PORT 50001
或作为docker运行参数:
bashdocker run --name myjenkins -p 8080:8080 -p 50001:50001 --env JENKINS_SLAVE_AGENT_PORT=50001 docker.xuanyuan.run/mcreations/jenkins
可将容器以root用户运行,通过opkg(OpenWRT默认包管理器)安装工具,或通过Jenkins工具安装器在构建步骤中安装,也可创建自定义Dockerfile:
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins USER root RUN opkg update && opkg install ruby make more-thing-here # 切换回常规jenkins用户 - 良好实践 USER jenkins
在派生镜像中,可通过/usr/share/jenkins/ref目录定义默认JENKINS_HOME内容:
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins COPY custom.groovy /usr/share/jenkins/ref/init.groovy.d/custom.groovy
可使用install-plugins.sh脚本下载插件及其依赖。使用插件 artifact ID(不带-plugin后缀),如需指定版本可添加:版本号。Jenkins war包中已包含的依赖仅在需要更新版本时才会下载。
dockerfileFROM docker.xuanyuan.run/mcreations/jenkins RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8
Jenkins容器启动时,会检查JENKINS_HOME是否包含引用内容,必要时复制。不会覆盖现有文件,因此通过UI升级的插件不会在下次启动时被还原。
如需覆盖现有文件,可在引用文件名后添加.override。例如,/usr/share/jenkins/ref/config.xml.override将覆盖JENKINS_HOME中的config.xml。
另请参见https://issues.jenkins-ci.org/browse/JENKINS-24986。
从现有服务器获取插件列表的示例命令:
bashJENKINS_HOST=username:password@myhost.com:port curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'|sed 's/ /:/'
示例输出:
cucumber-testresult-plugin:0.8.2 pam-auth:1.1 matrix-project:1.4.1 script-security:1.13 ...
对于2.x派生镜像,可能需要:
dockerfileRUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
以指示Jenkins安装已完全配置,否则会显示提示用户安装其他插件的横幅。
所有必要数据都存储在/data/jenkins_home目录中,升级方式取决于数据管理方式。通常,可导出数据,然后执行docker pull获取最新LTS镜像,再使用-v指向该数据目录启动,即可恢复之前的配置。
请确保熟悉Docker的卷管理!
默认情况下,如果插件未手动升级且docker镜像中的版本较新,插件将被升级。docker镜像安装的版本通过标记文件跟踪。
从未写入标记文件的docker镜像升级时,默认保留现有插件。如需升级无标记的现有插件,可使用-e TRY_UPGRADE_IF_NO_MARKER=true运行docker镜像,此时将升级为docker镜像提供的较新版本。
使用常规命令构建:
bashdocker build -t jenkins .
测试使用https://github.com/sstephenson/bats编写,位于`tests`目录:
bashbats tests
在OS X上可通过brew install bats轻松安装Bats。
如有问题,请发送邮件至***或在https://github.com/m-creations/docker-jenkins提交issue。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 mcreations/jenkins 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: