jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)

注:这部分的学习还是要靠自己多点点 多尝试尝试
这部分19年3月份我是玩的很溜的,一年没用,基本忘光光了。
学习要温故而知新!

流程拓扑图

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第1张图片

前提准备

部署应用服务

部署kubernetes 集群:https://www.cnblogs.com/zisefeizhu/p/12505117.html

部署ceph集群:https://www.cnblogs.com/zisefeizhu/p/12512377.html

部署harbor:https://www.cnblogs.com/zisefeizhu/p/12329864.html

部署jenkins:https://www.cnblogs.com/zisefeizhu/p/12499084.html

部署gitlab:https://www.cnblogs.com/zisefeizhu/p/12524824.html

检查集群状态

kubernetes集群
# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-1               Healthy   {"health":"true"}   
etcd-2               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}   
# kubectl get nodes
NAME         STATUS                     ROLES    AGE     VERSION
20.0.0.201   Ready,SchedulingDisabled   master   4d22h   v1.17.2
20.0.0.202   Ready,SchedulingDisabled   master   4d22h   v1.17.2
20.0.0.203   Ready,SchedulingDisabled   master   4d22h   v1.17.2
20.0.0.204   Ready                      node     4d22h   v1.17.2
20.0.0.205   Ready                      node     4d22h   v1.17.2
20.0.0.206   Ready                      node     4d22h   v1.17.2
# kubectl get pods -n assembly
NAME                              READY   STATUS             RESTARTS   AGE
jenkins-0                         1/1     Running            2          74m
rbd-provisioner-9cf46c856-ngxwn   1/1     Running            1          65m

ceph集群
# ceph -s
......

    health: HEALTH_OK

gitlab创建项目
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第2张图片

创建组:**

使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第3张图片

使用管理员创建项目

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第4张图片
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第5张图片
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第6张图片

免密钥拉取gitlab 代码

# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFLo3T4x0JJeOg7rzTXrjuxQMj+Y39j6wan6lO4nI5Zj5Z7YKy4YUjVy/i3iYTycyvVHCwfds/yGUxdoGIt/IfyGbH4XYtFTdJwh+8y1lBNwYxiGN9103n1JlrK08GjFj73vhSduLATEiUx2mLyVd3D26aE51RrxW+sK1PSN0EzMNPJiJLRDVbOYA8sd+xloWbNOFKJu9ecKzvy57Z8c8ohRnm3xZ23tHZdGdRTfN8LBXkAPUB7jA8SkXOpSMg9qj/BajFf7FPynNQr16AmiIU7F9PDl6JM1fWgs6SQyTezw1CK1oXcIAZLNIMTrtX/vd0ZY+ml+luyuZtLuRIKPRN root@bs-k8s-gitlab


# git clone [email protected]:web-test/app1.git
正克隆到 'app1'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
接收对象中: 100% (3/3), done.
[root@bs-k8s-gitlab ~]# cd app1/
[root@bs-k8s-gitlab app1]# cat index.html 
Tomcat app1 v1[root@bs-k8s-gitlab app1]# echo zisefeizhu >> index.html 
[root@bs-k8s-gitlab app1]# git add .
[root@bs-k8s-gitlab app1]# git commit -m "Testing gitlab and jenkins Connection #1"
[master f21339a] Testing gitlab and jenkins Connection #1
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@bs-k8s-gitlab app1]# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:web-test/app1.git
   1198095..f21339a  master -> master

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第7张图片

jenkins配置插件

插件安装

Git plugin        git 
GitLab Plugin     gitlab 
Kubernetes plugin 动态创建代理 
Pipeline          流水线 
Email Extension   邮件扩展
Extended Choice Parameter

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第8张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第9张图片

gitlab触发jenkins

gitlab生成token

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第10张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第11张图片

复制此token,此token只显示一次:8YJobWVnZri-chf-QakJ

jenkins配置连接gitlab

系统管理 --> 系统设置 --> gitlab

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第12张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第13张图片

创建jenkins任务

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第14张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第15张图片

http://20.0.0.202:30006/project/gitlab-citest-pipeline 这个地址用来设置gitlab的webhook。

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第16张图片

token: c8124514f0d3f60588a707470be57bca

gitlab设置webhooks

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第17张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第18张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第19张图片

提交代码至gitlab触发jenkins任务

# git clone [email protected]:web-test/app1.git
正克隆到 'app1'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), done.
# cd app1/
# echo zisefeizhu >> index.html 
# git add .
# git commit -m "Testing gitlab and jenkins Connection #1"
[master f1005f8] Testing gitlab and jenkins Connection #1
 1 file changed, 1 insertion(+)
# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 289 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:web-test/app1.git
   f21339a..f1005f8  master -> master

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第20张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第21张图片

显示任务由gitlab触发的。

Jenkins Pipeline 及参数化构建

**Jenkins参数化构建流程图 ** 【网图】
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第22张图片

Jenkins Pipeline是一套插件,支持在Jenkins中实现集成和持续交付管道;

  • Pipeline通过特定语法对简单到复杂的传输管道进行建模;
    1. 声明式:遵循与Groovy相同语法。pipeline { }
    2. 脚本式:支持Groovy大部分功能,也是非常表达和灵活的工具。node { }
  • Jenkins Pipeline的定义被写入一个文本文件,称为Jenkinsfile。
    jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第23张图片
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying'
            }
        }
    }
}

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第24张图片

pipeline简单使用

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第25张图片

pipeline {
    agent any
        parameters {
  choice choices: ['20.0.0.208/web-test/app1.git', '20.0.0.208/web-test/app2.git', '20.0.0.208/web-test/app3.git'], description: '请选择要发布的项目git地址', name: 'git'
  choice choices: ['20.0.0.204', '20.0.0.205', '20.0.0.206'], description: '请选择要发布的服务器', name: 'host'
            
        }
    stages {
        stage('Build') {
            steps {
                echo "${git}"
            }
        }
        stage('Test') {
            steps {
                echo 'Testing'
            }
        }
        stage('Deploy') {
            steps {
                echo "${host}"
            }
        }
    }
}

构建发布测试
jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第26张图片

jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)_第27张图片

Started by user zisefeizhu
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/gitlab-citest-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
20.0.0.208/web-test/app2.git
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] echo
Testing
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] echo
20.0.0.205
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

你可能感兴趣的:(jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一))