目录
1.Jenkins工作空间的理解
每当创建一个任务(job),通常会绑定一个远程仓库,gitlab或svn或其他的远程仓库,在任务构建时会根据配置的策略从指定的分支将远程仓库的资源拉去到jenkins节点,也就是jenkins工作的服务器上,他通常会保存在jenkins设定的工作空间/.../workspace/...,例如/mnt/jenkins/workspace/,例如job名称为job1,那么其关联的远程仓库资源将会拉去到/..../workspace/job1/目录下,在这个任务中的操作也将在这个工作空间中进行。
2.Jenkins工作流程
创建一个任务,其从远程仓库拉去资源,资源包括程序源码或安装程序包等,存放到jenkins工作节点的服务器指定的工作空间目录下,通过maven或其他构建工具将源码打包成可执行程序,然后通过命令或插件的方式将可执行程序发送到测试服务器上,然后在测试服务器上完成自动化测试等操作。
3.传输文件到远程服务器
在构建中添加Send files or execute commands over SSH
选择事先配置好的远程服务器,配置时给该服务器添加了一个根目录,例如/opt
Source files:当前机器上的文件,输入的是相对路径,以该任务的工作空间为相对路径,不能访问该工作空间目录以外的文件。
Remove prefix:去除前缀,例如在Source files中填写**/service/test.jar,其中**/代表该任务的工作空间目录,那么如果不填写Remove prefix,传输到远程服务器时会带着test.jar的上级目录service,如果只想将test.jar传输过去,那么Remove prefix需要填写service,代表去除前缀
Remote directory:代表远程服务器的目录,上面提到了配置该远程服务器时给该服务器配置了一个根目录,例如/opt,那么在Remote directory填写/test时,会将test.jar传输到目标服务器的/opt/test/目录下。
4.修改默认工作空间
如果在source files中填写其他工作空间的文件,那么需要修改默认工作空间,且配置的工作空间需要在要传输文件工作空间目录的上级,例如现在有两个任务,job1,job2,其工作空间分别为
job1:/mnt/jenkins/workspace/job1
job2:/mnt/jenkins/workspace/job1
此时如果使用3介绍的组件传输文件,那么job1任务下无法传输job2工作空间目录下的文件,因为source files是以当前工作空间目录作为相对路径的。
如果想传输job2工作空间目录下的文件,那么需要修改job1的默认工作空间,而且需要在job2工作空间目录的上级目录,例如可以修改为/mnt/jenkins/workspace,此时job1从远程仓库拉去的资源将放在/mnt/jenkins/workspace目录下,此时source files中就可以访问到job2工作空间目录下的文件了。
5.在当前jenkins节点服务器执行shell命令
一个任务构建时首先从远程仓库把资源拉渠道jenkins节点服务器上,通常需要在这个机器上对资源文件进行操作,那么就会涉及到执行shell命令,在构建中选择Execute shell组件,即可在本节点服务器上执行shell命令,执行shell命令不受工作空间的限制,并且可以使用jenkins内置的环境变量,在4中介绍的如果在job1中想将job2中的文件进行操作或传输,推荐的方式是使用shell命令将job2工作空间目录下的资源移动或复制到job1工作空间下,然后再进行远程传输,而不推荐直接使用4中介绍的修改默认工作空间的方式,因为会导致jenkins服务器上目录结构混乱,不利于管理。
6.使用参数构建
在General中选择参数化构建,新增参数,设置参数名和默认值,在之后的组件中,例如3中提及的传输文件到远程服务器以及5中提及的Execute shell组件中都可以使用${参数名}的方式引用参数值。
构建项目时使用参数化构建,Build with Parameters,填写参数的值或使用默认的值进行构建
7.构建过程需要使用密码参数
当构建过程需要使用的参数是密码等敏感信息时,使用6中介绍的参数构建显然不合适,可以在构建环境中使用job password配置。使用该参数和普通参数一样,通过${参数名}引用。