Coding(Jenkinsfile)+ Docker 自动化部署 Springboot —— 图文细节和一些注意事项说明
前言:本章讲述一下我使用Coding(Jenkinsfile)+ Docker部署Springboot项目过程,记录图文细节和一些需要注意的问题。
说明:为什么要使用Coding去集成Docker?
- 节约了服务器内存,不需要单独部署 Jenkins。(Jenkins内存占用较多)
- 方便管理,代码和部署放在同一个地方,同时也支持其他的工作协同。
- Coding也支持其他的部署方式,同时文档也较为齐全。
1. 配置服务器环境
(前面几篇已经配置过了,可以作为参考)
-
Docker安装的图文细节
-
MySQL安装的图文细节
-
Redis安装的图文细节
2. 创建一个Springboot项目
1. 这里我使用一个优秀的开源项目为例:芋道源码
(运行项目需要安装JDK,MySQL,Redis,可以参考官方文档运行)
2. 拉取代码,修改配置
(这里我使用的环境是JDK21
、MySQL8.0
、Redis7.4
)
- 拉取代码之后切换分支到
master-jdk17
(JDK8
使用默认的master
分支) - 等待下载
Maven
依赖,同时修改application
文件-
application.yaml
的spring.profiles.active
修改为dev
-
application-dev.yaml
的MySQL
和Redis
配置全部修改为自己的服务
-
3. 运行项目,访问http://127.0.0.1:48080/
(如图:正常运行启动,如果不能正常启动,可以参考源码文档排查问题)
3. 把代码提交到Coding
1. 在Coding本地创建仓库
2. 修改本地代码的Git远程地址
3. 推送到Coding仓库上
4. 编写Jenkinsfile脚本
1. 选择: 构建计划 > java + Spring +Docker
2. 开始创建计划
如果你使用的系统较新的系统,推荐使用账号和密码生成凭证。
(刚开始的时候我是使用的是密钥,但是我的系统是CentOS9,不兼容较旧的Jenkins插件,这里踩坑了,我在官方的文档里也找到错误说明。)
3. 流程配置
- 文本编辑器里我是这样配置的
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: GIT_BUILD_REF]],
userRemoteConfigs: [[
url: GIT_REPO_URL,
credentialsId: CREDENTIALS_ID
]]])
}
}
stage('编译') {
agent {
docker {
reuseNode true
registryUrl 'https://coding-public-docker.pkg.coding.net'
image 'public/docker/openjdk:21-2024.03'
args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --entrypoint='
}
}
steps {
sh 'mvn clean install -DskipTests -Dmaven.test.skip=true'
}
}
stage('构建镜像并推送到 CODING Docker 制品库') {
steps {
script {
docker.withRegistry(
"${CCI_CURRENT_WEB_PROTOCOL}://${CODING_DOCKER_REG_HOST}",
"${CODING_ARTIFACTS_CREDENTIALS_ID}"
) {
// 输出当前目录信息
echo "Current directory: ${env.WORKSPACE}"
// 切换到 yudao-server 目录
dir('yudao-server') {
// 构建 Docker 镜像
def dockerImage = docker.build("${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}", "-f Dockerfile ${DOCKER_BUILD_CONTEXT}")
dockerImage.push()
}
}
}
}
}
stage('部署到远端服务') {
steps {
script {
def remoteConfig = [:]
remoteConfig.name = "my-remote-ltby"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.port = 22
remoteConfig.allowAnyHosts = true
withCredentials([
usernamePassword(
credentialsId: "${REMOTE_CRED}",
passwordVariable: 'password',
usernameVariable: 'userName'
),
]) {
// SSH 登录用户名
remoteConfig.user = userName
// 密码登录
remoteConfig.password = password
sshCommand(
remote: remoteConfig,
command: "docker rm -f spring-boot | true",
sudo: true,
)
// DOCKER_IMAGE_VERSION 中涉及到 GIT_LOCAL_BRANCH / GIT_TAG / GIT_COMMIT 的环境变量的使用
// 需要在本地完成拼接后,再传入到远端服务器中使用
DOCKER_IMAGE_URL = sh(
script: "echo ${CODING_DOCKER_REG_HOST}/${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}",
returnStdout: true
)
sshCommand(
remote: remoteConfig,
command: "docker run -d -p 48080:48080 --name spring-boot ${DOCKER_IMAGE_URL}",
sudo: true,
)
echo "部署成功,请到 http://${REMOTE_HOST}:48080 预览效果"
}
}
}
}
}
environment {
CODING_DOCKER_REG_HOST = "${CCI_CURRENT_TEAM}-docker.pkg.${CCI_CURRENT_DOMAIN}"
CODING_DOCKER_IMAGE_NAME = "${PROJECT_NAME.toLowerCase()}/${DOCKER_REPO_NAME}/${DOCKER_IMAGE_NAME}"
}
}
提醒:如果你使用的也是
jdk17
以上的版本,需要注意编译的时候不要使用默认的构建环境
,因为maven版本较低,jdk17以上的版本会报错(我是用的脚本是jdk21的编译环境,如果你使用的是jdk8
,需要修改第19行代码:image public/docker/openjdk:8-2024.03
)
4. 修改触发规则
- 根据你的需求进行修改,也可以使用默认的
5. 修改变量和缓存
- 根据你的需求进行修改
6. 修改通知提醒
- 根据你的需求进行修改
7. 修改权限方案
- 根据你的需求进行修改
5. 开始构建
由于系统和环境的不同,可能出现各种问题,配置的时候尽量不加太多变量。
6. 构建成功
- 这里需要等待5-10分钟。
- 访问地址:http://xxx.xxx.xxx.xxx:48080 (xxx替换为服务器IP)
- 如图:可以正常访问到后台接口,部署成功
结束语:使用
Coding(Jenkinsfile)
集成Docker
自动化部署Springboot
项目的基础配置大致上就是这样了。因为步骤较多,所以有很多地方就简略的用图文表达了。
——如果觉得文章有用💪,点个赞,支持一下👏!——