DevOps - IDEA与Docker实现CI
# 前言
在没有运维或是说开发即运维的场景中,需要持续交付一个可用的 dev 分支的后端服务给前端使用,而 Jenkins、K8S 搭建与配置都会让事情变得糟糕,而以下我要分享的使用 IDEA(JetBrains 其他产品同理)和 Docker 实现的非高可用的持续集成在开发场景下的持续集成变得得心应手。
最终结果:当后端开发完一个功能后,在 IDEA 中点击 Run
即可完成 Maven 编译、Docker 构建、切换镜像。
# IDEA 连接 Docker - Socket
注意
不推荐使用此方式,有安全问题
vim /usr/lib/systemd/system/docker.service
加入 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# IDEA 连接 Docker - SSH
# Dockerfile
运行在连接的 Docker
FROM openjdk:8
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENV SPRING_CLOUD_NACOS_CONFIG_USERNAME nacos
ENV SPRING_CLOUD_NACOS_CONFIG_PASSWORD nacos
ENV SPRING_PROFILES_ACTIVE prod
EXPOSE 20010
ENTRYPOINT ["java","-jar","./app.jar"]
FROM nginx:stable-alpine
COPY dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
// Make sure to add code blocks to your code group
- 根据实际情况在 Run 配置中添加
端口、环境变量、tag、容器name
等信息。 - 配置执行前执行 Maven 打包操作
最终只需要在部署到内开发环境时,点击 Run
即可一键 CI
# 推送仓库
项目满足上线时,需要交付镜像给运维(不存在的)或是使用云服务运行,而为此部署一套 CI 工具仍然成本很大,而且还需要和不存在的运维讨论 “为什么我的电脑可以,你就不行” 的哲学问题,而直接在开发电脑构建镜像并推送到远程仓库,直接交付镜像就没有这个问题了。
还有一个好处,本地网络上行通常比较大,推得快。
- 如果只是想推送镜像,不打算运行,把
运行构建的镜像
去掉。
- 点击
推送镜像
- 添加注册表(远程仓库)
命名空间/镜像文件:标签
- 确定(开始推送)
# 参考
上次更新: 2024/03/11, 22:37:05