分享一篇Jenkins自动化部署脚本

分享一篇Jenkins自动化部署脚本

一、Java发布脚本

1. Jenkins Java发布执行计划

#BUILD_ID=DONTKILLME
#!/bin/bash

# Git代码地址
gitPath=项目地址
# 工作目录
workPath=/xxx/java/workspace
# 代码目录名称
codeName=xxx
# Ansible Yaml 地址
ansibleYamlPath=/opt/ansible/yaml-beta/backup/ansible配置文件.yaml
# Ansible Hosts 地址
ansibleHostsPath=/opt/ansible/host/hosts

# ---------------------------

cd $workPath

# 项目名 每次构建都删除后 从新拉取
rm -rf $codeName

git clone $gitPath

# 进入当前目录
cd $codeName

# 打包 先clean 再package(如果不clean 有可能打包会丢文件)
mvn clean package

# 发送到远端服务器 并 启动
ansible-playbook $ansibleYamlPath -i $ansibleHostsPath

2. Jenkins Java发布服务器

- hosts: server_beta
  remote_user: frontend
  tasks:
    - name: 拷贝Jar
      tags: copy_code
      copy: src="Jar文件地址" dest="目标地址"
    - name: 备份代码
      tags: back_code
      shell: |
        sh 备份脚本.sh
    - name: 启动项目
      tags: startup_project
      shell: |
        cd 工作目录
        nohup java -jar Jar文件 &  

3. 测试服务器 - Java后端脚本

#!/bin/bash

# 当前时间
currTime=$(date "+%Y%m%d%H%M%S")

# 文件名称
fileName=think-bboss-thd-starter-1.0.0.jar

# 上传文件目录
uploadFilePath=/xxx/java/upload
# 工作目录
workPath=/xxx/java/workspace
# 备份目录
backPath=/xxx/java/back

#判断文件是否存在
if [ ! -f "$uploadFilePath/$fileName" ];then
   echo "文件不存在,请重新拷贝执行"
   exit 1
fi

# 判断 文件是否存在
if [ -f "$workPath/$fileName" ];then
  # 杀死当前 java 进程
  PROCESS=`ps -ef | grep $fileName | grep -v grep | grep -v PPID | awk '{ print $2}' `
    for i in $PROCESS
    do
    echo "Kill the $1 process [ $i ]"
    kill -9 $i
  done

  # 备份文件
  sudo mkdir -p $backPath/$currTime
  sudo mv $workPath/$fileName $backPath/$currTime

  # 只保留最新的5次备份
  sudo find $backPath -maxdepth 1 -type d | sort | head -n -5 | sudo xargs rm -rf

fi

# 移动上传文件 当工作目录下
sudo mv $uploadFilePath/$fileName $workPath

二、Vue发布脚本

1. Jenkins Vue发布执行计划

#!/bin/bash

# Git代码地址
gitPath=项目地址
# 工作目录
workPath=/xxx/vue/workspace
# 代码目录名称
codeName=xxx
# Ansible Yaml 地址
ansibleYamlPath=/opt/ansible/yaml-beta/backup/ansible配置文件.yaml
# Ansible Hosts 地址
ansibleHostsPath=/opt/ansible/host/hosts

# 进入当前目录
cd $workPath

# 如果当前没有这个文件夹 则需要 重新拉取
if [ ! -d "$workPath/$codeName/" ];then
   git clone $gitPath
else
# 如果有 则需要 拉取一下最新代码
   cd $codeName
   git pull
fi


# 发送到远端服务器 并 启动
ansible-playbook $ansibleYamlPath -i $ansibleHostsPath

2. Jenkins Vue发布服务器

- hosts: server_beta
  remote_user: frontend
  tasks:
    - name: 拷贝 Dist
      tags: copy_code
      copy: src="前端代码/dist" dest="服务端目录"
    - name: 备份代码并且部署
      tags: back_build_code
      shell: |
        sh 部署脚本.sh

3. 测试服务器 - Vue前端脚本

#!/bin/bash

# 当前时间
currTime=$(date "+%Y%m%d%H%M%S")

# 文件名称
fileName=dist

# 上传文件目录
uploadFilePath=/xxx/vue/upload
# 工作目录
workPath=/xxx/vue/workspace
# 备份目录
backPath=/xxx/vue/back

#判断文件是否存在
if [ ! -d "$uploadFilePath/$fileName/" ];then
   echo "文件不存在,请重新拷贝执行"
   exit 1
fi

# 判断 文件是否存在
if [ -d "$workPath/" ];then
  # 备份文件
  sudo mkdir -p $backPath/$currTime
  sudo cp -r  $workPath $backPath/$currTime
  sudo rm -rf $workPath/*

  # 只保留最新的5次备份
  sudo find $backPath -maxdepth 1 -type d | sort | head -n -5 | sudo xargs rm -rf

fi

# 移动上传文件 当工作目录下
sudo mv $uploadFilePath/$fileName/* $workPath

本文由 在码圈 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
原文链接:https://www.arcinbj.com/archives/jenkins-scripts
最后更新于:2021-02-22 16:55:41

请博主喝咖啡 ☕.