集成环境搭建—Jenkins+pipeline+git

Jenkins搭建篇可见上一篇文章Jenkins搭建

解决场景

通常项目版本流转是研发合并代码到Realese分支进行提测,测试根据研发提测分支拉取代码到测试本版本测试服务器,比如:研发提测后端服务A,分支为zhangsan_XXX_2020.05.06,小张测试该版本需求,目前测试环境总共三套beatA,betaB,betaC,其中只有betaB空闲,小张部署服务A到betaB环境

实现原理

一个简单的初始版本框架其实很简单,利用pipeline插件,环境相关的配置信息存放到mysql数据库(便于管理,灵活性强)
在这里插入图片描述

实践步骤

  1. 添加凭据
    使用凭据主要是用于管理git登录账号以及密码,pipeline脚本中拉取git代码时需要用到;点击添加凭据
    在这里插入图片描述

用户名指登录git用户名,密码为登录git的密码,ID可以自己随意指定,后面拉取代码时引用这个ID,点击确定
在这里插入图片描述

  1. 创建item
    在这里插入图片描述

  2. 输入任务名称,任务名称建议为环境名称+服务名称组成,比如betaA_serviceA,自动部署代码时可以直接通过名称区分将要部署到那套环境;选择流水线
    在这里插入图片描述

  3. 创建环境配置表env_config
    在这里插入图片描述
    注释:
    id:主键
    env:环境
    project:项目名称
    service:部署到所在服务IP

  4. 创建项目配置表
    在这里插入图片描述
    注释:
    id:主键
    env_id:环境表的id
    key:配置key
    value:配置value
    classify:备用字段

  5. pipeline脚本
    思路为:拉取git代码–拉取依赖–更改配置文件–打包–将打包文件上传指定测试服务
    脚本如下(只作参考,服务不同,命令会有所不同):
    node{
    job_name=env.JOB_NAME
    proj_env_list=env.JOB_NAME.tokenize(’_’)
    proj_env=proj_env_list[0]
    proj_name=proj_env_list[1]

    if ("${onlystart}" == “false”) {
    echo ‘I only execute on the master branch’

    stage(“check out”){
    git branch: ‘master’,credentialsId: ‘git’, url: ‘${gitURL}’
    略…
    }
    stage(“config”){
    修改服务配置脚本
    略…
    }
    stage(“make dep”){
    拉取依赖
    }
    stage(“make build”){
    打包
    }
    stage(“push”){
    推送到测试服务
    }
    }
    stage(“start”){
    启动服务
    }

}

注释:
env.JOB_NAME为Jenkins系统变量,值为item名称
${onlystart}为自定义的Jenkins构建变量,这里作用是为控制只启动服务或者拉取代码后启动服务,截图如下
在这里插入图片描述

编写脚本过程中可能用得上的

  1. linux 把文件复制到另一台服务器上,带密码操作命令
    a. sshpass 安装命令:
    yum install sshpass
    b. 执行命令:
    sshpass -p “mima” ssh root@localhost --------参数小写p,密码mima
    c. 非22端口
    ssh -p 9999 ip “/root/xx.sh” -------参数小写p,端口9999
    scp -P 9999 -r dist ip:/opt -------参数大写P,端口9999
    d. 通过scp上传文件
    sshpass -p password scp local_file root@host:remote_file
    e. 通过scp下载文件
    $ sshpass -p password scp root@host:remote_file local_file
    注意:首次使用先通过scp root@host:remote_file local_file,再输入密码,后面就可以正常使用了
  2. 若非root用户把文件复制到另一台服务器上,权限不足解决办法
    先上传到/tmp目录,再通过sudo mv移动到目标位置,前提是该用户非root用户且拥有临时sudo权限,为普通用户赋予sudo权限可参考 传送门

有问题的可以私信我或者留言,一起进步!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐