当前位置: 首页 > article >正文

Jenkins + GitLab + Docker实现自动化部署(Java项目)

部署Jenkins

因为Jenkins需要用到git、jdk、maven,后两者我们采取挂载的方式,git采用直接在容器中安装的方式,所以我们要做一个增强版的Jenkins镜像,编写Dockerfile文件

#使用jenkins 镜像作为基础镜像
FROM jenkins/jenkins:lts-jdk17

# 切换到 root 用户以安装软件
USER root

# 安装 Git 和必要的依赖库
RUN apt-get update && \
    apt-get install -y git libncurses5

# 切换回 jenkins 用户
USER jenkins

通过Dockerfile构建镜像

docker build -t jenkins-plus .

编写docker-compose.yml文件

version: '3'
services:
  jenkins:
    image: jenkins-plus:latest
    container_name: jenkins
    user: root
    privileged: true
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - /root/jenkins/jenkins_home:/var/jenkins_home
      - /root/jenkins/tool:/tool
    restart: always

volumes:
  jenkins_home:

目录文件如下

├── docker-compose.yml
├── Dockerfile
├── jenkins_home
└── tool
    ├── java
    ├── maven
    ├── maven_repository

配置jdk、maven、git

选择全局系统配置

image-20241024153241656

配置JDK

image-20241024153303742

配置MAVEN

image-20241024153416121

配置Git

image-20241024153357364

配置环境变量

image-20241024153532271

安装插件

插件可以选择默认的,我先是没安装插件,后来网上搜到的安装,我是把下面的插件都安装了,也有部分没用到,大家酌情安装

Git Plugin: 用于从 Git 仓库中拉取代码。

GitLab Plugin: 允许 Jenkins 与 GitLab 集成。通过配置 Webhook,GitLab 可以在代码合并后通知 Jenkins 触发构建。它支持 GitLab 的 Merge Request、Push、Pipeline 状态通知等操作。

GitLab API Plugin: 这个插件允许 Jenkins 调用 GitLab 的 API 来获取项目、分支和 Merge Request 的状态,用于精确触发。

GitLab Authentication plugin:GitLab认证

Docker Plugin: 允许 Jenkins 与 Docker 进行交互,可以创建和管理 Docker 容器,支持运行在 Docker 容器中的任务。

Docker Compose Build Step Plugin: 通过这个插件,你可以在 Jenkins 中使用 docker-compose 来管理多容器部署,直接调用 Docker Compose 命令来启动或停止容器。

Docker Pipeline Plugin: 如果使用 Jenkins Pipeline,可以通过此插件轻松定义基于 Docker 的构建和部署步骤。

Pipeline Plugin: 允许使用 Jenkins Pipeline 脚本(包括声明式和脚本式 Pipeline)定义复杂的构建流程。

Localization:Chinese(Simplified):中文语言包汉化插件

Publish Over SSH:通过 SSH 执行远程命令,适用于远程服务器部署

Maven Integration Plugin: 如果使用 Maven 构建项目,安装这个插件以便 Jenkins 支持 Maven 项目构建。

NodeJS Plugin: 如果你的项目包含前端应用,可以使用此插件来安装和管理 Node.js 版本。

构建Jar包

新建任务

image-20241023144036024

配置git仓库出错

image-20241023144137986

配置每次build前先清除jar包,并且跳过test

clean package -Dmaven.test.skip=true

image-20241023160805577

添加凭证

image-20241023144355760

选择自己的认证方式,我用的用户名密码

image-20241023144423702

配置完之后,直接选择构建,发现已经把jar包构建好了

image-20241023145220471

jar包发送到应用服务器

需要安装插件Publish Over SSH

普通用户配置(不建议)

配置服务器地址

image-20241023152723698

修改任务,在构建运行后通过 SSH 发送文件或执行命令,这里有一个坑

如果用普通用户登录的话,例如我是jenkins用户,只能操作/home/jenkins下的文件夹,然后下图配置传输地址/app/test实际上是/home/jenkins/app/test,并且执行docker命令也需要加权限,建议使用root用户

image-20241024105355067

root用户配置

配置服务器地址,Remote Directory为空是直接指向登录的文件夹,root用户是/root

image-20241024110918764

配置任务执行后发送jar包并且重启docker容器,这里的Remote directory配置后也是跟系统配置相同,指向/root/app/demo

image-20241024111109168

docker-compose -f /root/app/demo/docker-compose.yml  down
docker-compose -f /root/app/demo/docker-compose.yml  up -d

整合GitLab

目的:通过gitlab合并分支触发jenkins自动化部署Java项目

构建触发器

安装GitLab Plugin插件,选择推送到gitlab时构建,根据自己的需求选择触发事件,我这边选择的是接受合并请求时触发

image-20241024151802198

其他都默认,这边配置触发分支,我选择的是合并到uat分支时触发请求,另外生成密钥,配置gitlab中webhook会用到

image-20241024151723687

配置GitLab

这里的url对应着webhook的url,密钥就是上面的令牌

image-20241024152019744

配置完成如下

image-20241024152248507


http://www.kler.cn/news/364514.html

相关文章:

  • 软考(中级-软件设计师)计算机系统篇(1024)
  • 【Javaee】网络原理—TCP协议的核心机制
  • 新鲜出炉面试题之【说说spring spring MVC spring boot的区别】
  • Python poetry 虚拟环境
  • 软件设计师:软件工程
  • Python入门(二)编程中的“真”与“假”,单双向选择的判断
  • 深入了解 Pandas 中的数据:Series 和 DataFrame 的使用指南
  • 借助栈逆置单链表
  • 基于YOLOv8深度学习的高密度人脸智能检测与统计系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测
  • 【golang】学习文档整理
  • OpenFace安装教程及踩坑记录 (Ubuntu20.04—2024.10.24)
  • ElasticSearch全文检索和倒排索引
  • 杂项笔记
  • 100种算法【Python版】第8篇——群体智能优化算法之人工蜂群算法
  • Docker容器的基础镜像:构建现代应用程序的基石
  • PYTHON实现麦克风实时传流语音听写
  • verilog函数和任务
  • 跳表:数据结构中的“快速通道”
  • 内容安全与系统构建加速,助力解决生成式AI时代的双重挑战
  • c# lambda表达式基础语法
  • java基础day04:方法(函数),练习
  • Android原生ROM出现WIFI显示网络连接受限,网络无法连接的问题
  • 一个vue3的待办列表组件
  • 【如何使用git将自己注释不上传到git服务器】
  • 博客搭建之路:hexo搜索引擎收录
  • pyflink 时序异常检测——PEWMA