随着项目进展接近尾声,服务端自动化部署也逐渐提上日程。按照初期想法,采用 Jenkins 实现自动化部署。Jenkins 是开源 CI/CD 软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。顺便插播一句广告,欢迎参与 Jenkins 中文本地化建设。配置需求1c 2g 服务器 1 台尝试 Vultr、Amazon aws 和阿里云 ECS 后,得出结论:若 Git Provider 为 GitHub,由于网络原因,应选用 Vultr 等 VPS 或 aws 等国外服务器。但价格相对较国内云提供商较贵,若使用 1c 1g 服务器在构建中服务器容易崩溃。Gitee 是国内连接速度最快的 Git Provider,但 Jenkins 对于 Gitee 的插件支持少。所以采用 GitLab + 阿里云 Ecs 解决方案。在明确需求之后,则需要参考官方文档着手部署 Jenkins 服务器。服务器准备gitJenkins 需要从 GitLab 向 Jenkins 服务器拉取代码。jdk1.8Jenkins 需要运行在 Java 8 环境下maven该项目需要使用 Maven 打包Jenkins 插件Maven IntegrationJenkins 需要创建一个 Maven ItemPublish Over SSH在 mvn 打包后需要部署到目标服务器上GitLab Plugin需要从 GitLab 拉取项目GitLab Hook Plugin配置 GitLab 触发器Jenkins 配置配置好插件后,需要对 Jenkins 进行一定的配置。Publish Over SSH 配置Manage Jenkins->Configure System 找到 Publish Over SSH 。在 SSH Servers 中 Add 一个 SSH Server,正确填写项目部署服务器信息。点击 Advanced,勾选 Use password authentication, or use a different key,正确填写密码,测试并保存。项目配置新建项目选择 Maven Project,Source Code Management 选择 Git,填入项目地址,账户信息以及目标分支。配置触发器。在 Build Triggers 中选择 Build when a change is pushed to GitLab,记下后面 GitLab webhook URL,根据需求配置 Advanced 中信息。配置构建后动作。在 Post-build Actions 中选择已配置好的服务器,根据实际情况填写 Transfers 中信息。e.g. Source files : */workhelper.jar,Jenkins 会找到目录下符合该正则表达式的文件。Remove prefix : target/,通常 Maven 打包后文件都会在 target 目录下。Remote directory: 空,该目录相对于 Publish Over SSH 中配置的 Remote Directory 。Exec command:/root/project/startup.sh,部署后命令,是项目传输后运行的脚本。GitLab 配置GitLab 项目中 Settings->Integrations,URL 填写上文记录的 GitLab webhook URL,根据需求选择触发器,点击 Add webhook Jenkins 中 Manage Jenkins->Configure System 找到 GitLab,取消 Enable authentication for ‘/project’ end-pointJenkinsfile 样例Jenkins 需要找到项目中的 Jenkinsfile 才能按照需求工作,Jenkinsfile 位于项目根目录下。node { checkout scm echo “current branch: $BRANCH_NAME” if (BRANCH_NAME.startsWith(“jenkins”)) { sh “mvn clean install” }}这里 Jenkinsfile 使用 Groovy 语法。脚本样例在项目通过 Publish Over SSH 传输到服务器上之后,需要一定的操作才能正确部署。#!/usr/bin/env bashkill -9 $(netstat -nlp | grep :8848 | awk ‘{print $7}’ | awk -F"/" ‘{ print $1 }’)# cd targetnohup java -jar workhelper-0.0.1-SNAPSHOT.jar > log.file 2>&1 &这里使用 shell 脚本运行服务。