如何使用jenkins进行异地构建

1、背景

当我们使用jenkins进行构建和发布时,需要将构建过程和运行构建目标的机器隔离开来。通俗点来说举个例子:构建angular项目,和利用nginx访问angular构建产物需要分开在不同的机器。因为构建的过程会是极度消耗性能的,如果在机器负载程度较高的情况下还同时运行生产环境的应用,会存在较大的风险。因此就有Jenkins异地构建的需求。

  1. 在机器A上构建
  2. 把构建产物传递到机器B
  3. 在机器B上运行构建产物

2、环境准备

2.1、安装插件Pulish Over SSH

Publish Over SSH实质上是一个帮助文件传递的插件。安装插件的路径为:【系统管理】-》【插件管理】-》【Available】-》【搜索Publish Over SSH】-》【安装】

2.2、配置插件

安装好插件之后,我们还需要配置可以将构建产物传递到哪些服务器上。

【系统管理】-》【系统设置】-》【SSH Servers】-》【填写服务器信息,添加Server】

publish-over-ssh

如果服务器有密码,可以点击【Advanced】,勾选【Use password authentication, or use a different key】,然后直接填写服务器密码到【password】字段。

填写完毕之后点击【Test Configuration】,如果配置正确则会返回【Success】。

2.3、配置项目

找到你想要构建的项目,点击【Configuration】,进入到配置页面。构建的过程不需要修改,我们这边只需要将构建产物传递到机器B就行了。找到Build Enviroment的部分。

jenkins项目配置

选择【在构建结束之后通过ssh发送文件或者执行命令】,在这个选项卡中有几个配置:

  • Name:选择你想要把构建产物发送到哪台机器。(在2.2节中配置的)
  • Source files:待复制的文件,如果要复制某个文件夹下面的所有文件,可以使用**来指代。(相对地址,相对于当前jenkins的项目的构建工作目录)
  • Remove prefix:移除前缀文件,假设你只需要dist下面的文件,而不需要front/jte-pms-business-front/dist/复制整个目录结构,可以使用该配置排除。
  • Remote directory:远程目的服务器的目录。(相对地址,相对于当前在2.2节中配置的Remote Dirctory
  • Exec command:在远程目的服务器要执行的命令。

在这里我来详细解释一下这个执行过程。

  1. 项目构建成功,构建产物存放在$WORKSPACE/front/jte-pms-business-front/dist
  2. 复制构建产物($WORKSPACE/front/jte-pms-business-front/dist下的所有文件)到204服务器(/tmp/dist/jte-pms-business-front)文件夹
  3. 删除目标服务器中nginx老版本的html文件
  4. 复制/tmp/dist/jte-pms-business-front下的所有文件到nginx