文章目录
- 1.宿主机安装maven
- 2.安装jenkins
- 3.配置Jenkins
- 4.Jenkins脚本
- 自动安装JDK(可选)
1.宿主机安装maven
wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
mv apache-maven-3.9.9-bin.tar.gz /usr/local
tar -xzf apache-maven-3.9.9-bin.tar.gz
下载地址:https://maven.apache.org/download.cgi
配置环境变量vi /etc/profile
# 在文件末尾添加如下信息
export MAVEN_HOME=/usr/local/apache-maven-3.9.9
export PATH=${PATH}:${MAVEN_HOME}/bin
重启环境变量
# 重启环境变量,使之生效
source /etc/profile
执行以下命令检查 Maven 是否安装成功
mvn -v
配置 Maven本地仓库
# 新建本地仓库目录
cd /usr/local/apache-maven-3.9.9
mkdir repository
# 编辑 settings.xml 文件
vi /usr/local/apache-maven-3.9.9/conf/settings.xml
# 找到 <localRepository> 标签,取消注释并设置路径:
<localRepository>/usr/local/apache-maven-3.9.9/repository</localRepository>
2.安装jenkins
创建目录
# 创建Jenkins目录文件夹
mkdir -p /var/jenkins_home
# 设置权限
chmod 777 -R /var/jenkins_home
运行命令
docker run -d \
-p 8080:8080 -p 50000:50000 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v /usr/local/apache-maven-3.9.9:/usr/local/apache-maven-3.9.9 \
-v /usr/local/apache-maven-3.9.9/repository:/usr/local/apache-maven-3.9.9/repository \
-v /etc/localtime:/etc/localtime \
-u root \
--name jenkins \
jenkins/jenkins:2.440.1-jdk17
解释:
-p 8080:8080
: 映射 Jenkins 的 Web 服务端口到宿主机。-p 50000:50000
: 映射 Jenkins 的代理连接端口。-v /var/jenkins_home:/var/jenkins_home
: 映射 Jenkins 的工作目录,持久化数据。-v /var/run/docker.sock:/var/run/docker.sock
: 映射宿主机的 Docker 套接字,允许容器内使用 Docker。-v $(which docker):/usr/bin/docker
:- 将宿主机上的 Docker CLI(二进制文件路径,通过
$(which docker)
动态获取)挂载到容器内的/usr/bin/docker
。 - 容器内的 Jenkins 可以直接调用宿主机的 Docker CLI。
- 将宿主机上的 Docker CLI(二进制文件路径,通过
- 挂载 Maven和本地仓库
-v /etc/localtime:/etc/localtime
: 将宿主机的本地时间挂载到容器内,确保容器内的时间与宿主机一致。-u root
:- 指定容器内以
root
用户运行。 - Jenkins 默认以
jenkins
用户运行,但在某些情况下(如访问宿主机的 Docker),需要更高权限。
- 指定容器内以
进入容器并验证Docker命令
docker exec -it jenkins bash
docker ps
3.配置Jenkins
获取初始密码
docker logs jenkins
复制日志中的密码,然后访问 Jenkins Web 界面:
- 地址:http://localhost:8080
配置 Jenkins
-
登录 Jenkins。
-
按照提示安装推荐插件。
-
Maven配置
-
JDK配置
http://localhost:8080/manage/configureTools/
1.顶部的Maven
,我们选择文件系统中的setting
文件
2.Maven
节点,点击新增Maven
,起一个名字,然后指定maven路径
,去掉自动安装
的选项,然后应用>保存
:
4.Jenkins脚本
新建任务 ->选择流水线
pipeline {
agent any
environment {
// 环境变量,可以方便管理
imageBaseName = "laker-test"
timestamp = new Date().format("yyyyMMddHHmmss")
// laker-test:20241210092411
imageName = "${imageBaseName}:${timestamp}"
healthCheckUrl = "http://10.2.2.2:8089/actuator/health"
dbUser = 'root'
dbPassword = '123456'
dbUrl = 'jdbc:mysql://10.2.2.2:3306/easy-admin?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true'
}
tools {
// 指定在 Jenkins 上配置的 Maven 工具名
maven 'Maven-3.9.9' // Maven 配置名称,根据你在 Jenkins 配置中定义的工具名来调整
}
stages {
stage('Checkout') {
steps {
// 从Gitee仓库获取代码 git 'https://gitee.com/lakernote/easy-admin.git'
git branch: 'springboot3', url: 'https://gitee.com/lakernote/easy-admin.git'
}
}
stage('Build') {
steps {
// 输出环境变量供调试使用
sh 'echo $MAVEN_HOME'
sh 'echo $PATH'
sh "java -version"
// 使用 Maven 构建项目
sh 'mvn clean package -DskipTests' // 跳过测试,加速构建
}
}
stage('Build Docker Image') {
steps {
// 构建 Docker 镜像
script {
sh "docker build -t ${imageName} ."
}
}
}
stage('Run Docker Container') {
steps {
script {
// 停止并删除可能已存在的容器,避免冲突
sh '''
if [ "$(docker ps -aq -f name=laker-test)" ]; then
docker stop laker-test || true
docker rm laker-test || true
fi
'''
// 启动新的容器
sh """
docker run -d --name laker-test \
-e SPRING_DATASOURCE_USERNAME='${dbUser}' \
-e SPRING_DATASOURCE_PASSWORD='${dbPassword}' \
-e SPRING_DATASOURCE_URL='${dbUrl}' \
-p 8089:8080 ${imageName}
"""
}
}
}
stage('Health Check') {
steps {
script {
def maxRetries = 5
def waitTime = 4 // seconds
echo "Health Check URL: ${healthCheckUrl}"
for (int i = 0; i < maxRetries; i++) {
try {
echo "Health Check Attempt ${i + 1}: Checking ${healthCheckUrl}..."
def status = sh(
script: "curl -s -o /dev/null -w '%{http_code}' ${healthCheckUrl}",
returnStdout: true
).trim()
echo "HTTP Status Code: ${status}"
if (status == '200') {
echo "Health check passed!"
break
} else {
echo "Health check failed with status ${status}. Retrying in ${waitTime} seconds... (${i + 1}/${maxRetries})"
}
} catch (Exception e) {
echo "Error during health check: ${e.getMessage()}"
}
if (i < maxRetries - 1) {
sleep(waitTime)
} else {
error "Health check failed after ${maxRetries} retries."
}
}
}
}
}
}
post {
always {
// 清理工作
echo 'Pipeline 执行完成,开始清理工作...'
//sh 'docker image prune -f'
//sh 'docker system prune -a -f'
// 获取镜像列表并保留最近的 3 个镜像
sh """
docker images --filter=reference="${imageBaseName}:*" --format "{{.ID}}" | tail -n +4 | xargs -r docker rmi -f
"""
echo '清理工作完成!'
}
failure {
echo 'Pipeline 执行失败,请检查日志。'
}
}
}
自动安装JDK(可选)
1.安装jdk自动安装插件
2.添加相应版本的jdk
3.在pipeline中如何使用
pipeline {
agent any
environment {
// 环境变量,可以方便管理
imageName = "laker-test:latest"
}
tools {
// 指定在 Jenkins 上配置的 Maven 工具名
maven 'Maven-3.9.9' // Maven 配置名称,根据你在 Jenkins 配置中定义的工具名来调整
// 使用自动安装的 jdk8是你在 Jenkins 全局工具中配置的名称
jdk 'jdk8'
}
4.jdk下载时机
当 Pipeline 首次运行时,如果 Jenkins 尚未安装 JDK 8,它会自动下载并安装到 Jenkins 节点中。安装过程可能需要几分钟,具体取决于网络状况和 JDK 版本。