美文网首页cicdjenkins相关
Jenkins 构建企业级 DevOps 容器云平台2

Jenkins 构建企业级 DevOps 容器云平台2

作者: 菜头_355f | 来源:发表于2021-06-21 09:18 被阅读0次

    #配置 jenkins 连接到我们存在的 k8s 集群

    (1)访问http://192.168.172.163:30002/configureClouds/新增一个云,在下拉菜单中选择 kubernets 并添加

    (2)填写云 kubernetes 配置内容

    kubernetes https://192.168.172.163:6443

    如果是vip写vip地址

     (3)测试 jenkins 和 k8s 是否可以通信

    点击连接测试,如果显示 Connection test successful 或者显示Connected to Kubernetes 1.20 说明测试成功,Jenkins 可以和 k8s 进行通信

    kubectl get svc -n jenkins-k8s

    NAME              TYPE      CLUSTER-IP      EXTERNAL-IP  PORT(S)                          AGE

    jenkins-service  NodePort  10.109.88.145  <none>        8080:30002/TCP,50000:30814/TCP  108m

    jenkins地址对应name

    配置 k8s 集群的时候 jenkins 地址需要写上面域名的形式,配置之后执行如下: http://jenkins-service.jenkins-k8s.svc.cluster.local:8080 应用------>保存

    #配置 pod-template

    (1)配置 pod template

    访问 http://192.168.172.163:30002/configureClouds/

    添加 Pod 模板------>Kubernetes Pod Template--->按如下配置

    (2)在上面的 pod template 下添加容器 添加容器------>Container Template------>按如下配置------>

    Docker 镜像:使用 jenkins-jnlp.tar.gz 解压出来的镜像,把这个镜像上传到 k8s 的各 node 节 点,手动解压:docker load -i jenkins-jnlp.tar.gz

    解压出来的镜像是 god/jenkins-jnlp:v1

    在每一个 pod template 右下脚都有一个 Advanced,点击 Advanced,出现如下

    在 Service Account 处输入 jenkins-k8s-sa,这个 sa 就是我们最开始安装 jenkins 时的 sa (3)给上面的 pod template 添加卷

    添加卷------>选择 Host Path Volume

    /var/run/docker.sock /var/run/docker.sock

    /root/.kube /home/jenkins/.kube 上面配置好之后,应用------>保存

    #添加 dockerhub 凭据

    首页------>系统管理----→管理凭据--→全局--→添加凭据

    添加自己的dockerhub用户

    username:cadrcadr password:**** ID:dockerhub 描述:这个地方随便写 上面修改好之后选择确定即可

    #测试通过 Jenkins 发布代码到 k8s 开发环境、测试环境、生产环境 在 k8s 的控制节点创建名称空间:

    63 ~]# kubectl create ns devlopment namespace

    63 ~]# kubectl create ns production namespace

    63 ~]# kubectl create ns qatest namespace

    回到 jenkins 首页:

    pod模版 标签列表对应pipeline

    新建一个任务

    ------>输入一个任务名称处输入 jenkins-variable-test-deploy------>流水线----- ->确定------>在 Pipeline script 处输入如下内容

    node('testhan') {

        stage('Clone') {

            echo "1.Clone Stage"

            git url: "https://github.com/cadrcadr/jenkins-sample.git"

            script {

                build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()

            }

        }

        stage('Test') {

          echo "2.Test Stage"

        }

        stage('Build') {

            echo "3.Build Docker Image Stage"

            sh "docker build -t cadrcadr/jenkins-demo:${build_tag} ."

        }

        stage('Push') {

            echo "4.Push Docker Image Stage"

            withCredentials([usernamePassword(credentialsId: 'dockerhub', passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {

                sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword}"

                sh "docker push cadrcadr/jenkins-demo:${build_tag}"

            }

        }

        stage('Deploy to dev') {

            echo "5. Deploy DEV"

    sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-dev-god.yaml"

          sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-dev-god.yaml"

    //        sh "bash running-devlopment.sh"

            sh "kubectl apply -f k8s-dev-god.yaml  --validate=false"

    }

    stage('Promote to qa') {

    def userInput = input(

                id: 'userInput',

                message: 'Promote to qa?',

                parameters: [

                    [

                        $class: 'ChoiceParameterDefinition',

                        choices: "YES\nNO",

                        name: 'Env'

                    ]

                ]

            )

            echo "This is a deploy step to ${userInput}"

            if (userInput == "YES") {

                sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-qa-god.yaml"

    sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-qa-god.yaml"

    //            sh "bash running-qa.sh"

                sh "kubectl apply -f k8s-qa-god.yaml --validate=false"

                sh "sleep 6"

                sh "kubectl get pods -n qatest"

            } else {

                //exit

            }

        }

    stage('Promote to pro') {

    def userInput = input(

                id: 'userInput',

                message: 'Promote to pro?',

                parameters: [

                    [

                        $class: 'ChoiceParameterDefinition',

                        choices: "YES\nNO",

                        name: 'Env'

                    ]

                ]

            )

            echo "This is a deploy step to ${userInput}"

            if (userInput == "YES") {

                sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s-prod-god.yaml"

                sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s-prod-god.yaml"

    //            sh "bash running-production.sh"

                sh "cat k8s-prod-god.yaml"

                sh "kubectl apply -f k8s-prod-god.yaml --record --validate=false"

            }

        }

    }

    god 变成自己的 dockerhub 用户名 k8s-prod-god.yaml

    应用------>保存------>立即构建 在左侧可以看到构建任务,如下所示:

    点击 Console Output,可以看到 pipeline 定义的步骤的详细信息

    点击 Input request,部署应用到预生产环境

    点击 Input request,部署应用到生产环境

    看到 Finished:SUCCESS,,说明 pipeline 构建任务完成

    报错 1

    解决方法:请修改 Pipeline script 处标签更改为自己的 dockerhub 的 username。

    6、验证开发、预生产、生产环境部署的应用是否正常运行

    ]# kubectl get pods -n devlopment

    NAME READY STATUS RESTARTS AGE

    jenkins-demo-784885d9c9-b4jkg 1/1 Running 0

    ]#kubectl get pods -n qatest

    NAME READY STATUS RESTARTS AGE jenkins-demo-784885d9c9-59tsm 1/1 Running 0 5m19s

    ]#kubectl get pods -n production

    NAME READY STATUS jenkins-demo-784885d9c9-42hz4 1/1 running

    Jenkins 管理插件 BlueOcean 配置和使用

    # BlueOcean 是什么?

    为了适应 Jenkins Pipeline 和 Freestyle jobs 任务,Jenkins 推出了 BlueOcean UI,其目的就 是让程序员执行任务时,降低工作流程的复杂度和提升工作流程的清晰度,它具有如下特征: 1、清晰的可视化:对 CI/CD pipelines, 可以快速直观的观察项目 pipeline 状态。

    2、pipeline 可编辑:引导用户通过直观的、可视化的过程来创建 Pipeline,从而使 Pipeline 的创 建变得平易近人。

    3、pipeline 精确度:通过 UI 直接介入 pipeline 的中间问题。

    #安装 BlueOcean 插件 主页—>系统管理→插件管理→可选插件—>过滤 BlueOcean→直接安装

    安装完成后,重启 jenkins

    http://192.168.172.163:30002/restart

    重启进入 jenkins 之后,在主页左侧可以看到打开 Blue Ocean

    Jenkins 实现 k8s 应用按照指定版本回滚

    回到首页:

    新建一个任务------>输入一个任务名称处输入 jenkins-variable-test-deploy-rollout------>流水 线------>确定------>在 Pipeline script 处输入如下内容

    node('testhan') {

      stage('git clone') {

        git url: "https://github.com/luckylucky421/jenkins-rollout"

        sh "ls -al"

        sh "pwd"

    }

    stage('select env') {

      def envInput = input(

        id: 'envInput',

        message: 'Choose a deploy environment',

        parameters: [

          [

            $class: 'ChoiceParameterDefinition',

            choices: "devlopment\nqatest\nproduction",

            name: 'Env'

          ]

        ]

    )

    echo "This is a deploy step to ${envInput}"

    sh "sed -i 's/<namespace>/${envInput}/' getVersion.sh"

    sh "sed -i 's/<namespace>/${envInput}/' rollout.sh"

    sh "bash getVersion.sh"

    // env.WORKSPACE = pwd()

    // def version = readFile "${env.WORKSPACE}/version.csv"

    // println version

    }

    stage('select version') {

      env.WORKSPACE = pwd()

    def version = readFile "${env.WORKSPACE}/version.csv"

    println version

      def userInput = input(id: 'userInput',

        message: '选择回滚版本',

        parameters: [

          [

            $class: 'ChoiceParameterDefinition',

            choices: "$version\n",

            name: 'Version'

          ]

            ]

    )

        sh "sed -i 's/<version>/${userInput}/' rollout.sh"

    }

    stage('rollout deploy') {

        sh "bash rollout.sh"

    }

    }

    点击应用->保存-立即构建

    相关文章

      网友评论

        本文标题:Jenkins 构建企业级 DevOps 容器云平台2

        本文链接:https://www.haomeiwen.com/subject/pkaeyltx.html