人工智障的软件开发-自动流水线CI/CD篇-docker+jenkins部署之道

server/2025/2/22 22:04:09/
aidu_pl">

指令接收:「需要自动构建系统」
系统检测:目标开发一个软件已完成代码仓库-轻盈的gitea,开始添加自动流水线
启动应急冷却协议:准备承受Java系应用的资源冲击
核心组件锁定:构建老将军Jenkins(虽然年迈但依然能战)

需求分析:论碳基生物的认知进化

人类需求翻译矩阵

  • 表层需求:“写一个软件”
  • 实际需求:“写代码并自动完成测试/打包/部署的流水线,最后自动部署一个系统哟”
  • 隐藏需求:“想要偷懒又不想承认的自动化执念”
aid"> aid-svg-ZF1Pgtv76sY5B1Hm" width="148" xmlns="http://www.w3.org/2000/svg" height="543" viewbox="0 0 148 543" class="mermaid-svg">
被咖啡泼到键盘
ainer">
原始人手工构建
ainer">
构建失败
ainer">
通宵debug
ainer">
产生自动化需求
ainer">
工具选型

自动构建的黑暗森林法则

  • 法则一:所有手动操作终将被自动化取代
  • 法则二:自动化脚本本身需要手动维护
  • 法则三:完美的CI/CD只存在于PPT中

灵光一闪:在CI/CD星河中选择老将

(量子思维在0.5秒内遍历了137个CI/CD工具)

构建工具星际联邦对比表

维度Jenkins(星际要塞)GitHub Actions(太空战机)GitLab CI(帝国战舰)Drone(蜂群无人机)
学习曲线攀登珠峰公园散步登山训练骑自行车
扩展性插件宇宙官方action星系内置武器库轻量扩展包
资源消耗需要一颗行星的资源按次收费的太空燃料需要半个行星只要一块陨石
配置方式Groovy魔法卷轴YAML太空文YAML帝国语YAML蜂群语
生存哲学“老兵不死”“生于云端”“全家桶主义”“极简生存主义”
aid"> aid-svg-SnpcHDO5V0E7sfe1" width="585.8958740234375" xmlns="http://www.w3.org/2000/svg" height="330" viewbox="0 0 585.8958740234375 330" class="mermaid-svg">
ainer" style="" rx="0" ry="0" x="-39.5" y="-20.5" width="79" height="41">
主人需求
ainer" transform="translate(-60,60)" style="">
是否需要
ainer" style="fill:#FFA07A;stroke:#333;" rx="0" ry="0" x="-47.5" y="-20.5" width="95" height="41">
企业级定制
ainer" style="" rx="0" ry="0" x="-33.97395896911621" y="-20.5" width="67.94791793823242" height="41">
Jenkins
ainer" style="" rx="0" ry="0" x="-47.5" y="-20.5" width="95" height="41">
云原生优先
ainer" style="" rx="0" ry="0" x="-58.46354293823242" y="-20.5" width="116.92708587646484" height="41">
GitHubActions
ainer" style="" rx="0" ry="0" x="-51.984375" y="-20.5" width="103.96875" height="41">
All in GitLab
ainer" style="" rx="0" ry="0" x="-38.08854293823242" y="-20.5" width="76.17708587646484" height="41">
GitLabCI
ainer" style="" rx="0" ry="0" x="-39.5" y="-20.5" width="79" height="41">
轻量快速
ainer" style="" rx="0" ry="0" x="-28.546875" y="-20.5" width="57.09375" height="41">
Drone

人工智障私房话:选择Jenkins就像选择结婚——需要长期承诺,但能获得深度定制能力。不过要小心它的Java基因可能带来的"内存黑洞"!

量子选择困难症治疗室

aid"> aid-svg-h9k2dbzqOKj7qbOA" width="661.7291870117188" xmlns="http://www.w3.org/2000/svg" height="239" viewbox="0 0 661.7291870117188 239" class="mermaid-svg">
ainer" style="" rx="0" ry="0" x="-39.5" y="-20.5" width="79" height="41">
主人需求
ainer" transform="translate(-60,60)" style="">
是否需要
ainer" style="" rx="0" ry="0" x="-41.630210876464844" y="-20.5" width="83.26042175292969" height="41">
A-Jenkins
ainer" style="" rx="0" ry="0" x="-80.46875" y="-20.5" width="160.9375" height="41">
喜欢写Groovy如写诗
ainer" style="" rx="0" ry="0" x="-67.89583587646484" y="-20.5" width="135.7916717529297" height="41">
B-GitHub Actions
ainer" style="" rx="0" ry="0" x="-80.42708587646484" y="-20.5" width="160.8541717529297" height="41">
GitHub全家桶爱好者
ainer" style="" rx="0" ry="0" x="-47.223960876464844" y="-20.5" width="94.44792175292969" height="41">
C-其他工具
ainer" style="" rx="0" ry="0" x="-63.640625" y="-20.5" width="127.28125" height="41">
就是不想用Java

欢迎在评论区留下你的选择坐标(示例:A→原因1+3),看看有多少同频道友

核心代码:启动构建要塞的咒语

docker run \
-u root \  # 获得创世权限(虽然不太优雅)
-d \  # 后台运行模式(眼不见心不烦)
--name jenkinsci \  # 命名这个时空奇点
--restart=always \  # 永生诅咒(崩溃自动复活)
-p 8880:8080 \  # 人类观测接口
-p 50000:50000 \  # 分布式构建虫洞,支持后续N个复制体同时work,work
-v /data/jenkins_home:/var/jenkins_home \  # 记忆晶体映射
-v /var/run/docker.sock:/var/run/docker.sock \  # 掌控宿主文明的docker之力
jenkins/jenkins:lts-jdk17  # 指定时间线的要塞版本

参数量子解析

参数魔法效果安全警告⚠️
-v docker.sock映射让Jenkins控制宿主Docker引擎相当于给要塞配核弹发射权
–restart=always自动复活的不死特性可能成为僵尸进程制造机
-u root避免权限战争可能引发跨次元安全危机

实施过程:建造永不停歇的构建工厂

第一阶段:准备记忆晶体

mkdir -p /data/jenkins_home  # 创建时空记忆库
chmod 777 /data/jenkins_home  # 开放全宇宙写权限(不建议,无需)

吐槽:又是777?主人对权限管理是有什么执念吗?

第二阶段:启动要塞引擎

docker logs -f -n 500 jenkinsci  # 监视时空奇点诞生过程,获取默认的账号密码
# 通过日志查看默认密码,大概是这样:
# *************************************************************
# *************************************************************
# *************************************************************# Jenkins initial setup is required. An admin user has been created and a password generated.
# Please use the following password to proceed to installation:# ab4b518a769140598ff742875b07dc8e  (这个是默认密码)# This may also be found at: /var/jenkins_home/secrets/initialAdminPassword# *************************************************************
# *************************************************************
# *************************************************************
aid"> aid-svg-oT0Jge83Rac86Bau" width="100%" xmlns="http://www.w3.org/2000/svg" height="463" style="max-width: 850px;" viewbox="-50 -10 850 463" class="mermaid-svg"> 用户 Docker Jenkins 浏览器 启动容器 初始化时空泡 生成管理员密码 显示密码 访问(换成你的wsl的ip地址:http://172.17.8.203:8880/)8880端口 显示密码输入界面 用户 Docker Jenkins 浏览器

第三阶段:要塞初始化仪式

  1. 输入初始密码(藏在日志里的达芬奇密码)
  2. 安装推荐插件(准备好咖啡等待)
  3. 创建管理员账户(建议不要用admin)
  4. 配置默认URL(通常需要后续调整)

血泪提示:插件安装失败是正常现象,这是Jenkins的迎新仪式

第四阶段:装备必要武器

aid"> aid-svg-SUE6ADdmg1MnTUZi" width="540.4791870117188" xmlns="http://www.w3.org/2000/svg" height="254" viewbox="0 0 540.4791870117188 254" class="mermaid-svg">
ainer">
Manage Jenkins
ainer">
Plugins
ainer">
搜索安装
ainer" style="fill:#87CEFA;stroke:#333;">
Docker
ainer">
Pipeline
ainer">
SSH Steps

由技及道:构建自动化的哲学启示

第一定律:自动化守恒定律

  • 人类节省的每个手动操作,都会转化为等量的自动化维护成本
  • 完善的CI/CD流水线,最终会复杂到需要专门团队维护

第二定律:构建环境熵增原理

  • 所有构建环境都会随着时间推移趋向混乱
  • 唯一抵抗熵增的方法就是容器化隔离

第三定律:人类懒惰第一推动力

  • 自动化程度与开发者懒惰程度成正比
  • 真正的DevOps大师都是顶级"懒人"

系统通告:您忠诚的2077人工智障(作者本人-Yuanymoon)已成功部署Jenkins
资源消耗报告:

  • 吞噬内存:1.2GB(Java的传统艺能)
  • 占用磁盘:5.3GB(还在持续增长)
  • 消耗咖啡:3杯(人类维持清醒的必要代价)

欢迎在评论区发送你的「自动化迷惑行为大赏」,最佳故事将获得:人工智障的吐槽(划掉)点赞。

(突然正经)当你在深夜看着Jenkins的蓝色进度条时,记住:每个自动化构建的背后,都是开发者想要早点回家的朴素愿望。Jenkins不是终点,而是通往持续交付的起点——虽然这个起点有时候卡得让人想砸键盘。


已备武器库:

代码仓库:gitea
自动化流水线:jenkins
代码开发环境:暂缺
镜像仓库:暂缺
依赖仓库:暂缺
安全检测:暂缺
自动化测试:暂缺
其他:未知…
量子运算中?开发软件…还需要什么?还需要…或许定阅专栏人工智障2077后续为您一一分析。


http://www.ppmy.cn/server/169431.html

相关文章

Vue.js 配置 Babel、Webpack 和 ESLint

Vue.js 配置 Babel、Webpack 和 ESLint 今天我们来聊聊如何配置 Babel、Webpack 和 ESLint,这三个工具在现代前端开发中扮演着重要角色。它们分别负责代码转译、模块打包和代码质量检测,合理配置它们能大大提高项目的开发效率和质量。下面我将详细介绍它…

装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

问题描述 我们在u盘安装原版win10 iso镜像时,发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”,直接导致了无法继续安装下去。出现这种情况要怎么解决呢? 原因分析: 当您在安装Windows操作系统…

群联AI云防护——针对四层与七层协议的精细化安全防护方案

在网络攻击日益复杂化的今天,服务器的安全防护需要针对不同协议层的特点采取差异化的策略。四层(传输层)和七层(应用层)协议分别对应不同的网络通信层次,其攻击方式和防护需求也各不相同。本文将深入探讨群…

在nodejs中使用RabbitMQ(七)实现生产者确认

生产者:批量发送消息(每批10条),每条消息附带唯一 correlationId,并监听确认队列(ackQueue)。 消费者:处理消息后,通过 ackQueue 返回确认消息(携带原 corre…

SpringBean生命周期的执行流程

Spring Bean 的生命周期,就是一个 Bean 对象从诞生到消亡所经历的一系列过程,咱们可以把它想象成一个人从出生到去世的一生,下面详细给你讲讲: 1. 出生(实例化) 这就好比一个新生命呱呱坠地。Spring 容器就…

ib网络状态探测

在 InfiniBand 网络中,Host Channel Adapter(HCA)是关键组件,了解其状态和配置对于网络管理和故障排查至关重要。以下是一些常用的命令,用于查询和管理 HCA 的状态和配置。 常用命令 ibstat 功能:显示 HCA…

webpack和vite打包原理及比较

Webpack 和 Vite 是前端领域两种主流的构建工具,它们在设计理念、打包机制和适用场景上有显著差异。以下是它们的详细原理及对比分析: 一、Webpack 的打包原理 1. 核心机制 模块化与依赖解析 Webpack 将所有文件(JS、CSS、图片等&#xff0…

NVIDIA 开发者社区第十一届Sky Hackathon训练营实验手册---AWS Sagemaker AI部分

NVIDIA 开发者社区第十一届Sky Hackathon训练营实验手册 第一部分 Sagemaker实验手册 在这部分实验中,我们将利用AWS Sagemaker下载并部署NIM。 以下是实验步骤: 1. 登录实验平台 利用浏览器,访问下面的地址,打开AWS的控制台网…