jenkins 部署golang 应用到k8s与测试环境

1.宿主机安装jenkins 不要用docker

为什么:docker jenkins你只有jenkins, 你想做golang编译的情况,它的镜像里面缺少go环境。

而宿主机安装的情况,jenkins是可以通过环境变量修改来访问宿主机里面安装的内容。

2.插件

// docker镜像构建

Docker Pipeline

// 推送k8s

Kubernetes CLI Plugin

stage 时间可视化

Pipeline: Stage View Plugin

飞书通知

https://github.com/721806280/lark-notice-plugin

3.agent

没用到高级功能,系统默认即可

vi CentOS-Base.repo

sudo yum clean all

sudo yum makecache

sudo yum update -y

yum -y intall git jenkins

yum -y install jenkins

yum -y install docker

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum list docker-ce --showduplicates

yum list docker-ce --showduplicates|sort -r

yum install docker-ce

systemctl start docker

systemctl status docker

systemctl enable docker

yum install -y yum-utils device-mapper-persistent-data lvm2

sudo yum install epel-release

yum -y install git vim wget nginx

sudo yum install java-11-openjdk-devel

sudo update-alternatives --config java

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kubectl version --client

kubectl version --client --output=yaml

wget https://golang.google.cn/dl/go1.22.3.darwin-amd64.tar.gz # 解压后,放到/usr/local/ 目录后,记得修改 /etc/bashrc, 修改PATH

repo

epel.repo

jenkins.repo

docker-ce.repo

CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

url 后缀会导致报错。需要systemctl edit jenkins

[Service]

Environment="JENKINS_PREFIX=/jenkins"

保存退出

权限:

GOPATH 放置在jenkins 用户有权限访问的地方

sudo usermod -aG docker jenkins # 给jenkins 开放docker执行权限

记得重启jenkins

docker login registry.jiaxianghudong.com 在宿主机配置

go 环境在宿主机配置

accessToken 可以配置在creditials里面,username,password

参考链接

https://blog.csdn.net/qq_33371766/article/details/137413858

https://baijiahao.baidu.com/s?id=1796281020927178690\&wfr=spider\&for=pc

docker ce

https://baijiahao.baidu.com/s?id=1796281020927178690\&wfr=spider\&for=pc

jenkins

https://blog.csdn.net/qq_33371766/article/details/137413858

送上模板一份

def job_name = env.JOB_NAME.split('test-')
def job = job_name[1]

pipeline {
    agent any
    environment {
        GOPATH = '/data/go'
        GOROOT = '/usr/local/go' // 如果需要的话
        PATH = "$GOROOT/bin:$PATH"
        GOPRIVATE='gitee.com/xxxx/*'
        GOPROXY='https://goproxy.cn,direct'
        CGO_ENABLED='0'
        GOOS='linux'
        GOARCH='amd64'
        GIT_TERMINAL_PROMPT='1'
		job="$job"
    }
    stages {
        stage('Checkout') {
        	steps {
				checkout([$class: 'GitSCM', 
					branches: [[name: '*/Develop']], 
					doGenerateSubmoduleConfigurations: false, 
					extensions: [], 
					userRemoteConfigs: [[
						url: "https://gitee.com/xxxx/${job}.git",
						credentialsId: 'card-trade2'
					]]
				])
			}
		}
		stage('Build') {
			steps {
				script {
					withCredentials([usernamePassword(credentialsId: 'card-trade2', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
						println "开始编译"
						sh '''
						set +x
						go mod tidy
						echo "运行go build"
						echo $(pwd)
						go build -o ${job} -buildvcs=false -v
						'''
					}	
				}
			}
		}
		stage('构建镜像') {
			steps {
				script {
					sh '''
                set +x
                tee Dockerfile <<-EOF
FROM registry.xxxx.com/jiaxiang/alpine-cst:1.35

WORKDIR /go/bin
ADD ${job} /go/bin
ADD config.yaml /go/bin
ADD configs /go/bin/configs
RUN chmod +x /go/bin/${job}
CMD ["/go/bin/${job}","--config", "config.yaml"]
EOF
            '''
					docker.withRegistry("https://registry.xxxx.com", "registry-jiaxiang") {
						def app = docker.build "registry.xxxx.com/jiaxiang/card-trade-v3.${job}:${env.BUILD_ID}"
						app.push "${env.BUILD_ID}"
					}
				}
			}
		}
		stage('更新镜像') {
			steps {
				script {
					def parameter = "registry.xxxx.com/jiaxiang/card-trade-v3.${job}:${env.BUILD_ID}"
					withCredentials([sshUserPrivateKey(credentialsId: 'sshpass', keyFileVariable: 'SSH_KEY')]) {
						// 构建SSH命令,包括传递的参数和凭据
						sh "ssh -i $SSH_KEY -o StrictHostKeyChecking=no xxxr@47.11.52.1 'sudo /bin/bash dockerupdatemallapi.sh \"$parameter\"'"
					}
				}
			}
		}
		stage('更新k8s') {
            steps {
                script {
                    println "更新镜像为 ${image} job is ${job}"
                    withKubeConfig([credentialsId: "k8s_config"]) {
                        sh "kubectl set image deploy ${job} -n card-trade ${job}=${image}"
                    }
                }
            }
        }
	}
}
相关推荐
Karoku0662 小时前
【CI/CD】CI/CD环境搭建流程和持续集成环境配置
运维·ci/cd·docker·容器·kubernetes·prometheus
闲猫5 小时前
go orm GORM
开发语言·后端·golang
丁卯4046 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
!!!5259 小时前
华为云镜像加速器
docker·容器·华为云
chenbin52010 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯10 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
sszdzq11 小时前
Docker
运维·docker·容器
dmy12 小时前
docker 快速构建开发环境
后端·docker·容器
陆鳐LuLu13 小时前
日志管理利器:基于 ELK 的日志收集、存储与可视化实战
运维·elk·jenkins
[奋斗不止]13 小时前
Jenkins 配置 Credentials 凭证
jenkins·jenkins 配置凭证