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

部署Jenkins

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

shell 复制代码
#使用jenkins 镜像作为基础镜像
FROM jenkins/jenkins:lts-jdk17

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

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

# 切换回 jenkins 用户
USER jenkins

通过Dockerfile构建镜像

shell 复制代码
docker build -t jenkins-plus .

编写docker-compose.yml文件

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:

目录文件如下

shell 复制代码
├── docker-compose.yml
├── Dockerfile
├── jenkins_home
└── tool
    ├── java
    ├── maven
    ├── maven_repository

配置jdk、maven、git

选择全局系统配置

配置JDK

配置MAVEN

配置Git

配置环境变量

安装插件

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

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包

新建任务

配置git仓库出错

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

clean package -Dmaven.test.skip=true

添加凭证

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

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

jar包发送到应用服务器

需要安装插件Publish Over SSH

普通用户配置(不建议)

配置服务器地址

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

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

root用户配置

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

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

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时构建,根据自己的需求选择触发事件,我这边选择的是接受合并请求时触发

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

配置GitLab

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

配置完成如下

相关推荐
Elastic 中国社区官方博客4 小时前
使用真实 Elasticsearch 进行高级集成测试
大数据·数据库·elasticsearch·搜索引擎·全文检索·jenkins·集成测试
杨浦老苏4 小时前
开源音乐管理软件Melody
docker·群晖·多媒体
RZer5 小时前
Hypium+python鸿蒙原生自动化安装配置
python·自动化·harmonyos
杨浦老苏7 小时前
面向npm的实时仪表板Dashly
网络·docker·群晖·导航
JunLan~8 小时前
Docker 部署 GLPI(IT 资产管理软件系统)
运维·docker·容器
特立独行的猫a10 小时前
使用 Docker(Podman) 部署 MongoDB 数据库及使用详解
数据库·docker·podman
LUCIAZZZ12 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
特立独行的猫a15 小时前
Golang 应用的 Docker 部署方式介绍及使用详解
开发语言·docker·golang
康世行16 小时前
Windows环境下MaxKB大模型 Docker部署图文指南
windows·docker·容器
risc1234561 天前
【Elasticsearch】中数据流需要配置索引模板吗?
大数据·elasticsearch·jenkins