zoukankan      html  css  js  c++  java
  • jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(一)

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

    流程拓扑图

    前提准备

    部署应用服务

    部署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创建项目

    创建组:**

    使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。

    使用管理员创建项目



    免密钥拉取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 git@20.0.0.208: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 git@20.0.0.208:web-test/app1.git
       1198095..f21339a  master -> master
    

    jenkins配置插件

    插件安装

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

    gitlab触发jenkins

    gitlab生成token

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

    jenkins配置连接gitlab

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

    创建jenkins任务

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

    token: c8124514f0d3f60588a707470be57bca

    gitlab设置webhooks

    提交代码至gitlab触发jenkins任务

    # git clone git@20.0.0.208: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 git@20.0.0.208:web-test/app1.git
       f21339a..f1005f8  master -> master
    

    显示任务由gitlab触发的。

    Jenkins Pipeline 及参数化构建

    **Jenkins参数化构建流程图 ** 【网图】

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

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

    pipeline简单使用

    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}"
                }
            }
        }
    }
    

    构建发布测试

    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
    
  • 相关阅读:
    接入微信公众平台开发之用户关注(取消)事件触发后台自定义消息体通知给用户的实现过程
    谈缓存数据库在web开发中的重要性
    在linux服务器下日志提取的python脚本(实现输入开始时间和结束时间打包该时间段内的文件)
    关于java多线程任务执行时共享资源加锁的方式思考
    关于近期开发中遇到的同一账户多人登录造成数据库数据不一致的思考和解决(避开了数据库存状态的常用处理手段)
    spingmvc实现在程序启动时调用数据库数据
    一个前端统计图,柱形图,饼状图,折线图的前端链接
    取得ascii的例子
    BCB 延时DelayTime
    C++ Builder中串口通讯的经验之谈
  • 原文地址:https://www.cnblogs.com/zisefeizhu/p/12548662.html
Copyright © 2011-2022 走看看