Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)

一、说明

1)需求:

Rancher 上部署 Jenkins-master,服务采用 Jenkins-slave 发布,发布完成后 Jenkins-slave 自动销毁。

2)环境:

Rancher 2.2.7 (部署Rancher参考之前文章:离线安装 Rancher2.2.4 HA 集群

Jenkins 2.176.2 

 

二、安装 Jenkins

2.1 安装 Jenkins

在 Rancher 2 上部署 Jenkins-master

1)添加工作负载
名称:jenkins-master
Docker镜像:jenkins/jenkins:lts
命名空间:jenkins
数据卷:jenkins-master-pvc,容器路径:/var/jenkins_home

 

2)添加负载均衡
名称:jenkins-master
命名空间:jenkins
自定义域名:jenkinscicd.xxxxxx.com
服务/工作负载:jenkins-master    
容器端口:8080

 

3)添加域名解析
jenkinscicd.xxxxxx.com 172.16.5.84(ingress lb 地址)

dig查看是否解析成功

dig jenkinscicd.xxxxxx.com

 

4)访问
1、浏览器访问连接:jenkinscicd.xxxxxx.com

2、在rancher上进入容器,查看密码
cat /var/jenkins_home/secrets/initialAdminPassword

3、验证后选择安装推荐的插件

4、重启jenkins

 

2.2 安装插件

Manage Jenkins -> Manage Plugins 安装 Kubernetes 和 Kubernetes Cli 插件

Kubernetes
Kubernetes Cli

说明:Kubernetes插件是可以增加Kubernetes云,Kubernetes Cli插件是用于jenkinsfile中kubectl容器可以使用withKubeConfig参数

 

2.3  添加凭据

添加4个全局凭据

1)docker-registry:gitlab 镜像仓库凭据(类型:Username with password) 
2)gitlab:gitlab 凭据(类型:Username with password)
3)kube:develop 集群的凭据(类型:Secret text)
4)cicdkube:jenkins 所在k8s集群的凭据(类型:Secret text) 

其中 kube 和 cicdkube 的Secret 为 rancher 对应的集群配置文件中的 token 值。

 

2.4 配置kubernetes云

系统设置,增加一个云(kubernetes)

1)名称:kubernetes
2)Kubernetes 地址:https://kubernetes.default
3)Kubernetes 命名空间:jenkins
4)凭据:cicd-kube (之前创建的cicdkube凭据,用于连接jenkins-master所在的集群)
5)Jenkins 地址:http://jenkins-master:8080

  

三、提交jenkinsfile文件

3.1 编写 yaml 文件

把 KubernetesPod.yaml 文件放在代码库根目录,内容如下:

metadata:
  labels:
    some-label: some-label-value
spec:
  containers:
  - name: jnlp
    env:
    - name: CONTAINER_ENV_VAR
      value: jnlp
    resources:
      limits:
        cpu: 1
        memory: 1Gi
      requests:
        cpu: 1
        memory: 1Gi
  - name: maven
    image: maven:3.6-alpine
    command:
    - cat
    tty: true
    env:
    - name: CONTAINER_ENV_VAR
      value: maven
    volumeMounts:
    - name: repo-maven-cache
      mountPath: /root/.m2
  - name: kubectl
    image: cnych/kubectl
    command:
    - cat
    tty: true
    env:
    - name: CONTAINER_ENV_VAR
      value: kubectl
  - name: docker
    image: docker
    command:
    - cat
    tty: true
    env:
    - name: CONTAINER_ENV_VAR
      value: docker
    volumeMounts:
    - name: repo-docker-sock
      mountPath: /var/run/docker.sock
  volumes:
  - name: repo-maven-cache
    persistentVolumeClaim:
      claimName: pvc-jenkins-maven-cache
  - name: repo-docker-sock
    hostPath:
      path: /var/run/docker.sock

 

3.2 编写 jenkinsfile

把 Jenkinsfile 文件也放在代码库根目录,内容如下:

pipeline {
  environment {
    IMAGE_TAG = sh (returnStdout: true, script: 'echo "build-${BRANCH_NAME//\\//_}-$BUILD_NUMBER"').trim()
  }
  agent {
    kubernetes {
      defaultContainer 'maven'
      yamlFile 'KubernetesPod.yaml'
    }
  }
  stages {
    stage('Run maven') {
      steps {
        container('maven') {
          echo "代码编译打包"
          sh 'mvn clean install'
        }
      }
    }
    stage('Build image') {
      steps {
        container('docker') {
          script {
            echo "构建Docker镜像"
            def image = docker.build("reg.nexus.wmqhealth.com/tools/cicd-test:" + "$IMAGE_TAG", ".")
            withDockerRegistry([credentialsId:'docker-registry', url:"https://reg.nexus.wmqhealth.com"]){
              image.push()
            }
          }
        }
      }
    }
    stage('Deploy') {
      steps {
        container('kubectl') {
          script {
            echo "部署项目"
            withKubeConfig(clusterName: 'develop', contextName: 'develop', credentialsId: 'kube', namespace: 'cicdtest', serverUrl: 'https://rancher.wmqhealth.com/k8s/clusters/c-xg99q') {
              sh 'kubectl set image deployment/cicd-test cicd-test=reg.nexus.wmqhealth.com/tools/cicd-test:$IMAGE_TAG --namespace cicdtest'
            }
          }
        }
      }
    }
  }
}

 

四、构建项目

4.1新建jenkins项目

 

 

 

4.2 新建rancher项目

1)创建命名空间

在 develop 集群创建 cicdtest 命名空间

2)创建工作负载

名称和命名空间与jenkinsfile中定义保持一致。镜像随便写一个不存在的,部署pods数为0

4.3 构建

在jenkins 中点击构建

1、在jenkins所在的集群会动态生成 jenkins-slave pod 

 

2、会打包上传镜像,并会更新develop集群中cicd-test的镜像信息

 

3、构建成功后,手动把pod数增加到1,这样项目就构建完成了。

 

转载于:https://www.cnblogs.com/weavepub/p/11359763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值