cat /etc/netplan/50-cloud-init.yaml
sudo ip route del default via 192.168.124.1 && sudo ip route add default via 192.168.124.100 dev ens18sudo docker exec -it gitlab cat /etc/gitlab/initial_root_password将 Dockerfile 与 Jenkinsfile 放入项目的 ci 文件夹中
Dockerfile
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY ruoyi-admin/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]Jenkinsfile
pipeline {
agent any
tools {
maven 'maven'
}
environment {
HARBOR_URL = "192.168.124.17"
HARBOR_PROJECT = "images"
IMAGE_NAME = "ruoyi-admin"
BUILD_TAG = "build-${BUILD_NUMBER}"
LATEST_TAG = "latest"
FULL_IMAGE = "${HARBOR_URL}/${HARBOR_PROJECT}/${IMAGE_NAME}"
HARBOR_CREDENTIALS = "harbor-cred"
}
stages {
stage('Maven Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Docker Build') {
steps {
sh """
docker build -f ci/backend/Dockerfile \
-t ${FULL_IMAGE}:${BUILD_TAG} \
-t ${FULL_IMAGE}:${LATEST_TAG} \
.
"""
}
}
stage('Docker Login Harbor.') {
steps {
withCredentials([
usernamePassword(
credentialsId: "${HARBOR_CREDENTIALS}",
usernameVariable: 'HARBOR_USER',
passwordVariable: 'HARBOR_PASS'
)
]) {
sh """
echo "${HARBOR_PASS}" | docker login ${HARBOR_URL} \
-u "${HARBOR_USER}" --password-stdin
"""
}
}
}
stage('Docker Push') {
steps {
sh """
docker push ${FULL_IMAGE}:${BUILD_TAG}
docker push ${FULL_IMAGE}:${LATEST_TAG}
"""
}
}
}
post {
always {
sh '''
docker logout ${HARBOR_URL} || true
docker image prune -f || true
'''
}
success {
echo "✅ 镜像推送成功:${FULL_IMAGE}:${LATEST_TAG}"
}
failure {
echo "❌ 构建或推送失败"
}
}
}
sudo docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword安装插件:Maven Integration、Stage View、Gitlab
Harbor账号密码
ID填写:harbor-cred
脚本路径:ci/Jenkinsfile-backend







