集成环境搭建—Jenkins+pipeline+git
Jenkins搭建篇可见上一篇文章Jenkins搭建
解决场景
通常项目版本流转是研发合并代码到Realese分支进行提测,测试根据研发提测分支拉取代码到测试本版本测试服务器,比如:研发提测后端服务A,分支为zhangsan_XXX_2020.05.06,小张测试该版本需求,目前测试环境总共三套beatA,betaB,betaC,其中只有betaB空闲,小张部署服务A到betaB环境
实现原理
一个简单的初始版本框架其实很简单,利用pipeline插件,环境相关的配置信息存放到mysql数据库(便于管理,灵活性强)
实践步骤
- 添加凭据
使用凭据主要是用于管理git登录账号以及密码,pipeline脚本中拉取git代码时需要用到;点击添加凭据
用户名指登录git用户名,密码为登录git的密码,ID可以自己随意指定,后面拉取代码时引用这个ID,点击确定
-
创建item
-
输入任务名称,任务名称建议为环境名称+服务名称组成,比如betaA_serviceA,自动部署代码时可以直接通过名称区分将要部署到那套环境;选择流水线
-
创建环境配置表env_config
注释:
id:主键
env:环境
project:项目名称
service:部署到所在服务IP -
创建项目配置表
注释:
id:主键
env_id:环境表的id
key:配置key
value:配置value
classify:备用字段 -
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构建变量,这里作用是为控制只启动服务或者拉取代码后启动服务,截图如下
编写脚本过程中可能用得上的
- 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,再输入密码,后面就可以正常使用了 - 若非root用户把文件复制到另一台服务器上,权限不足解决办法
先上传到/tmp目录,再通过sudo mv移动到目标位置,前提是该用户非root用户且拥有临时sudo权限,为普通用户赋予sudo权限可参考 传送门