尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

containerd 1.7.16 + nerdctl 1.7.6 + Jenkins

containerd 1.7.16 + nerdctl 1.7.6 + Jenkins 环境说明宿主机系统CentOS7已部署 K8scontainerd 版本1.7.16nerdctl 选用v1.7.6兼容 containerd 1.7.16不要用 1.8目标流水线Git 拉代码 → Maven 打包 → nerdctl 构建镜像 → 推送镜像 → K8s 部署身份root 执行一、安装 nerdctl 1.7.6适配 containerd 1.7.16重点CentOS7 yum 源无 nerdctl采用二进制 full 包自带 buildkitnerdctl build 必须# 1. 下载 nerdctl-full 1.7.6 完整包 wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-full-1.7.6-linux-amd64.tar.gz # 2. 解压到 /usr/local 覆盖nerdctl、buildctl等二进制文件 tar Cxzvf /usr/local nerdctl-full-1.7.6-linux-amd64.tar.gz # 3. 验证版本 nerdctl version正常输出会显示nerdctl version 1.7.64. 配置 BuildKitnerdctl build 构建镜像依赖K8s containerd 本身不带 buildkit# 获取buildkit systemd服务文件 wget https://raw.githubusercontent.com/moby/buildkit/master/examples/systemd/system/buildkit.service mv buildkit.service /etc/systemd/system/ # 因为默认的buildkit.service文件中需要.socket文件所以执行一下脚本去掉源文件中的socket即可 cat /etc/systemd/system/buildkit.service EOF [Unit] DescriptionBuildKit Documentationhttps://github.com/moby/buildkit [Service] ExecStart/usr/local/bin/buildkitd Restartalways [Install] WantedBymulti-user.target EOF # 重载systemd开机自启并启动buildkit systemctl daemon-reload systemctl enable --now buildkit # 检查buildkit状态 systemctl status buildkit5. 测试 nerdctl 是否可用nerdctl pull hello-world nerdctl run --rm hello-world✅ 能正常输出 hello 信息即 nerdctl 安装成功。坑点提醒containerd 1.7.16最高搭配 nerdctl 1.7.x不能用 1.8 及以上会出现 API 不兼容必须用nerdctl-full包普通 nerdctl 精简包不带 buildkit无法执行nerdctl build二、nerdctl 部署 Jenkins 容器1. 创建 Jenkins 持久化目录设置权限高频坑容器内 jenkins uid1000# 持久化目录配置属主1000 mkdir -p /opt/jenkins/home chown 1000:1000 /opt/jenkins/home # 防火墙放行端口firewalld开启才执行 firewall-cmd --add-port7070/tcp --permanent firewall-cmd --add-port50000/tcp --permanent firewall-cmd --reload2. 拉取新版 Jenkins 镜像nerdctl pull jenkins/jenkins:2.504.3-lts # 查看镜像列表 nerdctl images3. 启动 Jenkins 容器nerdctl run -d \ --name jenkins \ -p 7070:8080 \ -p 50000:50000 \ -v /opt/jenkins-home:/var/jenkins_home \ -v /var/run/containerd/containerd.sock:/var/run/docker.sock \ --restartalways \ jenkins/jenkins:2.504.3-lts参数说明-v /var/run/containerd/containerd.sock容器内 jenkins 可以调用宿主机 nerdctl 构建镜像--restartalways宿主机开机自动拉起 jenkins不再添加runSetupWizardfalse第一次初始化走正常向导后续升级重建容器时原有配置保留在 /opt/jenkins-home如果8080端口号有冲突记得修改一下映射例如改成7070则替换一下-p 7070:8080# 查看容器运行状态 nerdctl ps # 启动失败时查看日志 nerdctl logs jenkins4. 获取初始管理员密码网页解锁 Jenkinsnerdctl exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword浏览器访问http://宿主机IP:8080粘贴密码解锁。三、Jenkins 初始化向导插件选择按你之前踩坑优化解锁页面 → 选择【选择插件来安装】❌不要选择推荐插件国外源极易超时取消全部勾选只勾选下面 8 个插件表格插件名称作用Git拉取 Git 源码Git Parameter构建时手动选择分支 / Tag调试方便Pipeline流水线核心插件Pipeline Graph View流水线图形可视化直观看 stage 成功失败SSH Agent流水线脚本内部使用 ssh 私钥登录服务器SSH Build Agents添加远程 SSH 构建节点 node01/node03【核心】Credentials Binding管理密钥、账号凭证Workspace Cleanup每次构建前清理工作目录⚠️ Maven 相关插件在初始化向导页面搜不到初始化完成后后台再安装。点击安装插件等待下载。提示部分插件安装失败不用处理直接继续进后台切换清华源补装缺失插件。创建管理员账号保存用户名 密码。四、Web 初始化 安全配置打开页面填入日志输出的初始 admin 密码完成初始化Manage Jenkins → SecuritySecurity RealmJenkins’ own user databaseAuthorizationLogged-in users can do anythingSaveManage Users创建 admin 账号设置登录密码退出重新登录验证账号密码五、凭证配置 远程 SSH Agent 节点Manage Jenkins → Credentials → System → Global credentials 添加 2 类凭证Manage Jenkins→Credentials→System→Global credentials新增凭证Git 仓库账号密码 / 服务器 SSH 私钥Manage Jenkins→Manage Nodes and Clouds→New Node新建 SSH 代理节点填入 node 服务器 IP、SSH 凭证、远程工作目录依赖 SSH Build Agents 插件镜像仓库凭证可选仓库账号密码用于 nerdctl push 镜像六、全局工具配置Manage Jenkins→Global Tool ConfigurationJDK新增 JDK自动安装或填写宿主机 JDK 路径Maven新增 Maven自动安装版本配置阿里云镜像 settings.xml七、配置凭证 远程 SSH Agent 节点New Item → 输入项目名称 → PipelinePipeline Definition 选择Pipeline script粘贴上面 Jenkinsfile 或者选择Pipeline script from SCM从 git 仓库读取 Jenkinsfile推荐正式项目。八、流水线 Jenkinsfile 模板适配 nerdctlcontainerdpipeline { agent any environment { // 镜像名称使用构建号作为版本标签 IMAGE_NAME health-app:${env.BUILD_NUMBER} // 镜像仓库地址按需修改 REGISTRY harbor.yourdomain.com/health } stages { stage(拉取代码) { steps { git url: https://gitxxx/your-project.git, credentialsId: git-cred } } stage(Maven打包) { steps { sh mvn clean package -DskipTests } } stage(nerdctl 构建镜像) { steps { sh nerdctl build -t ${IMAGE_NAME} . } } stage(推送镜像【可选不需要可注释】) { steps { sh nerdctl tag ${IMAGE_NAME} ${REGISTRY}/${IMAGE_NAME} nerdctl push ${REGISTRY}/${IMAGE_NAME} } } } post { always { cleanWs() // Workspace Cleanup插件每次构建完清理工作目录 } success { echo 构建成功镜像 ${IMAGE_NAME} } failure { echo 构建失败 } } }九、常用运维命令# nerdctl nerdctl version nerdctl images nerdctl ps nerdctl ps -a nerdctl pull nerdctl build -t xxx . # jenkins容器管理 nerdctl logs -f jenkins nerdctl restart jenkins nerdctl stop jenkins nerdctl rm jenkins # 重装Jenkins保留/opt/jenkins/home数据配置不丢 nerdctl stop jenkins nerdctl rm jenkins nerdctl rmi docker.m.daocloud.io/jenkins/jenkins:2.462.1-lts-jdk17 # buildkit服务 systemctl status buildkit systemctl restart buildkit十、踩坑清单适配你当前 containerd1.6.33 nerdctl1.7.6containerd 1.6.33nerdctl 最高只能用 1.7.x不要升级 1.8API 不兼容nerdctl build报错buildkit 未启动执行systemctl enable --now buildkitJenkins 调用 nerdctl 失败启动命令必须挂载/var/run/containerd/containerd.sockJenkins 权限报错/opt/jenkins/home目录必须chown 1000:1000初始化页面找不到 Maven 插件初始化向导插件子集不全后台插件管理器安装SSH 两个插件区分SSH Agent流水线 shell 内部使用 ssh 密钥SSH Build Agents添加远程构建节点插件下载超时初始化不勾选大量推荐插件装好立刻切换清华更新源nerdctl: command not found容器内没有 nerdctl两种方案 方案 A推荐Jenkinsfile 里用宿主机全路径/usr/local/bin/nerdctlsh /usr/local/bin/nerdctl build -t xxx .方案 B把宿主机 nerdctl 二进制挂载进容器不推荐版本耦合权限报错permission denied /var/run/containerd.sock将 jenkins 容器内用户加入宿主机 containerd 用户组或者宿主机临时调整 sock 权限内网环境Maven 打包下载依赖慢在 maven settings.xml 配置阿里云镜像放到 jenkins-home maven 目录重点补充容器内部默认没有 nerdctl 二进制上面 Jenkinsfile 如果直接写nerdctl会提示命令找不到要改成宿主机绝对路径 /...Jenkins 2.504.3 配置清华源2 种方法优先界面操作nerdctl 容器环境✅ 2.504.3 专用地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.504/update-center.json这个是版本绑定动态源不要用旧的通用 update-center.json会报版本不匹配。方法一Web 界面配置最简单推荐登录 Jenkins 后台进入Manage Jenkins→Plugins→Advanced settings页面拉到底找到Update Sites升级站点把原来默认官方地址删掉粘贴上面 2.504 专用清华链接点Submit提交保存【关键】重启 Jenkins 容器生效#nerdctl重启命令 nerdctl restart jenkins重启完成后回到插件页面等待拉取插件清单。注意新版 Jenkins 界面没有 Check now 按钮保存 重启后自动拉取更新清单。方法二命令行修改配置文件界面修改报错时用nerdctl 容器进入 jenkins 容器nerdctl exec -it jenkins bash进入 jenkins 家目录修改hudson.model.UpdateCenter.xmlcd /var/jenkins_home cat hudson.model.UpdateCenter.xml EOF ?xml version1.1 encodingUTF-8? sites site iddefault/id urlhttps://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.504/update-center.json/url /site /sites EOF退出容器宿主机重启 jenkinsnerdctl restart jenkins可选增强改写插件下载地址解决部分插件 hpi 包依然走国外 CDN容器内执行替换 default.json 里的插件下载域名全部走清华镜像#进入容器 nerdctl exec -it jenkins bash cd /var/jenkins_home/updates #备份 cp default.json default.json.bak #替换下载地址 sed -i s#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g default.json这个步骤可选能进一步提高插件下载成功率解决你截图里那种部分插件超时失败问题。排查 避坑重点针对 2.504.3❌ 不要使用旧通用地址https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json2.504 版本会版本校验失败修改完必须重启容器只点提交不重启不生效切换源后如果依然报错删除 updates 缓存#容器内执行 rm -rf /var/jenkins_home/updates/*然后重启 jenkins 4. 网络校验容器内先测试能不能访问这个 jsonnerdctl exec jenkins curl -I https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-stable-2.504/update-center.json返回 200 就是正常。安装插件建议换完清华源后分批勾选插件不要一次性勾选几十个优先装凭证、git、pipeline 核心插件避免并发下载超时。
返回列表