部署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,密钥就是上面的令牌
配置完成如下