点击 "新建任务"
输入任务名称pipeline_deploy_game,选择 "Pipeline"
点击 "确定"
在 "General" 部分勾选 "This project is parameterized" #此项目是参数化的
添加 Choice Parameter :
Name: action
Choices: deploy和 rollback(每行一个)
添加 String 参数:
Name: git_version
Default Value:v1.0.1
[root@201-jenkins ~]# cd /home/deploy/scripts/
[root@201-jenkins scripts]# vim pipeline_deploy_game.sh
[root@201-jenkins scripts]# cat pipeline_deploy_game.sh
#!/bin/bash
# 修复版部署脚本
CODE_DIR=$(pwd)
WEB_DIR="/home/deploy/nginx/html/"
WEB_IP="10.0.0.204"
# 设置默认值(如果环境变量未设置)
action=${action:-"deploy"}
git_version=${git_version:-"unknown"}
CODE_DIR=${CODE_DIR:-$(pwd)}
echo "=== 部署脚本开始执行 ==="
echo "动作: $action"
echo "版本: $git_version"
echo "代码目录: $CODE_DIR"
get_code_tar(){
echo "打包代码: web-${git_version}.tar.gz"
cd $CODE_DIR && tar zcf /opt/web-${git_version}.tar.gz ./*
}
scp_code_web(){
echo "传输代码到服务器..."
scp /opt/web-${git_version}.tar.gz $WEB_IP:$WEB_DIR
}
code_tarxf(){
echo "解压代码到服务器..."
ssh $WEB_IP "cd $WEB_DIR && mkdir -p web-${git_version} && tar xf web-${git_version}.tar.gz -C web-${git_version}"
}
ln_html(){
echo "创建软链接..."
ssh $WEB_IP "cd $WEB_DIR && rm -rf game && ln -sf web-${git_version} game"
echo "✅ 软链接创建完成: game -> web-${git_version}"
}
main(){
echo "执行部署流程..."
get_code_tar
scp_code_web
code_tarxf
ln_html
}
# 修复条件判断语法 - 添加双引号和空格
if [ "$action" = "deploy" ]; then
main
elif [ "$action" = "rollback" ]; then
echo "执行回滚操作..."
ln_html
else
echo "错误: 未知的操作类型: $action"
echo "用法: action=deploy|rollback git_version=版本号 $0"
exit 1
fi
echo "=== 部署脚本执行完成 ==="
##注意一定要添加执行权限
[root@201-jenkins scripts]# chmod +x pipeline_deploy_game.sh
在 Pipeline 部分选择 "Pipeline script"
pipeline {
agent any
parameters {
choice(
name: 'action',
choices: ['deploy', 'rollback'],
description: '操作类型:部署或回滚'
)
string(
name: 'git_version',
defaultValue: 'v1.0.1',
description: 'Git标签版本号(如:v1.0.0)'
)
}
environment {
DEPLOY_SCRIPT = '/home/deploy/scripts/pipeline_deploy_game.sh'
WEB_IP = '10.0.0.204'
GIT_REPO = 'git@10.0.0.200:ops/game.git'
}
stages {
stage('清理工作空间') {
steps {
cleanWs() // 使用Jenkins内置方法清理工作空间
}
}
stage('获取代码') {
steps {
script {
// 方法1:使用checkout SCM(推荐)
checkout([
$class: 'GitSCM',
branches: [[name: "refs/tags/${params.git_version}"]],
extensions: [
[$class: 'CloneOption',
depth: 1,
noTags: false,
shallow: true]
],
userRemoteConfigs: [[
url: env.GIT_REPO
]]
])
// 验证代码状态
sh """
echo "✅ 当前代码状态:"
git describe --tags
git log -1 --oneline
"""
}
}
}
stage('执行部署') {
steps {
sh """
echo "设置环境变量..."
export action="${params.action}"
export git_version="${params.git_version}"
export CODE_DIR="\$(pwd)"
echo "执行部署脚本..."
bash -x ${env.DEPLOY_SCRIPT}
"""
}
}
}
post {
always {
echo "构建完成 - 操作: ${params.action}, 标签: ${params.git_version}, 结果: ${currentBuild.result}"
}
}
}
将上述完整的 Pipeline 脚本粘贴到文本框中
点击 "保存"
点击 "Build with Parameters"
选择操作类型和输入版本号
点击 "开始构建"
验证部署和回滚没有问题