Jenkins+Docker+Harbor全链路CI/CD重温笔记

前言

大环境不好,公司业务量也下降了。几个大项目都延期了,该上线的都online了,能先准备的基本都准备了,应该也再没有技术创新落地的点了。基本其他操作就开始了,实在是没有用武之地了,不如留下美好。

今天纯粹是笔记。

docker磁盘占用清理

注意:清理前备份重要容器/数据!运行中的容器会中断。

如果出现"出现open /var/lib/docker/tmp/xxx: no space left on device",那就是要清理了,或者加盘。

  • 停止所有容器(避免数据丢失)
bash 复制代码
docker stop $(docker ps -q) 
  • 删除所有停止的容器(释放容器层空间)
bash 复制代码
docker container prune -f    # -f 强制,不问你
  • 删除未使用的镜像(镜像超级占空间)
bash 复制代码
docker image prune -a -f     # -a 删除所有未用镜像,-f 强制
  • 删除未使用的卷(Volumes)(数据持久化卷常堆积)
bash 复制代码
docker volume prune -f       # 删除所有未用卷
  • 清理构建缓存(Build Cache 常吃大头)
bash 复制代码
docker builder prune -a -f   # 删除所有构建缓存
  • 一键全清理(懒人福音,释放最多空间)
bash 复制代码
docker system prune -a -f --volumes

-a:删除所有未用资源

--volumes:连卷一起删

警告:这会删掉所有停止的容器、未用镜像、卷、缓存!运行前确认。

  • 检查清理效果
bash 复制代码
docker system df
df -h
复制代码
应该看到可用空间大幅增加!

预防未来 100%(超级实用)

  • 定期清理:每周跑一次 docker system prune -f

  • 设置自动清理:在 Dockerfile 或 compose 文件里加 --no-cache 构建镜像。

  • 监控工具:安装 docker stats 或 watch -n 10 "docker system df" 实时看空间。

  • 限制镜像大小:用 docker image prune 的 cron 任务(比如 crontab 加 0 0 * * * docker system prune -f)。

拉取镜像报源的问题

  • Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

    首先要说的是国内很多镜像源可能用着用着就停了,所以docker引擎的全局镜像源可能得过段时间就问问AI,会告诉你最新的。

  • 更换源

bash 复制代码
vim /etc/docker/daemon.json

会看到

yaml 复制代码
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://hub-mirror.c.163.com",
    "https://docker.1ms.run",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "insecure-registries": ["192.168.0.36:8090"],
  "debug": false
}
  • mirrors就是要修改的地方,这里也并不是配置的越多越好的哦。

  • 如果说懒得改,那你还是可以自己一个个先pull下来的,然后你再启动的时候docker-compose后面带--ignore xx忽略就行

bash 复制代码
docker-compose pull --ignore-pull-failures && \
docker-compose up -d

jenkins通过命令登录harbor报https异常

我是jenkinsfile里有登录harbor逻辑。

报错:docker login -u harbor用户名 -p 密码 192.168.0.36:8090,在jenkins容器里,登录docker部署的harbor报错Error response from daemon: Get "https://192.168.0.36:8090/v2/": http: server gave HTTP response to HTTPS client

只需要在/etc/docker/daemon.json的insecure-registries增加harbor的请求地址就行(如上)。

docker里from openjdk异常

  • 修改:FROM eclipse-temurin:21-jdk

这个是可以平替的,而且据说更稳。

jenkins忘记密码处理

我这里其实不是忘记了密码,而是jenkins抽风,自己升级了新版本导致的。反正现象就是原账号密码登录不进去了,我这里是2.528.2版本了。

先声明/usr/local/docker/jenkins_docker/data这个data目录千万不能删除,否则,原先配置的项目啥的都找不回来了。(docker的美妙也在这,不管你cocker-composecocker-compose里拉什么版本的镜像,只要你不删除data,所有东西都还在,不会丢失)

备份并修改 config.xml(一键命令,禁用安全):

备份

bash 复制代码
cp config.xml config.xml.bak
  • 一键把 useSecurity 改成 false(新版 2.5xx 兼容)
bash 复制代码
sed -i 's|<useSecurity>true</useSecurity>|<useSecurity>false</useSecurity>|' config.xml
  • 顺便删掉授权和安全域(彻底无密码,2.5xx 必须的)
bash 复制代码
sed -i '/<authorizationStrategy/,/<\/authorizationStrategy>/d' config.xml
sed -i '/<securityRealm/,/<\/securityRealm>/d' config.xml

注意也可能需要处理users.xml

备份一下(防万一)

bash 复制代码
cp users/users.xml users/users.xml.bak

直接删掉它

bash 复制代码
rm -f users/users.xml

重启容器让修改生效(数据瞬间加载):

bash 复制代码
cd /usr/local/docker/jenkins_docker
docker-compose restart jenkins

浏览器访问: 打开 http://你的服务器IP:8081直接就能进主页了!(无需账号密码)看到你的所有项目都在,完美。

  • 进去后立刻重置(别忘了这一步)点左边 Manage Jenkins → Manage Users(或 People),重新建用户/或者先允许注册。
  • 搞好用户后,再次进去后立刻恢复安全(别忘了,防止别人乱进):
  • 点左边 Manage Jenkins → Security(或 Configure Global Security)
  • 勾选 启用安全(Enable security)
  • 选择 Jenkins' own user database(Jenkins 专有用户数据库)
  • 勾上 Allow users to sign up(允许用户注册) → 保存

最后,发一次版本:

熟悉的success都回来了。

总结

  • 这纯粹就是笔记备忘,也是再一次回顾了容器化部署这一套。
  • 说实话好久没玩这一套了,还是真有点忘记了,很多东西也有更新。
  • 之前很长一段时间没有具体搞容器化自动化部署一套了,因为有专门的大哥搞,我们开发就卷自己的架构、开发能力就行。
  • 我也是信奉专门的人干专门的事,兄弟们都有口饭吃。
  • 最后还不得不说下,离开的运维兄弟还是强啊,这一套还是有点意思。
  • 就是公司的资源太紧张了,磁盘才2T,有点捉襟见肘啊,还是奉劝大家有资源才玩吧。
    好了,就写到这里,希望能帮到大家!
相关推荐
weixin_307779131 小时前
Jenkins Matrix Authorization Strategy插件:详解与应用指南
运维·开发语言·架构·jenkins
知识分子_1 小时前
CICD:jenkins pipeline搭建项目流水线,遇到的问题和方案
运维·jenkins
AI云原生2 小时前
《开箱即用的高性能:openEuler 默认配置下的 Web 服务性能评测》
运维·前端·docker·云原生·开源·开源软件·开源协议
weixin_307779132 小时前
Jenkins Pipeline Graph View插件:可视化流水线的核心工具
运维·开发语言·架构·jenkins
卓码软件测评2 小时前
Gatling WebSocket测试支持:ws、wsConnect、sendText、checkTextMessage详解
网络·websocket·网络协议·测试工具·ci/cd·自动化
天才测试猿2 小时前
Jmeter命令行压测&生成HTML测试报告
软件测试·测试工具·jmeter·职场和发展·jenkins·测试用例·压力测试
jingshaoqi_ccc16 小时前
ubuntu 24下面安装docker
ubuntu·docker·eureka
jason成都17 小时前
elasticsearch部署时创建用户密码
大数据·elasticsearch·jenkins
关关长语17 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker