zoukankan      html  css  js  c++  java
  • 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/
    至此部署完成
    文章原文

  • 相关阅读:
    夺命雷公狗----仿淘宝的菜单功能
    夺命雷公狗---在js里阻止a标签的跳转和form表单的跳转
    夺命雷公狗mongodb之----mongodb---1---的下载,安装,连接
    夺命雷公狗ThinkPHP项目之----企业网站30之网站前台头部导航的高亮显示
    夺命雷公狗ThinkPHP项目之----企业网站29之网站前台左侧导航的高亮显示
    夺命雷公狗ThinkPHP项目之----企业网站28之网站前台左侧导航的实现
    夺命雷公狗ThinkPHP项目之----企业网站27之网站前台单页的完成(从百度编辑器里面取出文章数据)
    夺命雷公狗ThinkPHP项目之----企业网站26之网站前台列表页的显示和完成分页功能
    夺命雷公狗ThinkPHP项目之----企业网站25之网站前台面包屑导航URL的完善
    夺命雷公狗ThinkPHP项目之----企业网站24之网站前台获取当前栏目和顶级栏目
  • 原文地址:https://www.cnblogs.com/xuewenlong/p/14925745.html
Copyright © 2011-2022 走看看