jenkins
2026/5/14大约 2 分钟约 726 字
jenkins
部署:docker里起jenkins
services:
jenkins:
image: jenkins/jenkins:lts-jdk21
container_name: jenkins
restart: unless-stopped
ports:
- "8089:8080"
volumes:
- ./workspace:/var/jenkins_home
- ./program:/home/jenkins/program
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker:ro # ← 关键:挂载宿主 docker 客户端
# 推荐加上 user root(docker 命令通常需要 root 权限)
user: "0:0" # 等同于 root
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
# 额外建议:给容器更高的权限
privileged: false
cap_add:
- SYS_ADMIN环境配置
# 安装相关插件
1. git gitee
2. maven
3. ssh
# 配置相关环境
1. 系统管理里全局工具配置
2. 系统配置里配置gitee链接、SSH remote hosts
3. 凭据管理里 配置gitee令牌、 ssh username private keypipeline 流水线范例
# 拉取代码注意点 credentialsId 的必须是user password类型,user是gitee账号,password是那个凭证密钥pipeline {
agent any
tools {
jdk 'jdk11'
maven 'maven'
}
environment {
SRC_DIR = 'fxvc/code/copytrade'
DEPLOY_DIR = '/home/jenkins/program'
JAR_NAME = 'jeecg-cloud-gateway-3.1.3.jar'
FINAL_JAR_NAME = 'jeecg-cloud-gateway-3.0.jar'
MODULE = 'jeecg-cloud-module/jeecg-cloud-gateway-3.1.3'
}
stages {
stage('拉取代码') {
steps {
git(
url: 'https://gitee.com/seven-fruits-in-xiamen_2/fxvc-wrap-backend.git',
branch: 'master',
credentialsId: 'db783fa9-838c-4125-a856-4aab4de728dd'
)
}
}
stage('构建') {
steps {
dir(env.SRC_DIR) {
sh '''
mvn clean package -Pprod -DskipTests -B --no-transfer-progress -pl ${MODULE} -am
'''
}
}
}
stage('部署启动') {
steps {
dir(env.SRC_DIR) {
sh '''
mkdir -p ${DEPLOY_DIR}
SOURCE_JAR=""
for jar in ${MODULE}/target/*.jar; do
[ -f "$jar" ] || continue
SOURCE_JAR="$jar"
break
done
[ -n "$SOURCE_JAR" ] || { echo "未找到构建产物: ${MODULE}/target/*.jar"; exit 1; }
cp -f "$SOURCE_JAR" ${DEPLOY_DIR}/${FINAL_JAR_NAME}
${DEPLOY_DIR}/start_gateway.sh
'''
}
}
}
}
post {
success { echo 'gateway 构建部署成功' }
failure { echo 'gateway 构建部署失败' }
}
}ssh执行宿主机程序的范例
# 范例1 (推荐、简单)
# credentials 是ssh配置的私钥id
stage('SSH') {
steps {
sshagent(credentials: ['test']) {
sh '''
ssh -o StrictHostKeyChecking=no root@192.168.1.100 '
cd /opt/app &&
pwd &&
whoami
'
'''
}
}
}# 范例2
stage('SSH') {
steps {
script {
def remote = [:]
remote.name = 'prod'
remote.host = '192.168.1.100'
remote.user = 'root'
remote.identityFile = ''
remote.allowAnyHosts = true
withCredentials([sshUserPrivateKey(
credentialsId: 'test',
keyFileVariable: 'SSH_KEY'
)]) {
remote.identityFile = SSH_KEY
sshCommand remote: remote, command: 'cd /opt/app && pwd && whoami'
}
}
}
}Docker方案,挂载docker.sock和宿主机通信部署
1. jenkins 容器需要挂载docker、docker-compose
services:
jenkins:
image: jenkins/jenkins:lts-jdk21
container_name: jenkins
restart: unless-stopped
ports:
- "8089:8080"
volumes:
- ./workspace:/var/jenkins_home
- ./program:/home/jenkins/program
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker:ro # ← 关键:挂载宿主 docker 客户端
- /usr/bin/docker-compose:/usr/bin/docker-compose:ro # ← 关键:挂载宿主 docker 客户端
# 推荐加上 user root(docker 命令通常需要 root 权限)
user: "0:0" # 等同于 root
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
# 额外建议:给容器更高的权限
privileged: false
cap_add:
- SYS_ADMIN2. 流水线相关
pipeline {
agent any
tools {
jdk 'jdk11'
maven 'maven'
}
environment {
SRC_DIR = 'fxvc/code/copytrade'
MODULE = "${params.module}"
}
stages {
stage('拉取代码') {
steps {
git(
url: 'https://gitee.com/seven-fruits-in-xiamen_2/fxvc-wrap-backend.git',
branch: 'dev',
credentialsId: '858afb4b-b2d6-4000-b6ea-de29fd8aea94'
)
}
}
stage('构建') {
steps {
dir(env.SRC_DIR) {
sh """
mvn help:effective-settings
mvn clean package -Pdev -DskipTests -B --no-transfer-progress -pl ${MODULE} -am
"""
}
}
}
stage('deploy') {
steps {
dir(env.SRC_DIR) {
script {
// ====================== 镜像映射逻辑 ======================
def getImageTag = { String modulePath ->
def imageMap = [
'jeecg-cloud-module/jeecg-cloud-gateway-3.1.3' : 'jeecg-gateway:latest',
'jeecg-cloud-module/jeecg-cloud-system-start' : 'jeecg-system:latest',
'jeecg-module-fxvc/jeecg-module-fxvc-start' : 'jeecg-fxvc:latest',
]
def imageTag = imageMap[modulePath]
if (!imageTag) {
echo "⚠️ 警告:未找到 ${modulePath} 的镜像映射,使用默认值"
return 'jeecg-unknown:latest'
}
return imageTag
}
// =========================================================
def imageTag = getImageTag(env.MODULE)
echo "🚀 开始部署镜像: ${imageTag}"
sh """
docker build -t ${imageTag} ${MODULE}
docker-compose -f docker-compose-wrapper.yml up -d
"""
}
}
}
}
}
post {
success { echo '✅ 构建部署成功' }
failure { echo '❌ 构建部署失败' }
}
}