2018年11月06

写个简单的shell脚本来配合Jenkins自动部署项目

用过Jenkins的同学可能都知道,在部署不同的项目时,可能需要写一写脚本,不同的语言项目,脚本内容不同,而同语言的项目,往往只是参数不同,所以如果写成脚本,将会大大的方便很多。

写之前,首先得屡一下需求,完事做之前,总得现有需求才行。

调用脚本,指定目录,存在即更新,不存在则部署,再根据不同的类型执行不同的命令,这里假设脚本名叫deploy.sh

期望

  • bash deploy.sh deploy_path // 判断是否部署,执行部署和更新操作,通用,基础。
  • bash deploy.sh deploy_path project_type // 根据project_type不同的值,执行不同的命令。

实现

准备工作,你必须要知道的!!!

首先,这个脚本是在jenkins中执行的,那么执行的用户一定就是jenkins,所以,当在服务器上写脚本时,需要考虑到权限问题,最简单的办法,就是直接在jenkins用户有权限的目录,以jenkins身份创建这个脚本并进行初步的测试,现在终端测试是否可执行,再通过Jenkins系统测试,OK之后再继续。

通用基础

判断是否已部署,我的方式是检测目标目录中是否存在.git目录,存在则更新,不存在则删除,然后克隆。(有点粗暴,实际上应该提示一下,不然会造成误删)


下面是脚本内容:

if [ ! -d $1"/.git" ]; then
    rm -rf $1
    git clone $GIT_URL $1;
else
    cd $1;
    git pull;
fi

$1是代表第一个参数,$GIT_URL是Jenkins提供的环境变量,详情可在你的Jenkins主机地址/env-vars.html/中查看,也可通过文末给的参考链接查看。


检测项目类型

检测类型,把每一种类型的通用操作封装成一个函数即可,我常用的项目类型大概也就下面这几种:

  • php
  • thinkjs
  • 前端构建工具编译

php

php(){
    composer install;
}

thinkjs

thinkjs(){
    cnpm install;
    pm2 reload pm2.json;
}

vue

vue(){
    cnpm install;
    npm run build;
    // ...
}

最终脚本内容如下

php(){
    composer install;
}

thinkjs(){
    cnpm install;
    pm2 reload pm2.json;
}

vue(){
    cnpm install;
    npm run build;
    // ...
}

if [ ! -d $1"/.git" ]; then
    rm -rf $1
    git clone $GIT_URL $1;
else
    cd $1;
    git pull;
fi

if [ "$2" == "php" ]; then
    php;
fi

if [ "$2" == "thinkjs" ]; then
    thinkjs;
fi

if [ "$2" == "vue" ]; then
    vue;
fi

使用方式

部署普通项目

bash deploy.sh project_path

部署ThinkJS项目

bash deploy.sh project_path thinkjs

部署Vue项目

bash deploy.sh project_path vue


当然,这是最基本的操作,如果还有特殊需求,那就在调用脚本之后继续写即可,本人Linux渣渣,算查算写,脚本太丑,不忍直视,哈哈。

参考链接

本文链接:https://yaimeet.com/post/jenkins-deploy-shell.html

-- EOF --

Comments