Jenkins 参数化shell脚本

由于日常工作中可能会遇到很多需要构建化参数化或者清理不同平台的缓存这些情况,这时候又不想手动执行

那就用上jenkins去跑shell脚本吧,方便可视化一些

 

Jenkins使用参数化清理Redis缓存

在 General 添加 > This project is parameterized > Choice Parameter > String Parameter

复制代码
Choice Parameter
名称     Status
选项     Deploy
        Rollback
描述     Deploy:    dev清理缓存
        Rollback:  test清理缓存

String Parameter
名称    Version
默认值  0
复制代码

Choice Parameter 里填写对应的参数就可以,这些参数是对应下面的 shell 脚本做变量的

 

使用参数化构建Shell脚本

复制代码
case $Status in
  Deploy)
    {
    ## 清理dev的redis缓存
     sudo bash /etc/init.d/devredis.sh
    }
    ;;
  Rollback)
    {
    ## 清理test的redis缓存
    sudo bash /etc/init.d/testsredis.sh
    }
    ;;
  *)
  exit
      ;;
esac
复制代码

里面涉及到清理缓存  redis.sh 脚本是在目标服务器上执行的

然后如果点 Deploy 构建的话就是执行 清理dev环境缓存,反之执行 Rollback 构建就是清理test环境缓存

如果变量 Deploy和 Rollback 不好听的话,可以随意修改的~~

 

构建打包java项目shell (部分内容)

在 General 添加 > This project is parameterized > Choice Parameter > String Parameter

复制代码
Choice Parameter
名称     Status
选项     Deploy
        Rollback
描述     Deploy:    发布
        Rollback:  回滚

String Parameter
名称    Version
默认值  0
复制代码

Java构建命令

在 Build > Goals and options 添加

clean install -Dmaven.test.skip=true

在 Post Steps > Execute shell 添加

复制代码
case $Status in
  Deploy)
    {
    echo "Status:$Status"
    echo "Version:$BUILD_NUMBER"
    SERVICE_NAME="ops-0.0.1-SNAPSHOT"
    SERVICE_PATH="/data/app/ops/"
    SERVICE_BACKUP="/data/backup/ops"
    BUILD_ID=DONTKILLME
     
    PIDS=`ps -ef |grep java | grep 8080 | awk '{print $2}'`
    if [ "$PIDS" != "" ];then
    /usr/bin/kill -9 $PIDS
    fi
    cd $SERVICE_PATH
    cp -rf  $WORKSPACE/ops/target/$SERVICE_NAME.jar  $SERVICE_PATH
    nohup /usr/bin/java -jar  $SERVICE_PATH/$SERVICE_NAME.jar --server.port=8080 --spring.profiles.active=test  >>/dev/null 2>&1 & 

    #备份
    mv  $WORKSPACE/ops/target/$SERVICE_NAME.jar  $SERVICE_BACKUP/$BUILD_NUMBER.jar
    }
    ;;
  Rollback)
    {
    echo "Status:$Status"
    echo "Version:$Version"
    SERVICE_NAME="ops-0.0.1-SNAPSHOT"
    SERVICE_PATH="/data/app/ops"
    SERVICE_BACKUP="/data/backup/ops"
    BUILD_ID=DONTKILLME
     
    rm -rf  $SERVICE_PATH/$SERVICE_NAME.jar
    cp $SERVICE_BACKUP/$Version.jar  $SERVICE_PATH/$SERVICE_NAME.jar  
    
    PIDS=`ps -ef |grep java | grep 8080 | awk '{print $2}'`
    if [ "$PIDS" != "" ];then
    /usr/bin/kill -9 $PIDS
    fi
    cd $SERVICE_BACKUP
    nohup /usr/bin/java -jar $SERVICE_PATH/$SERVICE_NAME.jar --server.port=8080 --spring.profiles.active=test >>/dev/null 2>&1 & 

    }
    ;;
  *)
  exit
      ;;
esac
复制代码

 

前端Vue打包shell

在 General 添加 > This project is parameterized > Choice Parameter > String Parameter

复制代码
Choice Parameter
名称     Status
选项     Deploy
        Rollback
描述     Deploy:    发布
        Rollback:  回滚

String Parameter
名称    Version
默认值  0
复制代码

在 Post Steps > Execute shell 添加

复制代码
case $Status in
  Deploy)
    {
    echo "Status:$Status"
    echo "version:$BUILD_NUMBER"
    NPM_PATH="/usr/local/bin/cnpm"
    FEF_PATH="/usr/local/bin/fef"
    BACKUP_PATH="/data/backup/pc"
    PROJECT_FILE="/data/app/pc/"
    cd $WORKSPACE
    $NPM_PATH install
    sudo $FEF_PATH test
    if [[ -d ${PROJECT_FILE} ]];then
        rm -rf  $PROJECT_FILE  
    fi
    cp -rf $WORKSPACE/dist $PROJECT_FILE
    #备份项目文件
    cp -rf $WORKSPACE/dist $BACKUP_PATH/$BUILD_NUMBER-dist
    }
    ;;
  Rollback)
    {
    echo "Status:$Status"
    echo "version:$Version"
    BACKUP_PATH="/data/backup/pc"
    PROJECT_FILE="/data/app/pc/"
    if [[ -d ${PROJECT_FILE} ]];then
        rm -rf  $PROJECT_FILE  
    fi
    cp -rf $BACKUP_PATH/$Version-dist $PROJECT_FILE
    }
    ;;
  *)
  exit
    ;;
esac
复制代码

 

Docker打包构建脚本(参考)

复制代码
参数化构建过程
git参数
名称  Tag
参数类型 标签
默认值
$Tag


构建执行shell
###########################################

#!/bin/bash
##############################################
echo "Status:$Status"
echo "version:$BUILD_NUMBER"
SERVICE_BACKUP="/data/backup/devops_net"
/usr/bin/cp -rf $WORKSPACE/  $SERVICE_BACKUP/devops_net_$BUILD_NUMBER

##############################################

REPOSITORY=1111.aliyuncs.com/devops_mike/opsnet:${Tag}
 
echo '================开始打包镜像================'
cd $SERVICE_BACKUP/devops_net_$BUILD_NUMBER/ASPDotNetCore
docker build -t $REPOSITORY .
docker rmi `docker images | grep  '<none>' | awk '{print $3}'`

echo '================开始推送镜像================'
docker login --username=123456 --password=123456 1111.aliyuncs.com
docker push $REPOSITORY

####################################################################################################################
Execute shell
######################################################

#!/bin/bash
REPOSITORY=1111.aliyuncs.com/devops_mike/opsnet:${Tag}
echo '================开始部署镜像================'  
docker rm -f devopsnet |true
docker image rm $REPOSITORY |true

docker login --username=123456 --password=123456 1111.aliyuncs.com
docker pull $REPOSITORY
docker container run -d --name devopsnet  -p 8888:5000 $REPOSITORY
echo '================结束完成================'
复制代码

docker编译这里需要安装Git Parameter插件

 

本文分享完毕,感谢支持点赞~~

posted @   背锅的Mike  阅读(6318)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示