kl个人博客 首页>>服务器/运维>>jenkins Pipeline脚本jenkinsfile实操指南

jenkins Pipeline脚本jenkinsfile实操指南

jenkins Pipeline脚本jenkinsfile实操指南

前言碎语

jenkins是一款流行的开源持续集成软件,插件丰富,扩展灵活。2.0后推出pipeline流式构建,支持构建任务脚本化。本文主要旨在使用jenkins 的pipeline功能完成java maven项目的打包,上传jar到目标服务器。pipeline推出时间不长,实际使用的不是很多,网上基本没啥参考资料,官方的文档很详细,但不成本文所述体系。这篇博文是博主摸索半天后的成果,如有错落,欢迎指出。

说明:本文环境默认包含组件:jenkins,maven,jdk

一,安装pipeline支持插件

到配置中心插件管理搜索如下插件,安装

Pipeline Maven Integration Plugin :执行withMaven方法支持,用于构建maven项目工程,使用方式如下图,详细说明见:https://wiki.jenkins.io/display/JENKINS/Pipeline+Maven+Plugin

SSH Agent Plugin :sshagent方法支持,用于上传构建产物到目标服务器,使用详情见:
https://wiki.jenkins.io/display/JENKINS/SSH+Agent+Plugin,这边博主实操时有个大坑,后面说详细说明

二,创建流式Item,如图

三,编写pipeline脚本

脚本分三个步骤块,分别是git clone(下载源码到本地),build(构建工程),deploy(上传构建产物到目标主机),脚本如下:

node {
   stage('git clone') { // for display purposes
     checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxx-xxxx-xxxxx-xxxxxx', url: 'http://git.xx.xxx/xxx/xform-boot.git']]])
   }
   stage('Build') {
           env.JAVA_HOME="${tool 'jdk1.8.0_92'}"
           withMaven(
            maven: 'M3',
            mavenLocalRepo: '.repository') {
                sh "mvn clean install -U  -P${profile} -Dmaven.test.skip=true"
        }
   }
   stage('deploy') {
    sshagent(credentials: ['deploy_ssh_key']) {
        sh 'ssh root@120.xx.95.105'
        sh 'echo hello'
       sh 'scp producer/target/salesApp-1.0-RELEASES.jar  root@120.xx.95.105:/root/deploy/'
     }
   }
}
如上脚本需要配置两个认证凭证,分别是git的credentialsId和sshagent的credentials,到配置管理credentials处添加,如图


git的认证比较简单,使用密码用户名验证,直接选Username with password就好了,这里还有个技巧,后面会讲到。

sshagen测试下来只支持私钥,需要选择如下配置:

如图,使用了From the Jenkins master ~./ssh,需要你到jenkins所在主机的.ssh目录,通过命令”ssh-keygen -t rsa“生成公私钥,生成时会询问你是否使用密码 加密,可以直接跳过,如果写了密码,那么上图中Passphrase需要写上加密密码,没写就留空。然后将id_rsa.pub中的内容拷贝到目标主机的/root/.ssh/authorized_keys文件中。上图中的ID可以指定,不指定会生成一个唯一字符串如:

这个ID对应了pipeline脚本中的验证ID,到此,我们准备工作都已经做完了。

添加运行参数

细心的你可能发现了脚本中有类似占位符。这些的代码,如${branch},${profile},其实就是pipeline的占位符,这些参数控制了git从哪个分支拉代码,maven构建的哪个环境的代码,这些参数需要在构建任务中明确指定,用以区分是生产环境还是测试环境等,如图

四,尝试构建任务

到这里我们的准备工作都已完成了,可以开启构建任务测试了,这时博主走了一个好大的坑,无论认证凭证模块怎么配置,总是抛如下的异常:Host key verification failed.

这个异常非常明显,pipeline流式构建前两个步骤已经成功了,代码拉下来并已经构建成功了。但是通过sshagent上传到目标服务器时,认证失败了。这个问题占了我们摸索过程的一大半时间。最后还是感谢唐老大发现了问题。

异常原因:生产公私钥使用的root用户生产的,jenkins是使用jenkins用户启动的,所有jenkins没有权限,

其实上面所有的步骤都没问题。最终在尝试了无数次的构建失败后构建图标终于绿了,构建产物成功上传到目标主机

一次次的失败:

成功的绿标

五,pipeline的一点技巧

流式项目Item创建好后,在左边菜单最下面会有pipeline的语法菜单,点进去,会有如下页面:

1.其中箭头一所指的,就是前文提到的git添加认证的一个小技巧,这个是一个pipeline脚本生成器,选中git scm后会出来git相关的配置,按照提示添加后,点击生成,就会生成以及配置组装好的脚本。特别适合新手

2.箭头而是步骤指南,这个里面罗列了所有pipeline语法支持的一些DSL函数,如git,checkout,wthMaven等,并且详细的描述了方法的具体使用细节,详细 到每个参数的说明,如withMavene:


文末结语

pipeline的概念去年就听说了,现在实际操作了一把,还是非常的震撼,通过在项目中新增jenkinsfile就可以解决构建问题,而且非常灵活,支持写if等的逻辑判断脚本来决定构建行为。经历了无数次失败后成功的成就感不言而喻,有兴趣的都可以试试,彻底改变原先的构建模式。建议刚接触pipeline的新手,多看看pipeline语法页面的相关内容,对理解pipeline语法及书写脚本有很大的帮助。其次就是去相关的插件wiki页面多看看说明。国内的那些博客很多都是一笔带过,看不出在生产上面应用的痕迹,不建议去参考。最后,有任何问题欢迎在下面留言,一起讨论。



kl个人博客