* jenkins 支持 pipeline(流水线) 的方式进行发布,好处是,可以将整个发布流程代码化,并且可以将发布代码上传到gitlab,便于多人维护,接下来就说明一下,使用 pipeline 方式进行发布并结合 Jenkinsfile 的设置流程,以及目录模板
* 新建任务 -> 选择 文件夹(针对有多个服务的情况,最好先创建一个文件夹,类似于分组的概念),如下图

* 进入新建的文件夹(myproject) -> 新建任务 -> 选择 pipeline(流水线任务),如下图

* 取消并发构建,设置旧的构建保留时间

* 设置gitlab触发器,即当gitlab的某个分支(如:test分支)有push事件时,通知 jenkins 自动发布,如果你是手动发布,则忽略此步骤


* 注意: GitLab webhook URL 需要添加到 gitlab 对应代码仓库的 webhook 中, 选择 gitlab 的 project -> Settings -> Webhooks -> add new webhook, url 处填写 GitLab webhook URL 的值, Secret token 处填写 jenkins 上的 Secret token 值
* 在 jenkins 的 流水线 配置中 选择 pipeline script from scm, 并输入你存储 jenkins pipeline Jenkisfile 文件的 gitlab 地址,代码分支及证书

* 如果你存储 jenkins pipeline Jenkisfile 文件的 gitlab 地址中包含了多个项目,则需要让jenkins只获取对应项目路径下的文件即可

* Jenkins 上的配置完成,接下来讨论 存储 jenkins pipeline Jenkisfile 文件的 gitlab 中的代码模板(假设为gitlab的project名称为 jenkins-code)
* 由于 jenkins 中我们配置的 pipeline 分支为 test,因此,在 gitllab 的代码库 jenkins-code 中,应该使用 test 分支
* 在 jenkins-code 中可能会包含多个项目的 jenkinsfile 配置,因此目录结构如下:
myproject/└── server1/├── Jenkinsfile├── config/│ └── application.yml└── scripts/├── build.sh├── clean.sh├── package.sh├── publish.sh└── send.sh
* myporject 为多个项目中的其中一个
* 它包含了一个服务 server1
* server1 下的 Jenkinsfile 为核心编排文件
* 每个服务都必须包含 config 和 scripts 目录
* config 目录主要放服务的配置文件,如生产或测试环境链接的数据库及密码不一样
* scripts 目录中
* clean.sh -- 发布前的清理工作
* build.sh -- 编译服务,如golang,java,node的编译
* package.sh -- 将编译好的服务打包
* send.sh -- 将打包好的服务,发送到远端服务器, 并将 publish.sh 脚本发送到远端服务器
* publish.sh -- 这个脚本一般在远端服务器上执行,进行发布操作,如创建目录,解压,重启服务等
* 文件模板示例下载地址: 点我跳转
