jenkinsl:构建工具(五)

5. 构建工具

构建是指将源码转换成一个可使用的二进制程序的过程。这个过程可以包括但不限于这几个环节:下载依赖、编译、打包。构建过程的输出——比如一个zip包,我们称之为制品(有些书籍也称之为产出物)。而管理制品的仓库,称为制品库。

5.1 构建工具的选择

对构建工具的选择,还取决于团队对工具本身的接受程度。建议是,团队中同一技术栈的所有项目都使用同一个构建工具。

5.2 tools指令介绍

tools指令能帮助我们自动下载并安装所指定的构建工具,并将其加入PATH变量中。这样,我们就可以在sh步骤里直接使用了。但在agent none的情况下不会生效。

tools指令默认支持3种工具:JDK、Maven、Gradle。通过安装插件,tools指令还可以支持更多的工具。接下来,我们介绍几种常用的构建环境的搭建。

5.3 JDK环境搭建

5.3.1 自动安装JDK

进入Manage Jenkins→Global Tool Configuration→JDK页,单击“Add JDK”:

 

注意

  1. 这里需要oracle帐户验证。
  2. Jenkins不会马上下载JDK,而是当pipeline使用到时才会直接执行下载操作。

5.3.2 自定义JDK路径

基于安全的考虑,公司的内网机器可能无法直接访问因特网,所以使用自动下载会失败。这时就需要在Jenkins agent上准备JDK,然后在Manage Jenkins→Global Tool Configuration→JDK页中指定名称和JAVA_HOME路径:

5.4 Maven

5.4.1 使用Maven进行构建

Jenkins pipeline的tools指令默认就支持Maven。所以,使用Maven只需要两步。1-进入Manage Jenkins→Global Tool Configuration→Maven页,单击“Add Maven”:

 

  1. 在Jenkinsfile中指定Maven版本,并使用mvn命令。

5.4.2 使用Managed files设置Maven

Maven默认使用的是其官方仓库,国内下载速度很慢。所以,我们通常会使用国内的Maven镜像仓库。这时就需要修改 Maven 的配置文件 settings.xml。settings.xml 文件的默认路径为${M2_HOME}/conf/settings.xml。但是,我们是不可能登录上Jenkins的机器,然后手动修改这个文件的。
Config File Provider插件能很好地解决这个问题。只需要在Jenkins的界面上填入settings.xml的内容,然后在pipeline中指定settings.xml就可以了。也就是说,对于不同的pipeline,可以使用不同的settings.xml。
具体实现方法如下:

  1. 安装Config File Provider插件。
  2. 进入Manage Jenkins页面,就可以看到多出一个“Managed files”菜单
  3. 单击“Managed files”进入,在左侧菜单栏中选择“Add a new Config”,就会看到该插件支持很多种配置文件的格式及方式,

4选择“Global Maven settings.xml”选项。因为我们的设置是全局的。填写“ID”字段,Jenkins pipeline会引用此变量名。假如使用的ID为maven-global-settings。

5 在编辑页将自定义的Maven settings.xml的内容粘贴到“Content”字段中,

 

  1. 在Jenkins pipeline中使用的方法如下:

configFileProvider([configFile(fileId: "maven-global-settings", variable: "MAVEN_GLOBAL_ENV")]) {

    sh "mvn -s $MAVEN_GLOBAL_ENV clean install"

}

 

5.5 Go语言环境搭建

Jenkins支持Golang的构建,只需要以下几步。

  1. 安装Go插件
  2. 进入Manage Jenkins→Global Tool Configuration→Go页

 

  1. 在pipeline中加入tools部分。

pipeline {

    agent none

    environment {

        GOPATH = "${env.WORKSPACE}/"

    }

    tools {

        go 'go1.10'

    }    

    stages {

        stage('build') {

            steps {

                sh "go build"

            }

        }

    }

}

此时,在环境变量中会增加一个GOROOT变量。

  1. 设置GOPATH。了解Go语言开发的读者都会知道,编译时需要设置GOPATH环境变量。直接在environment指令中添加就可以了。

5.6 Python环境搭建

Python环境很容易产生Python版本冲突、第三方库冲突等问题。所以,Python开发通常会进行工程级别的环境隔离,也就是每个Python工程使用一个Python环境。

在Jenkins环境下,我们使用Pyenv Pipeline插件可以轻松地实现。
首先,准备Python基础环境。

  1. 在Jenkins机器上安装python、pip、virtualenv。
    1. pip:Python的包管理工具。
    2. virtualenv:Python中的虚拟环境管理工具。
  2. 安装Pyenv Pipeline插件。
    然后,在pipeline中使用Pyenv Pipeline插件提供的withPythonEnv方法。

withPythonEnv("/usr/bin/python") {

    sh "python --version"

}

withPythonEnv方法会根据第一个参数——可执行python路径——在当前工作空间下创建一个virtualenv环境。
withPythonEnv方法的第二个参数是一个闭包。闭包内的代码就执行在新建的virtualenv环境下。

5.7 利用环境变量支持更多的构建工具

不是所有的构建工具都需要安装相应的Jenkins插件才可以使用。
平时,开发人员在搭建开发环境时做的就是:首先在机器上安装好构建工具,然后将这个构建工具所在目录加入PATH环境变量中。
如果想让Jenkins支持更多的构建工具,也是同样的做法:在Jenkins agent上安装构建工具,并记录下它的可执行命令的目录,然后在需要使用此命令的Jenkins pipeline的PATH环境变量中加入该可执行命令的目录。示例如下:

pipeline {

    agent none

    environment {

        PATH = "/usr/local/customtool/bin:$PATH"

    }

    stages {

        stage('build') {

            steps {

                sh "customtool build"

            }

        }

    }

}

还可以有另一种写法:

pipeline {

    agent none

    environment {

        CUSTOM_TOOL_HOME = "/usr/local/customtool/bin"

    }

    stages {

        stage('build') {

            steps {

                sh "${CUSTOM_TOOL_HOME}/customtool build"

            }

        }

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章