Jenkins 是一个基于 Java 的开源自动化工具,支持构建、部署和自动化任何软件开发项目。它易于安装,并且带有许多插件(感谢活跃的社区!),您可以在自动化过程中使用它们。
Jenkins 可以安装在各种平台上,无论是在本地机器上、在云端还是在 Docker 平台上。如果选择直接在机器上安装 Jenkins,则必须先安装 Java。
在这个例子中,我们将着眼于在 Docker 平台上安装 Jenkins,当然前提是已经安装了 Docker。

5. 安装推荐的插件。
6. 创建第一个管理员用户。
7. 然后你会看到 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}
More info at: ${env.BUILD_URL}",
recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'RequesterRecipientProvider']],
to: "${params.RECIPIENTS}",
subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}"
}
}
}Jenkinsfile 的解释:
设置作业后,我们目前可以通过 Build / Build with Parameters 按钮手动执行运行,也可以通过计划运行或触发 GitHub 存储库中的 webhook 自动执行运行。

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