Automate Go Builds with Jenkins on Kubernetes: A Step‑by‑Step Guide
Learn how to set up a Jenkins pipeline that automatically pulls a Go project from GitLab, resolves dependencies, compiles the binary, and packages it within a Kubernetes‑based build environment, complete with detailed code snippets and tips for handling network and credential issues.
In today’s fast‑paced software development, manual compile, test and deploy are outdated. As an operations engineer, we aim for efficient, stable, repeatable automation, and Jenkins remains a top CI/CD tool due to its flexibility and rich plugin ecosystem.
Prerequisites
Running Jenkins service
Installed pipeline, Git and Credentials plugins
Downloaded Golang Docker image
Original project packaging steps
1. Project directory structure
<code>$ ls
app bootstrap config Dockerfile go.mod go.sum Jenkinsfile main.go README.md</code>2. Download dependencies
<code>$ go mod tidy</code>Tip: Ensure the build environment can access the network to download dependencies.
3. Compile
<code>$ go build -ldflags "-X 'simple/app/controllers.Branch=$VERSION' -X 'simple/app/controllers.BuildTime=$BuildTime'" .
$ ls -l simple
-rwxrwxr-x. 1 ops ops 8845977 May 14 17:04 simple</code>Tip: The compiled binary is named
simple.
Jenkins pipeline for Go program
Summary of steps:
Git pull code (requires GitLab credentials)
Download dependencies (requires network)
Compile
The Jenkins agent container already includes the
gitcommand, so no extra Git installation is needed, but GitLab credentials must be configured.
Stage: Pull code
<code>stage('拉取代码') {
steps {
// Disable SSL verification for Git
sh 'git config --global http.sslverify false; git config --global https.sslverify false'
git branch: 'v1.3.3', credentialsId: 'gitlab-jiaxzeng', url: 'https://gitlab.jiaxzeng.com/jiaxzeng/simple.git'
}
}</code>Stage: Compile
<code>stage('编译') {
steps {
container("golang") {
sh """
cd ${WORKSPACE_PATH}
go env -w GOPROXY=https://proxy.golang.com.cn,direct
go mod tidy
go build -ldflags "-X 'simple/app/controllers.Branch=$VERSION' -X 'simple/app/controllers.BuildTime=$BuildTime'" .
"""
}
}
}</code>Full pipeline file
<code>pipeline {
agent {
kubernetes {
cloud 'kubernetes'
inheritFrom 'default'
namespace 'jenkins'
yaml '''
kind: Pod
spec:
containers:
- name: golang
image: core.jiaxzeng.com/library/golang:1.23.8-alpine
command:
- cat
tty: true
workingDir: /home/jenkins/agent
'''
}
}
stage('拉取代码') {
steps {
sh 'git config --global http.sslverify false; git config --global https.sslverify false'
git branch: '$VERSION', credentialsId: 'gitlab-jiaxzeng', url: 'https://gitlab.jiaxzeng.com/jiaxzeng/simple.git'
}
}
stage('编译') {
steps {
container("golang") {
sh """
cd ${WORKSPACE_PATH}
go env -w GOPROXY=https://proxy.golang.com.cn,direct
go mod tidy
go build -ldflags "-X 'simple/app/controllers.Branch=$VERSION' -X 'simple/app/controllers.BuildTime=$BuildTime'" .
"""
}
}
}
}
</code>By following this guide, you have mastered the core skills to automate building a Golang project with Jenkins, enabling automatic compile, test, package, and deployment after code submission, thereby greatly improving delivery efficiency and system stability.
Linux Ops Smart Journey
The operations journey never stops—pursuing excellence endlessly.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.