七叶笔记 » golang编程 » 使用 Jenkins 自动构建和测试 Go 应用程序

使用 Jenkins 自动构建和测试 Go 应用程序

Jenkins 是一个基于 Java 的开源自动化工具,支持构建、部署和自动化任何软件开发项目。它易于安装,并且带有许多插件(感谢活跃的社区!),您可以在自动化过程中使用它们。

安装Jenkins

Jenkins 可以安装在各种平台上,无论是在本地机器上、在云端还是在 Docker 平台上。如果选择直接在机器上安装 Jenkins,则必须先安装 Java。

在这个例子中,我们将着眼于在 Docker 平台上安装 Jenkins,当然前提是已经安装了 Docker。

  1. 通过运行拉取 Docker 镜像 docker pull jenkins/jenkins:lts
  2. 通过运行使用 Docker 映像创建容器 docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
  3. 通过访问 localhost:8080 验证 Jenkins 是否已启动并运行
  4. 然后,您将看到一个页面(如下所示),要求您输入管理员密码,您可以在 docker 日志中找到该密码

5. 安装推荐的插件。

6. 创建第一个管理员用户。

7. 然后你会看到 Jenkins 仪表板。

设置 Jenkins 工作

一旦 Jenkins 启动并运行,我们可以继续设置一个作业来自动运行我们的 Go 应用程序的构建和测试(在本示例中托管在私有 GitHub 存储库中)。

首先,我们必须安装 Go 插件,它为构建设置了 Golang 工具。为此,请单击左侧菜单上的管理 Jenkins,然后单击管理插件,然后在可用选项卡下搜索“Go Plugin”(我已经安装了我的插件,因此它出现在已安装选项卡中)。

然后,我们必须在全局工具配置中添加我们感兴趣的 Go 版本(也在 Manage Jenkins 中)。给它起一个名字,稍后在设置 Jenkins 作业时需要参考它。

设置完成后,我们可以开始创建 Jenkins 作业,在本示例中,我们将查看管道。它可以通过单击左侧菜单上的新项目然后选择管道来触发。

然后我们可以开始创建我们的管道。在 Build Triggers 选项卡中,有各种选项。您可以在 GitHub 存储库上创建一个 webhook,只要有拉取请求,它就可以在 Jenkins 上触发构建,或者您可以根据 Jenkins 上的另一个构建结果触发构建。我们还可以安排它使用 cron 表达式运行。

接下来是管道脚本,我们在其中定义要在每个阶段执行的步骤。Jenkins 有两种方法来检索管道脚本,从配置本身或从存储库中提取。

在上面的屏幕截图中,我们将使用存储库中定义的 Jenkinsfile。让我们深入了解管道脚本。

 pipeline {
    agent any
    tools {
        go 'go1.14'
    }
    environment {
        GO114MODULE = 'on'
        CGO_ENABLED = 0 
        GOPATH = "${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_ID}"
    }
    stages {        
        stage('Pre Test') {
            steps {
                echo 'Installing dependencies'
                sh 'go version'
                sh 'go get -u golang.org/x/lint/golint'
            }
        }
        
        stage('Build') {
            steps {
                echo 'Compiling and building'
                sh 'go build'
            }
        }

        stage('Test') {
            steps {
                withEnv(["PATH+GO=${GOPATH}/bin"]){
                    echo 'Running vetting'
                    sh 'go vet .'
                    echo 'Running linting'
                    sh 'golint .'
                    echo 'Running test'
                    sh 'cd test && go test -v'
                }
            }
        }
        
    }
    post {
        always {
            emailext body: "${currentBuild.currentResult}: Job ${env.JOB_NAME} build ${env.BUILD_NUMBER}\n More info at: ${env.BUILD_URL}",
                recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']],
                to: "${params.RECIPIENTS}",
                subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}"
            
        }
    }  
}  

Jenkinsfile 的解释:

  1. 一开始,我们将定义 agent 为any。这意味着 Jenkins 将分配任何可用的执行程序,无论它是如何标记或配置的。
  2. 在工具中,我们将指定构建工具,在这种情况下,我们将使用我们之前在全局工具配置中定义的“go1.14”。
  3. 然后我们将设置环境变量,就像我们在本地机器上运行 Go 应用程序时设置它的方式一样。
  4. 然后我们将定义我们的阶段:我们安装所有依赖项的预测试,我们将编译和构建我们的 Go 应用程序的构建,运行单元测试的测试等。您也可以添加其他阶段。
  5. 最后但并非最不重要的是 post 部分,它可以在各种条件下运行,例如始终、不稳定、成功、失败和在所有阶段执行后更改。在此示例中,无论构建状态如何,我们都会触发电子邮件通知。

运行 Jenkins 作业

设置作业后,我们现在可以通过 Build / Build with Parameters 按钮手动执行运行,也可以通过计划运行或触发 GitHub 存储库中的 webhook 自动执行运行。

以上显示了 Jenkins 流水线概览的示例。一目了然,我们可以看到过去的构建历史以及失败的阶段。我们还可以深入挖掘特定阶段的日志以查看失败的原因。

相关文章