加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Jenkins+K8s实现持续集成

(2022-03-22 09:25:42)
标签:

jenkinsk8s

jenkins

kubernetes

docker

一. 当前环境

已有完整的kubernetes环境,具体步骤查看kubeadm安装kubernetes(k8s)
192.168.23.39 - master地址 - jenkins安装地址

二.搭建私有镜像仓库

1.拉取镜像 -  && docker pull konradkleine/docker-registry-frontend:v2

docker pull registry - 私有仓库镜像
docker pull konradkleine/docker-registry-frontend:v2 - 镜像可视化

2.启动私有镜像仓库 - docker run -itd -e REGISTRY_STORAGE_DELETE_ENABLED=true -p 5000:5000 -v /www/wwwroot/private_registry:/var/lib/registry --name private_registry registry

3.镜像可视化

docker run -d --restart=always -e ENV_DOCKER_REGISTRY_HOST=192.168.23.39 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 9011:80 konradkleine/docker-registry-frontend:v2

注:v2版可用,latest版本不可用,暂未研究

3.私有仓库部分命令

curl -XGET http://192.168.23.39:5000/v2/_catalog - 查看当前仓库
curl -XGET http://192.168.23.39:5000/v2/仓库名称/tags/list - 查看仓库tag
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X HEAD http://192.168.23.39:5000/v2/仓库名称/manifests/tag名称 - 查看sha256
curl -v -X DELETE http://192.168.23.39:5000/v2/仓库名称/manifests/tag-sha256 - sha256:值 - 删除tag

4.增加私有镜像源

vim /etc/docker/daemon.json
增加
"insecure-registries": [
"192.168.23.39:5000"
],

注:insecure-registries为http协议镜像仓库

三.安装jenkins - 根据官网步骤

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install -y java-11-openjdk
yum install -y jenkins
systemctl start jenkins
systemctl daemon-reload
访问 - http://192.168.23.39:8080/

四.将jenkins用户添加到docker用户组

gpasswd -a jenkins docker
systemctl restart jenkins

五.安装jenkins插件

Plugin Manager -> 搜索安装 Role-based Authorization Strategy/Authorize Project -> 配置 Configure Global Security -> 允许用户注册/匿名用户具有可读权限 - jenkins权限管理

Plugin Manager -> 搜索安装 kubernetes - kubernetes插件

六.新建pipeline任务

新建任务 -> pipeline

流水线语法:

pipeline {
    agent any

    stages {
        stage('clone') {
            steps {
                echo 'clone' // 拉取代码
            }
        }
        stage('build go') {
            steps {
                echo 'build go' // 编译可执行文件
            }
        }
        stage('build image') {
            steps {
                echo 'build image' // 制作代码镜像
            }
        }
        stage('push image') {
            steps {
                echo 'push image' // 推送到私有仓库
            }
        }
        stage('deploy') {
steps {
echo 'deploy' // 部署代码
}
}
    }
}

七.使用流水线语法

1.git

选择git -> 输入仓库 URL -> 添加凭据:类型为Username with password -> 生成流水线脚本
git credentialsId: 'git-用户名', url: '仓库地址'

2.kubeconfig

cat /root/.kube/config
分别保存 certificate-authority-data/client-certificate-data/client-key-data的值为对应的txt文件

生成秘钥文件 - 如下
cat certificate-authority-data.txt |base64 -d > ca.crt
cat client-certificate-data.txt |base64 -d > client.crt
cat client-key-data.txt |base64 -d > client.key
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
 -- Enter Export Password:输入自定义密码
 -- Verifying - Enter Export Password:输入自定义密码

kubectl cluster-info

流水线语法选择kubeconfig:setup kubernetes CLI
填入数据
Kubernetes 服务端点:https://192.168.23.39:6443 - kubectl cluster-info可查看
Certificate of certificate authority 为 cat.crt文件内容
添加凭据:类型为Certificate
Upload PKCS#12 certificate上传cert.pfx
密码为上面输入的密码
id唯一自定义:kubernetes-pfx
描述为:kubernetes-pfx
生成流水线脚本

结果为:
kubeconfig(caCertificate: '''-----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMB4XDTIyMDMxOTA4MTAwM1oXDTMyMDMxNjA4MTAwM1owFTETMBEGA1UE
AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOMy
ekzc4rWutBV/5ATcWLirMI8mXPycEW8WpGsZF28nlFBHy50UlmcD0tViV/JDjc2e
mj9/DEWy/H81os1a8jTcyGLI8p+TKi3avDibQGe4etUDF+eJavEn5zqWEoP98ohA
HfTJijBfIaI7n/qCiHVMnwvS+2yakaMcBoNhgOCDCN9gHpNqa1xBrXIr6o1HMrv7
RQ88t26yss3e/wq3XqNApEBdk1nIkDHy/ZuFO+kTMtPPO67QBNa9LaFhKRU2/VdE
/HAGk3n5JQ604Bn8hLZmDrf11p2dDbN6K9NtKbGuOLXbN0PsLnoBMCFdiRC/Ol1t
RneY86zkPgk6FQEv15ECAwEAAaNZMFcwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
/wQFMAMBAf8wHQYDVR0OBBYEFLiwKGVC7HEf3goVSrzybGlpvWdSMBUGA1UdEQQO
MAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBABcXtzTpR+Oee8VzVQte
gqvy3DQyTOcne5CS0q+kliyY36Tfsh9mieGhhHKRlD2esWVyl25qo6D0zgDhQOem
y/QKS7/Wka3i49ygw4dxC/mJEAzMRsrCxsEFqptHXM6IMaXmsLbsil16kmMx2fLV
4g46+TKqrRmdRSYMtUTieZtl+IJU9zmQJSYxCUFLXPysknxqenGOmbqnPat9FcZ1
BkrZf7yD8fCbq50zcFtSP3d6hxiN9rbPGsNWGjkj+WXZ0EymxWVukKwX/BRuNlLP
jDVgDCeR1rMCoGMkTgm1WqjynOAn/V4dl757E5da2NeOPgCfWBIuKdqOMPo4eWUV
Mls=
-----END CERTIFICATE-----''', credentialsId: 'kubernetes-pfx', serverUrl: 'https://192.168.23.39:6443') {
--TODO
}

放入steps内部 - --TODO替换 需要执行的shell

八.最终Pipeline script
pipeline {
    agent any

    stages {
        stage('clone') {
            steps {
                echo 'clone'
                git credentialsId: 'git-用户', url: 'git地址'
            }
        }
        stage('build go') {
            steps {
                echo 'build go'
                sh 'export GO111MODULE=on && export GOPROXY=https://goproxy.cn && go mod tidy && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./run run.go'
            }
        }
        stage('build image') {
            steps {
                echo 'build image'
                sh 'rm -rf work && mkdir work && cp -a static ./work && cp -a run ./work'
                sh 'docker build -f Dockerfile -t 192.168.23.39:5000/lzc:v1 .'
            }
        }
        stage('push image') {
            steps {
                echo 'push image'
                sh 'docker push 192.168.23.39:5000/lzc:v1'
            }
        }
        stage('change yaml') {
            steps {
                echo 'change yaml'
            }
        }
        stage('deploy') {
steps {
echo 'deploy'
kubeconfig(caCertificate: '''-----BEGIN CERTIFICATE-----
MIIC/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMB4XDTIyMDMxOTA4MTAwM1oXDTMyMDMxNjA4MTAwM1owFTETMBEGA1UE
AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOMy
ekzc4rWutBV/5ATcWLirMI8mXPycEW8WpGsZF28nlFBHy50UlmcD0tViV/JDjc2e
mj9/DEWy/H81os1a8jTcyGLI8p+TKi3avDibQGe4etUDF+eJavEn5zqWEoP98ohA
HfTJijBfIaI7n/qCiHVMnwvS+2yakaMcBoNhgOCDCN9gHpNqa1xBrXIr6o1HMrv7
RQ88t26yss3e/wq3XqNApEBdk1nIkDHy/ZuFO+kTMtPPO67QBNa9LaFhKRU2/VdE
/HAGk3n5JQ604Bn8hLZmDrf11p2dDbN6K9NtKbGuOLXbN0PsLnoBMCFdiRC/Ol1t
RneY86zkPgk6FQEv15ECAwEAAaNZMFcwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
/wQFMAMBAf8wHQYDVR0OBBYEFLiwKGVC7HEf3goVSrzybGlpvWdSMBUGA1UdEQQO
MAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBABcXtzTpR+Oee8VzVQte
gqvy3DQyTOcne5CS0q+kliyY36Tfsh9mieGhhHKRlD2esWVyl25qo6D0zgDhQOem
y/QKS7/Wka3i49ygw4dxC/mJEAzMRsrCxsEFqptHXM6IMaXmsLbsil16kmMx2fLV
4g46+TKqrRmdRSYMtUTieZtl+IJU9zmQJSYxCUFLXPysknxqenGOmbqnPat9FcZ1
BkrZf7yD8fCbq50zcFtSP3d6hxiN9rbPGsNWGjkj+WXZ0EymxWVukKwX/BRuNlLP
jDVgDCeR1rMCoGMkTgm1WqjynOAn/V4dl757E5da2NeOPgCfWBIuKdqOMPo4eWUV
Mls=
-----END CERTIFICATE-----''', credentialsId: 'kubernetes-pfx', serverUrl: 'https://192.168.23.39:6443') {
                    sh 'kubectl apply -f go_app.yaml'
                }
}
}
    }
}




0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有