jenkins集成K8S架构图解
安装jenkins
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
apt update
apt install fontconfig
[root@jenkins211 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/jdk-17_linux-x64_bin.tar.gz
[root@jenkins211 ~]# tar xf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
[root@jenkins211 ~]#
[root@jenkins211 ~]# cat /etc/profile.d/jdk.sh
#!/bin/bash
export JDK_HOME=/usr/local/jdk-17.0.8
export PATH=$PATH:$JDK_HOME/bin
[root@jenkins211 ~]#
[root@jenkins211 ~]# source /etc/profile.d/jdk.sh
[root@jenkins211 ~]#
[root@jenkins211 ~]# java --version
java 17.0.8 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)
[root@jenkins211 ~]#
[root@jenkins211 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/jenkins-v2.479.3/jenkins_2.479.3_all.deb
[root@jenkins211 ~]# dpkg -i jenkins_2.479.3_all.deb
[root@jenkins211 ~]# vim /lib/systemd/system/jenkins.service
...
36 #User=jenkins
37 #Group=jenkins
38 User=root
39 Group=root
40
41 # Directory where Jenkins stores its configuration and workspaces
42 Environment="JENKINS_HOME=/var/lib/jenkins"
43 Environment="JAVA_HOME=/usr/local/jdk-17.0.8"
...
[root@jenkins211 ~]# systemctl enable --now jenkins
Synchronizing state of jenkins.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable jenkins
[root@jenkins211 ~]#
[root@jenkins211 ~]# ss -ntl |grep 8080
LISTEN 0 50 *:8080 *:*
[root@jenkins211 ~]#
[root@jenkins211 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
5f062a5790ea46bb9df6bc6866a39543
[root@jenkins211 ~]#
jenkins安装常用的插件及管理员密码初始化
[root@jenkins211 ~]# ll /var/lib/jenkins/
total 52
drwxr-xr-x 8 jenkins jenkins 4096 Apr 11 09:43 ./
drwxr-xr-x 61 root root 4096 Apr 11 09:39 ../
-rw-r--r-- 1 root root 1660 Apr 11 09:43 config.xml
-rw-r--r-- 1 root root 156 Apr 11 09:43 hudson.model.UpdateCenter.xml
-rw-r--r-- 1 root root 171 Apr 11 09:43 jenkins.telemetry.Correlator.xml
drwxr-xr-x 2 root root 4096 Apr 11 09:43 jobs/
-rw-r--r-- 1 root root 0 Apr 11 09:43 .lastStarted
-rw-r--r-- 1 root root 1037 Apr 11 09:43 nodeMonitors.xml
drwxr-xr-x 2 root root 4096 Apr 11 09:43 plugins/
-rw-r--r-- 1 root root 64 Apr 11 09:43 secret.key
-rw-r--r-- 1 root root 0 Apr 11 09:43 secret.key.not-so-secret
drwx------ 2 root root 4096 Apr 11 09:43 secrets/
drwxr-xr-x 2 root root 4096 Apr 11 09:43 updates/
drwxr-xr-x 2 root root 4096 Apr 11 09:43 userContent/
drwxr-xr-x 3 root root 4096 Apr 11 09:43 users/
[root@jenkins211 ~]#
[root@jenkins211 ~]# ll /var/lib/jenkins/plugins/
total 8
drwxr-xr-x 2 root root 4096 Apr 11 09:43 ./
drwxr-xr-x 8 jenkins jenkins 4096 Apr 11 09:43 ../
[root@jenkins211 ~]#
参考链接:
https://www.cnblogs.com/lax/p/18563962
[root@jenkins211 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/jenkins-v2.479.3/violet-jenkins-2.479.3-plugins.tar.gz
[root@jenkins211 ~]# tar xf violet-jenkins-2.479.3-plugins.tar.gz -C /var/lib/jenkins/plugins/
[root@jenkins211 ~]#
[root@jenkins211 ~]# ll /var/lib/jenkins/plugins/ |wc -l
227
[root@jenkins211 ~]#
[root@jenkins211 ~]# systemctl restart jenkins.service
彩蛋:【可以在web界面重启】
http://10.0.0.211:8080/restart
http://10.0.0.211:8080/user/admin/security/
建议密码为: "1"
模拟开发人员推送代码到仓库
略
[root@worker233 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/violet-yiliao.zip
[root@worker233 ~]# mkdir violet-linux96-yiliao
[root@worker233 ~]#
[root@worker233 ~]# unzip violet-yiliao.zip -d violet-linux96-yiliao/
[root@worker233 ~]# cd violet-linux96-yiliao/
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# ll
total 224
drwxr-xr-x 5 root root 4096 Apr 11 10:06 ./
drwx------ 11 root root 4096 Apr 11 10:06 ../
-rw-r--r-- 1 root root 16458 Jun 13 2019 about.html
-rw-r--r-- 1 root root 20149 Jun 13 2019 album.html
-rw-r--r-- 1 root root 19662 Jun 13 2019 article_detail.html
-rw-r--r-- 1 root root 18767 Jun 13 2019 article.html
-rw-r--r-- 1 root root 18913 Jun 13 2019 comment.html
-rw-r--r-- 1 root root 16465 Jun 13 2019 contact.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 css/
drwxr-xr-x 5 root root 4096 Sep 19 2022 images/
-rw-r--r-- 1 root root 29627 Jun 29 2019 index.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 js/
-rw-r--r-- 1 root root 24893 Jun 13 2019 product_detail.html
-rw-r--r-- 1 root root 20672 Jun 13 2019 product.html
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# git config --global user.name "lax"
[root@worker233 violet-linux96-yiliao]# git config --global user.email "y1053419035@qq.com"
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /root/violet-linux96-yiliao/.git/
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# ll
total 232
drwxr-xr-x 6 root root 4096 Apr 11 10:13 ./
drwx------ 11 root root 4096 Apr 11 10:13 ../
-rw-r--r-- 1 root root 16458 Jun 13 2019 about.html
-rw-r--r-- 1 root root 20149 Jun 13 2019 album.html
-rw-r--r-- 1 root root 19662 Jun 13 2019 article_detail.html
-rw-r--r-- 1 root root 18767 Jun 13 2019 article.html
-rw-r--r-- 1 root root 18913 Jun 13 2019 comment.html
-rw-r--r-- 1 root root 16465 Jun 13 2019 contact.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 css/
-rw-r--r-- 1 root root 185 Apr 11 10:08 Dockerfile
drwxr-xr-x 7 root root 4096 Apr 11 10:13 .git/
drwxr-xr-x 5 root root 4096 Sep 19 2022 images/
-rw-r--r-- 1 root root 29627 Jun 29 2019 index.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 js/
-rw-r--r-- 1 root root 24893 Jun 13 2019 product_detail.html
-rw-r--r-- 1 root root 20672 Jun 13 2019 product.html
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# cat Dockerfile
FROM harbor250.violet.com/violet-xiuxian/apps:v1
MAINTAINER Jason Yin
LABEL school=violet \
class=linux96 \
email=y1053419035@qq.com
ADD . /usr/share/nginx/html
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# cat .dockerignore
.git/*
[root@worker233 violet-linux96-yiliao]#
[root@worker233 violet-linux96-yiliao]# git add .
[root@worker233 violet-linux96-yiliao]# git commit -m 'violet yiliao'
[root@worker233 violet-linux96-yiliao]# git remote add origin https://gitee.com/jasonyin2020/violet-linux96-yiliao.git
[root@worker233 violet-linux96-yiliao]# git push -u origin "master"
Username for 'https://gitee.com': jasonyin2020
Password for 'https://jasonyin2020@gitee.com':
Enumerating objects: 92, done.
Counting objects: 100% (92/92), done.
Delta compression using up to 2 threads
Compressing objects: 100% (91/91), done.
Writing objects: 100% (92/92), 1.48 MiB | 4.69 MiB/s, done.
Total 92 (delta 11), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b445e5af
To https://gitee.com/jasonyin2020/violet-linux96-yiliao.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
[root@worker233 violet-linux96-yiliao]#
https://gitee.com/jasonyin2020/violet-linux96-yiliao
jenkins从gitee拉取代码并推送到harbor仓库
[root@jenkins211 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/lax-autoinstall-docker-docker-compose.tar.gz
[root@jenkins211 ~]# tar xf lax-autoinstall-docker-docker-compose.tar.gz
[root@jenkins211 ~]#
[root@jenkins211 ~]# ./install-docker.sh i
[root@jenkins211 ~]# scp -r 10.0.0.250:/etc/docker/certs.d/ /etc/docker/
略
docker login -u admin -p 1 harbor250.violet.com
docker build -t harbor250.violet.com/violet-yiliao/linux96:v1 .
docker push harbor250.violet.com/violet-yiliao/linux96:v1
docker logout harbor250.violet.com
略
略
jenkins参数化构建及响应式更新deploy
[root@master231 jenkins]# kubectl create deployment yiliao --image=harbor250.violet.com/violet-yiliao/linux96:v1 --replicas=3
deployment.apps/yiliao created
[root@master231 jenkins]#
[root@master231 jenkins]# kubectl get deploy,rs,pods -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
deployment.apps/yiliao 3/3 3 3 48s linux96 harbor250.violet.com/violet-yiliao/linux96:v1 app=yiliao
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
replicaset.apps/yiliao-6ffffb5c6b 3 3 3 48s linux96 harbor250.violet.com/violet-yiliao/linux96:v1 app=yiliao,pod-template-hash=6ffffb5c6b
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/yiliao-6ffffb5c6b-7vw7t 1/1 Running 0 48s 10.100.140.96 worker233 <none> <none>
pod/yiliao-6ffffb5c6b-gtt9r 1/1 Running 0 48s 10.100.203.167 worker232 <none> <none>
pod/yiliao-6ffffb5c6b-stphh 1/1 Running 0 48s 10.100.140.97 worker233 <none> <none>
[root@master231 jenkins]#
[root@master231 jenkins]#
[root@master231 jenkins]# kubectl expose deployment yiliao --port=80 --type=LoadBalancer
service/yiliao exposed
[root@master231 jenkins]#
[root@master231 jenkins]# kubectl get svc yiliao
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
yiliao LoadBalancer 10.200.207.13 10.0.0.150 80:31111/TCP 13s
[root@master231 jenkins]#
3.1 添加选项参数
略
3.2 引用变量
docker login -u admin -p 1 harbor250.violet.com
docker build -t harbor250.violet.com/violet-yiliao/linux96:${version} .
docker push harbor250.violet.com/violet-yiliao/linux96:${version}
docker logout harbor250.violet.com
[root@master231 jenkins]# kubectl set image deploy yiliao linux96=harbor250.violet.com/violet-yiliao/linux96:v2
deployment.apps/yiliao image updated
[root@master231 jenkins]#
http://10.0.0.150/
jenkins基于选项参数实现K8S的服务更新
[root@jenkins211 ~]# wget http://192.168.16.253/Resources/Kubernetes/softwares/jenkins/kubectl-1.23.17
[root@jenkins211 ~]# mv kubectl-1.23.17 /usr/local/bin/kubectl
[root@jenkins211 ~]#
[root@jenkins211 ~]# chmod +x /usr/local/bin/kubectl
[root@jenkins211 ~]#
[root@jenkins211 ~]# ll /usr/local/bin/kubectl
-rwxr-xr-x 1 root root 45174784 Sep 4 2023 /usr/local/bin/kubectl*
[root@jenkins211 ~]#
[root@jenkins211 ~]# scp 10.0.0.231:/root/.kube/config /root/.kube/
[root@jenkins211 ~]#
[root@jenkins211 ~]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master231 Ready control-plane,master 4d v1.23.17 10.0.0.231 <none> Ubuntu 22.04.4 LTS 5.15.0-136-generic docker://20.10.24
worker232 Ready <none> 4d v1.23.17 10.0.0.232 <none> Ubuntu 22.04.4 LTS 5.15.0-119-generic docker://20.10.24
worker233 Ready <none> 20h v1.23.17 10.0.0.233 <none> Ubuntu 22.04.4 LTS 5.15.0-119-generic docker://20.10.24
[root@jenkins211 ~]#
docker login -u admin -p 1 harbor250.violet.com
docker build -t harbor250.violet.com/violet-yiliao/linux96:${version} .
docker push harbor250.violet.com/violet-yiliao/linux96:${version}
docker logout harbor250.violet.com
kubectl set image deploy yiliao linux96=harbor250.violet.com/violet-yiliao/linux96:${version}
jenkins判断服务是首次部署还是更新
docker login -u admin -p 1 harbor250.violet.com
docker build -t harbor250.violet.com/violet-yiliao/linux96:${version} .
docker push harbor250.violet.com/violet-yiliao/linux96:${version}
docker logout harbor250.violet.com
if [ `kubectl get pods -l app=yiliao | wc -l` -eq 0 ] ; then
kubectl create deployment yiliao --image=harbor250.violet.com/violet-yiliao/linux96:${version} --port=80 --replicas=3
kubectl expose deployment yiliao --port=80 --type=LoadBalancer
else
kubectl set image deploy yiliao linux96=harbor250.violet.com/violet-yiliao/linux96:${version}
kubectl scale deployment yiliao --replicas=5
fi
略
Jenkins的pipeline实现全流程
- 1.基于pipeline构建项目(注意你的凭据ID,是不是’gitee2’,这个认证凭据可以在jenkins的webUI查看。)
pipeline {
agent any
stages {
stage('从gitee拉取代码') {
steps {
git credentialsId: 'gitee2', url: 'https://gitee.com/jasonyin2020/violet-linux96-yiliao.git'
}
}
stage('编译镜像') {
steps {
sh 'docker build -t harbor250.violet.com/violet-yiliao/linux96:${BUILD_NUMBER} .'
}
}
stage('推送镜像到harbor仓库') {
steps {
sh '''docker login -u admin -p 1 harbor250.violet.com
docker push harbor250.violet.com/violet-yiliao/linux96:${BUILD_NUMBER}
docker logout harbor250.violet.com'''
}
}
stage('部署或更新医疗项目') {
steps {
sh '''if [ `kubectl get pods -l app=yiliao | wc -l` -eq 0 ] ; then
kubectl create deployment yiliao --image=harbor250.violet.com/violet-yiliao/linux96:${BUILD_NUMBER} --port=80 --replicas=3
kubectl expose deployment yiliao --port=80 --type=LoadBalancer
else
kubectl set image deploy yiliao linux96=harbor250.violet.com/violet-yiliao/linux96:${BUILD_NUMBER}
kubectl scale deployment yiliao --replicas=5
fi'''
}
}
}
}
略