fix: 改进 Docker 检测逻辑,优先使用主机构建
- 先检查 Docker 命令是否可用 - 如果 Docker 不可用,直接使用主机构建 - 避免 Docker Pipeline 插件尝试执行不存在的 docker 命令 - 添加 Node.js 检查,确保构建环境可用
This commit is contained in:
parent
be1dab20e9
commit
1a4bb873d2
73
Jenkinsfile
vendored
73
Jenkinsfile
vendored
@ -18,15 +18,76 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Build in Docker') {
|
stage('Build') {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
// 在 Node.js Docker 容器中执行构建
|
// 先检查 Docker 命令是否可用
|
||||||
// 需要 Jenkins 安装 Docker Pipeline 插件
|
def dockerAvailable = false
|
||||||
def nodeImage = docker.image("node:18")
|
try {
|
||||||
nodeImage.inside('-v /var/run/docker.sock:/var/run/docker.sock') {
|
def dockerCheck = sh(
|
||||||
|
script: 'command -v docker || docker --version',
|
||||||
|
returnStatus: true
|
||||||
|
)
|
||||||
|
if (dockerCheck == 0) {
|
||||||
|
dockerAvailable = true
|
||||||
|
echo "Docker 命令可用"
|
||||||
|
} else {
|
||||||
|
echo "Docker 命令不可用,将使用主机构建"
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
echo "检查 Docker 时出错: ${e.getMessage()}"
|
||||||
|
dockerAvailable = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果 Docker 可用,尝试使用 Docker 构建
|
||||||
|
if (dockerAvailable) {
|
||||||
|
try {
|
||||||
|
def nodeImage = docker.image("node:18")
|
||||||
|
echo "使用 Docker 容器构建..."
|
||||||
|
nodeImage.inside('-v /var/run/docker.sock:/var/run/docker.sock') {
|
||||||
|
sh '''
|
||||||
|
echo "在 Docker 容器中构建..."
|
||||||
|
echo "Node 版本:"
|
||||||
|
node --version
|
||||||
|
echo "NPM 版本:"
|
||||||
|
npm --version
|
||||||
|
|
||||||
|
# 安装依赖
|
||||||
|
echo "安装依赖..."
|
||||||
|
npm install
|
||||||
|
npm run install:all
|
||||||
|
|
||||||
|
# 构建前端
|
||||||
|
echo "构建前端..."
|
||||||
|
npm run build --workspace=frontend
|
||||||
|
|
||||||
|
# 构建后端
|
||||||
|
echo "构建后端..."
|
||||||
|
cd backend
|
||||||
|
npm run build
|
||||||
|
npm run prisma:generate
|
||||||
|
cd ..
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
echo "Docker 构建失败,回退到主机构建..."
|
||||||
|
echo "错误信息: ${e.getMessage()}"
|
||||||
|
dockerAvailable = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果 Docker 不可用或失败,使用主机构建
|
||||||
|
if (!dockerAvailable) {
|
||||||
|
echo "使用主机构建..."
|
||||||
sh '''
|
sh '''
|
||||||
echo "在 Docker 容器中构建..."
|
echo "在主机上构建..."
|
||||||
|
|
||||||
|
# 检查 Node.js
|
||||||
|
if ! command -v node &> /dev/null; then
|
||||||
|
echo "错误: Node.js 未安装,请安装 Node.js 18+"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Node 版本:"
|
echo "Node 版本:"
|
||||||
node --version
|
node --version
|
||||||
echo "NPM 版本:"
|
echo "NPM 版本:"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user