• kubernetes使用jenkins Pipeline 部署Nginx


    文章原文

    环境需求

    • kubernetes 未安装参考使用kubeadm安装kubernetes 1.21
    • jenkins
    • github/gitee/gitlab 静态页面
    • 镜像仓库(我使用的 hub.docker)
      如果你未准备好的以上环境,点击链接参考文章进行安装。

    安装 jenkins

    我这边的jenkins是将jenkins 安装在了k8s的宿主机中,并没有用容器运行。

    安装JDK

    yum install -y java
    

    安装jenkins

    {{< tabs 方法1 方法2 >}}
    {{< tab >}}
    方法1 添加Jenkins库到yum库,Jenkins将从这里下载安装。

    wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
    rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
    yum install -y jenkins
    

    {{< /tab >}}
    {{< tab >}}
    方法2 如果不能安装就到官网下载jenkis的rmp包,官网地址(http://pkg.jenkins-ci.org/redhat-stable/)

    wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm
    rpm -ivh jenkins-2.7.3-1.1.noarch.rpm
    

    {{< /tab >}}
    {{< /tabs >}}

    安装 Jenkins 插件

    安装完jenkins,设置完密码,安装完默认插件以后,我们需要安装 Pipeline 需要的插件。
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    修改下方地址 然后提交

    # jenkins插件清华大学镜像地址
    https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    http://mirror.xmission.com/jenkins/updates/update-center.json
    

    安装git和pipeline插件
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

    创建 jenkins Pipeline

    添加Pipeline job
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    创建job完成后,配置Pipeline script,点击Pipeline语法,来自动生成我们需要的配置。
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    如下图,我们Git方式,配置Git仓库地址,再添加认证相关。
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    分别填写github/gitee的账号和密码然后点击添加
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    添加完成后,在凭据中,选中刚添加的,这样我们就可以生成Pipeline脚本了。点击下方生成流水线脚本,然后复制方框内的内容。
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控

    编写 Pipeline 脚本

    编写我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支master为${branch},其他模块内容自行编写。
    文章原文

    node {
       stage('拉取代码') { 
        //拉取代码
        git credentialsId: 'b34b0b78-e99f-4aa0-a616-xxxxxx', url: 'https://gitee.com/xxx/xxxxx.git'
        //将上次打包的代删除掉,并将拉取到的新代码代码打包
        sh 'rm -rf *.tar && cd waynex &&  tar -cvf waynex.tar ./*'
        script {
        //获取comment id
        env.imageTag = sh (script: 'git rev-parse --short HEAD ${GIT_COMMIT}', returnStdout: true).trim()
    }
       }
       // 项目打包到镜像并推送到镜像仓库
       stage('构建推送镜像') {
    sh '''
    REPOSITORY=wenlongxue/waynex:${imageTag}
    cat > Dockerfile << EOF
    FROM wenlongxue/nginx
    
    ## 设置工作目录
    WORKDIR /usr/local/nginx/html
    
    RUN  rm -rf /usr/local/nginx/html/* 
    ADD  waynex/waynex.tar  /usr/local/nginx/html/
    
    ## 启动nginx
    CMD ["nginx","-g","daemon off;"]
    EOF
    
    docker build -t waynex:${imageTag} .
    docker login
    docker tag waynex:${imageTag} $REPOSITORY
    docker push $REPOSITORY
    '''
       }
       // 部署到k8s主机
       stage('部署到k8s') 
    {
    sh '''
    REPOSITORY=wenlongxue/waynex:${imageTag}
    cat > nginx.yaml << EOF
    apiVersion: apps/v1           #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
    kind: Deployment              #该配置的类型,我们使用的是 Deployment
    metadata:                     #译名为元数据,即 Deployment 的一些基本属性和信息
      name: nginx-deployment      #Deployment 的名称
      labels:                     #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
        app: nginx                #为该Deployment设置key为app,value为nginx的标签
    spec:                         #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
      replicas: 1                 #使用该Deployment创建一个应用程序实例
      selector:                   #标签选择器,与上面的标签共同作用,目前不需要理解
        matchLabels:              #选择包含标签app:nginx的资源
          app: nginx
      minReadySeconds: 1
      progressDeadlineSeconds: 60
      revisionHistoryLimit: 2
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      template:                   #这是选择或创建的Pod的模板
        metadata:                 #Pod的元数据
          labels:                 #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
            app: nginx
        spec:                     #期望Pod实现的功能(即在pod中部署)
          containers:             #生成container,与docker中的container是同一种
          - name: nginx           #container的名称
            image: $REPOSITORY   #使用之前推送的镜像
            imagePullPolicy: Always #总是拉取最新的。默认为,本地有则使用本地镜像,不拉取
            ports:
            - containerPort: 80
            resources:
              requests:
                memory: "600Mi"
                cpu: "250m"
              limits: 
                memory: "600Mi" 
                cpu: "500m"
            livenessProbe:
               httpGet:
                 path: /
                 port: 80
               initialDelaySeconds: 10  #pod启动10秒执行第一次检查
               periodSeconds: 5         #第一次检查后每隔5秒检查一次
    ---
    apiVersion: v1
    kind: Service
    metadata:                           #译名为元数据,即Deployment的一些基本属性和信息
      name: nginx-service               #Service 的名称
      labels:                           #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组
        app: nginx                      #为该Deployment设置key为app,value为nginx的标签
    spec:                               #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问
      selector:                         #标签选择器
        app: nginx                      #选择包含标签 app:nginx 的 Pod
      ports:
      - name: nginx-port                #端口的名字
        protocol: TCP                   #协议类型 TCP/UDP
        port: 80                        #集群内的其他容器组可通过 80 端口访问 Service
        nodePort: 30081                 #通过任意节点的 30080 端口访问 Service
        targetPort: 80                  #将请求转发到匹配 Pod 的 80 端口
      type: NodePort                    #Serive的类型,ClusterIP/NodePort/LoaderBalancer
    EOF
    sudo kubectl  apply -f  nginx.yaml
    '''
       }
    }
    

    在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    然后保存配置。

    发布测试

    回到主界面,我们开始构建任务:
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    查看构建成功后的图形构建过程:
    cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
    通过浏览器来访问项目:http://你的IP:30080/
    至此部署完成
    文章原文

  • 相关阅读:
    Appium 自动测试,读书打卡
    Appium 自动测试,读书打卡(日志)
    mac下破解安装staruml软件步骤
    基于MGR方式搭建MySQL8.0一主多从集群
    vue项目npm install下载依赖时,报error code128解决方法
    解决 ASP.NET Core 部署到 IIS,更新项目时"文件夹正在使用"错误
    windows11 升级到10.0.22598.200时安装到35%提示硬件尚未准备好
    2022网易雷火游戏研发笔试ak(4月23日)
    2022腾讯2022实习生笔试ak(4月24日后台&综合)
    2022阿里笔试编程题ak口糊(4月15日)
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/14925745.html
Copyright © 2020-2023  润新知