管道的实际工作被定义在所谓的阶段中。阶段代表了可以执行一个或多个步骤的单个步骤的组合。我们将定义以下阶段来演示Go项目的典型流水线。
-
编译。编译软件包和依赖性。
-
测试。运行单元测试,并将覆盖率指标发布到Codecov。
-
代码质量。使用golangci-lint 对源代码进行代码质量分析。
-
发布。使用GoReleaser构建并发布二进制文件。
Jenkins的流水线可视化渲染了流水线的每个阶段,如图2所示。你可能已经注意到,最后一个阶段还没有被执行。我们将配置 "发布 "阶段,使其只在提交被标记的情况下运行。

图2.Jenkins中的标准流水线可视化
让我们通过添加上述阶段来完成流水线的定义。在列表2中,你可以看到每个阶段的相关shell命令。对于某些命令,你必须通过定义环境变量或凭证来设置访问令牌。
pipeline {
...
stages {
stage('Compile') {
steps {
sh 'go build'
}
}
stage('Test') {
environment {
CODECOV_TOKEN = credentials('codecov_token')
}
steps {
sh 'go test ./... -coverprofile=coverage.txt'
sh "curl -s https://codecov.io/bash | bash -s -"
}
}
stage('Code Analysis') {
steps {
sh 'curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- -b $GOPATH/bin v1.12.5'
sh 'golangci-lint run'
}
}
stage('Release') {
when {
buildingTag()
}
environment {
GITHUB_TOKEN = credentials('github_token')
}
steps {
sh 'curl -sL https://git.io/goreleaser | bash'
}
}
}
}
清单2.Go项目的典型CI阶段
一旦你对管道定义满意,确保提交并推送Jenkinsfile到远程仓库。现在,我们已经准备好在Jenkins中建立管道工作了。