Jenkins+K8s实现持续集成
(2022-03-22 09:25:42)
标签:
jenkinsk8sjenkinskubernetesdocker |
一. 当前环境
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') {
}
-- Enter Export Password:输入自定义密码
-- Verifying - Enter Export
Password:输入自定义密码
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') {
sh 'kubectl apply -f go_app.yaml'
}
}
已有完整的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 {
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
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 {
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') {
}
}
}

加载中…