jenkins CI/CD流水线的实施操作

9 篇文章 1 订阅
5 篇文章 0 订阅

jenkins是安装的推荐插件,本次测试环境还需要安装的插件如下:

安装插件

Git 拉取代码

Git Parameter 列出仓库地址的分支和tag

Pipeline 流水线

kubernetes 用于连接Kubernetes动态创建Slave代理

Config File Provider 用于存储kubectl用于连接k8s集群的kubeconfig配置文件

1、jenkins凭证设置:

1.1 设置harbor凭证

系统管理 --> 凭证管理

系统管理 --> 凭证管理--> System --> 系统 --> 全局凭证

1.2 创建gitee凭证

登录gitee --> 设置 --> 私人令牌 --> 生成新令牌

记得复制

登录jenkins添加凭证,密码填写令牌

2、存储kubectl用于连接k8s集群的kubeconfig配置文件

3、 定制agent

官方镜像:​​​​​​https://hub.docker.com/r/jenkins/inbound-agent/

[root@longxi-01 new]# vim Dockerfile

FROM jenkins/inbound-agent        
USER root

#修改镜像时区
RUN ln -sf /usr/share/zoneinfo/Asia/ShangHai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    dpkg-reconfigure -f noninteractive tzdata    #重新配置tzdata软件包,使得时区设置生效

#修改debia源
RUN echo "deb http://mirrors.163.com/debian/ buster main" > /etc/apt/sources.list && \
    echo "deb http://mirrors.163.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list && \
    echo "deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" >> /etc/apt/sources.list
#安装docker相关依赖
RUN apt-get update && \
    apt-get -y install apt-transport-https ca-certificates curl gnupg2 apt-utils lsb-release software-properties-common && \
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add - && \
    add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" && \
    apt-get -y install docker-ce
#安装kubectl
RUN apt-get install -y apt-transport-https && \
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - && \
    echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list && \
    apt-get install kubectl

创建自己的jenkins-slave,构建时间比较长要等一下,如果用jenkins用户的话还需要装一下sudo

[root@longxi-01 new]# docker build -t harbor.yuanlinux.com/library/my-jenkins-slave:v5 .

上传到harbor

[root@longxi-01 new]# docker push harbor.yuanlinux.com/library/my-jenkins-slave:v5

4、jenkins创建流水线

我先前测试时已创建了一个,具体创建如下:

5、流水线语法:

5.1 使用流水线语法生成pipeline语法

如:拉取git仓库:

pipeline脚本如下:

pipeline {
    parameters {
        choice choices: ['dev', 'pro'], description: '命名空间,dev为测试环境,pro为线上环境', name: 'env_Namespace'
        choice choices: ['1', '3', '5'], description: '副本集', name: 'env_replicas'
        listGitBranches branchFilter: '.*', credentialsId: 'gitee凭证', defaultValue: '', listSize: '5', name: 'branch', quickFilterEnabled: false, remoteURL: '仓库地址', selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH_TAG'
    }
    agent {
        kubernetes {
          cloud 'jenkins'
          label "jenkins-slave"
            yaml '''
apiVersion: v1          
kind: Pod
metadata:
  name: jenkins-slave
spec:
  hostAliases:
  - hostnames:
    - harbor.yuanlinux.com
    ip: 10.211.55.5
  containers:
  - name: jnlp
    image: harbor.yuanlinux.com/library/my-jenkins-slave:v5 
    imagePullPolicy: Always
    volumeMounts:
      - name: docker-sock
        mountPath: /var/run/docker.sock
  volumes:
    - name: docker-sock
      hostPath:
        path: /var/run/docker.sock
'''
        }
    }


    environment {
        HARBOR_ACCOUNT = credentials('2bde32ee-9ccd-44f2-84f9-21652686e4cb')
        HARBOR_URL = 'harbor.yuanlinux.com'
        BUILD_DATE = sh(script: 'date "+%Y%m%d%H%M%S"', returnStdout: true).trim()
        PT_BRANCH_TAG = "${params.branch}".replaceAll('/','_')
        VERSION_SUFFIX = "${PT_BRANCH_TAG}_${BUILD_DATE}"
        K8S_AUTH  = '525600e0-343f-4a48-95ad-7a17f63c8c1b'
    }
    stages {
        stage('初始化环境') {
            steps {
                sh "docker login ${HARBOR_URL} -u '${HARBOR_ACCOUNT_USR}' -p '${HARBOR_ACCOUNT_PSW}'"
            }
        }
        stage('命令测试') {
            steps {
                sh 'ls -l /etc/docker/certs.d/harbor.yuanlinux.com'
            }
        }
        stage('拉取代码') {
            steps {
                checkout scmGit(branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'jenkins凭证', url: '代码仓库']])
            }
        }
        stage('构建镜像上传至harbor') {
            steps {
                sh "docker pull '${HARBOR_URL}'/library/php8.1.0-alpine:v3"
                sh "docker build -t '${HARBOR_URL}'/library/${env.project_name}:${VERSION_SUFFIX} ."
                // sh "docker push '${HARBOR_URL}'/library/${env.project_name}:${VERSION_SUFFIX}"
                sh "docker rmi '${HARBOR_URL}'/library/${env.project_name}:${VERSION_SUFFIX}"
            }
        }
         stage('部署至k8s的dev命名空间') {
          when { expression { params.env_Namespace == "dev" } }
            steps {
              configFileProvider([configFile(fileId: "${K8S_AUTH}", targetLocation: 'admin-kubeconfig')])  {
                sh """
                    sed -i 's#REPLICAS#${params.env_replicas}#' nginx.yaml
                    kubectl apply -f nginx.yaml -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                    kubectl get pods,svc -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                    sleep 10
                    kubectl delete -f nginx.yaml -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                   """

              }
            }
        }
          stage('部署至k8s的pro命名空间') {
          when { expression { params.env_Namespace == "pro" } }
            steps {
                script {
                    wrap([$class: 'BuildUser']) {
                        BUILD_USER = "${env.BUILD_USER}"
                    }
                    //执行sh,查看时间并生成md5取前6位字符
                    random = sh(returnStdout: true, script: 'date +%s%N | md5sum | cut -c 1-6').trim() 
                    
                    approvalMap = input(
                        message: "是否确定发布?" ,
                        ok: "确定",
                        parameters: [
                            string(defaultValue: '', description: "请输入验证码 ${random}", name: 'random_ent', trim: true),
                            string(defaultValue: '', description: '请输入上线原因', name: 'deployReason', trim: true)
                        ],
                        submitter: "admin",
                        submitterParameter: 'approver'
                    )
                    if (approvalMap['random_ent'] != random) {
                        error("验证码不匹配,终止本次发布操作。")
                    }
                    //获取上线原因值
                    def userInputRandom = approvalMap['deployReason']
                    env.release_Reason = userInputRandom.isEmpty() ? null : userInputRandom
                }
              configFileProvider([configFile(fileId: "${K8S_AUTH}", targetLocation: 'admin-kubeconfig')])  {
                sh """
                    sed -i 's#REPLICAS#${params.env_replicas}#' nginx.yaml
                    kubectl apply -f nginx.yaml -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                    kubectl get pods,svc -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                    sleep 10
                    kubectl delete -f nginx.yaml -n ${params.env_Namespace} --kubeconfig=admin-kubeconfig
                   """
              }              
            }
            post {
                success {
                    echo "成功部署到pro✅"
                }

                failure {
                    echo "部署到pro失败❎"
                }
            }
        }      
    }
}

我这是测试环境,就测试了一下打包容器版本上传harbor和是否发布在k8s的功能。dockerfile文件和nginx.yaml文件都在仓库中

6、构建

接下来我们打包:

6.1 构建dev环境

6.2 构建pro环境,测试一下input

7、总结

        本地测试环境部署完后,为了测试部署发布流程一直在踩坑,当时也没记录,文章不是很详细只能给大家提供一个思路和一些写法。。
 

  • 31
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins是一个开源的持续集成和持续交付工具,它可以帮助开发团队自动化构建、测试和部署应用程序。下面是一个简单的Jenkins CI/CD流程: 1. 安装和配置Jenkins服务器:首先,你需要安装Jenkins并进行基本的配置,包括设置管理员账号和插件管理等。 2. 创建一个新的Jenkins项目:在Jenkins中,你可以创建一个新的项目来管理你的应用程序的CI/CD流程。选择适合你项目类型的项目模板,比如自由风格项目或者流水线项目。 3. 配置代码仓库:将你的代码仓库与Jenkins项目关联起来,这样Jenkins就可以在代码提交时触发构建过程。可以选择使用Git、SVN或其他版本控制系统。 4. 设置构建触发器:配置构建触发器来决定何时触发构建过程。常见的触发方式包括定时触发、代码提交触发或者其他事件触发。 5. 构建过程:在构建过程中,你可以设置一系列操作,包括代码拉取、编译、单元测试、代码质量检查等。这些操作将根据你的需求进行配置。 6. 构建结果和报告:Jenkins会生成构建结果和报告,你可以查看构建日志、测试报告和代码覆盖率等信息,以便进行问题排查和性能优化。 7. 部署:如果构建成功,你可以配置Jenkins来自动部署你的应用程序到目标环境。这可以包括将构建产物上传到服务器、执行数据库迁移脚本等操作。 8. 监控和通知:Jenkins可以监控你的构建过程,并发送通知给相关的团队成员。你可以配置邮件通知、Slack集成或其他方式来接收构建状态和报告。 以上是一个简单的Jenkins CI/CD流程,你可以根据你的项目需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值