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

时间:2021-7-4 作者:qvyue

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

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

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

(2)填写云 kubernetes 配置内容

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

kubernetes https://192.168.172.163:6443

如果是vip写vip地址

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

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

点击连接测试,如果显示 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          8080:30002/TCP,50000:30814/TCP  108m

jenkins地址对应name

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

配置 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—>按如下配置

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

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

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

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

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

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

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

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

添加卷——>选择 Host Path Volume

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

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

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

#添加 dockerhub 凭据

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

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

添加自己的dockerhub用户

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

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 构建企业级 DevOps 容器云平台2

新建一个任务

——>输入一个任务名称处输入 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}/’ k8s-dev-god.yaml”

      sh “sed -i ‘s//${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: “YESnNO”,

                    name: ‘Env’

                ]

            ]

        )

        echo “This is a deploy step to ${userInput}”

        if (userInput == “YES”) {

            sh “sed -i ‘s//${build_tag}/’ k8s-qa-god.yaml”

sh “sed -i ‘s//${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: “YESnNO”,

                    name: ‘Env’

                ]

            ]

        )

        echo “This is a deploy step to ${userInput}”

        if (userInput == “YES”) {

            sh “sed -i ‘s//${build_tag}/’ k8s-prod-god.yaml”

            sh “sed -i ‘s//${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

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

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

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

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

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

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

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

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

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

报错 1

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

解决方法:请修改 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 构建企业级 DevOps 容器云平台2

安装完成后,重启 jenkins

http://192.168.172.163:30002/restart

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

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

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: “devlopmentnqatestnproduction”,

        name: ‘Env’

      ]

    ]

)

echo “This is a deploy step to ${envInput}”

sh “sed -i ‘s//${envInput}/’ getVersion.sh”

sh “sed -i ‘s//${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: “$versionn”,

        name: ‘Version’

      ]

        ]

)

    sh “sed -i ‘s//${userInput}/’ rollout.sh”

}

stage(‘rollout deploy’) {

    sh “bash rollout.sh”

}

}

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

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

Jenkins 构建企业级 DevOps 容器云平台2
Jenkins 构建企业级 DevOps 容器云平台2
Jenkins 构建企业级 DevOps 容器云平台2
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。