DevOps 构建 CI/CD 流水线 - Jenkins - Pipeline

4 篇文章 0 订阅
1 篇文章 0 订阅

Pipeline

  • 配置流水线
  1. 创建一个new jobs,并选择pipeline
    20201102200154
    20201102200528

  2. 配置保留的构建,3天30个
    20201102200834

  3. 配置参数化构建

    • This project is parameterized:

      String parameter
      nameDefault ValueDescription
      app_name项目的名称,例: dubbo-demo-service

      Trim the string 填写时去掉前后的空白字符

      String parameter
      nameDefault ValueDescription
      image_namedocker镜像名称,例: app/dubbo-demo-service
      String parameter
      nameDefault ValueDescription
      git_repo项目所在的git中央仓库地址,例:
      String parameter
      nameDefault ValueDescription
      git_ver项目在git中央仓库所在的分支或者版本号
      String parameter
      nameDefault ValueDescription
      add_tagdocker镜像标签的一部分,日期时间戳,例如: 20201102_2030
      String parameter
      nameDefault ValueDescription
      mvn_dir./编译项目的目录,默认为项目的根目录
      String parameter
      nameDefault ValueDescription
      target_dir./target项目编译完成项目后,产生的jar/war包所在的目录
      String parameter
      nameDefault ValueDescription
      mvn_cmdmvn clean package -Dmaven.test.skip=true执行编译所需的命令

      clean 清除缓存 package 不保留在本地, -e 只输出错误 -q 静默

      Choice parameter
      nameChoicesDescription
      base_imagebase/jre7:7u80
      base/jre8:8u112项目所用的docker底包镜像
      Choice parameter
      nameChoicesDescription
      maven3.6.1-8u232
      3.2.5-7u045执行编译时使用的maven软件版本
  4. 制作Pipeline

    pipeline {
      agent any
        stages {
          stage('pull') { //get project code from repo
            steps {
              sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
            }
          }
          stage('build') { //exec mvn cmd
            steps {
              sh "cd ${params.app_name}/${env.BUILD_NUMBER}  && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
            }
          }
          stage('package') { //move jar file into project_dir
            steps {
              sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && mv *.jar ./project_dir"
            }
          }
          stage('image') { //build image and push to registry
            steps {
              writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.od.com/${params.base_image}
    ADD ${params.target_dir}/project_dir /opt/project_dir"""
              sh "cd  ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
            }
          }
        }
    }
    

    20201102205404

  5. Harbor上添加 app 的私有仓库

  6. 构建流程
    20201102210305
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SJSE0qof-1625113016649)(https://raw.githubusercontent.com/ma823956028/image/master/picgo/20201104143829.png)]

  7. 点选进度条查看进程
    20201103112233
    20201104144903

托管k8s

  1. 制作yaml文件与链接非公开仓库使用的secret

    [root@hdss7-200 ~]# cd /data/k8s-yaml/
    [root@hdss7-200 k8s-yaml]# mkdir dubbo-demo-service ; cd dubbo-demo-service
    [root@hdss7-200 dubbo-demo-service]# vim dp.yaml
    kind: Deployment
    apiVersion: extensions/v1beta1
    metadata:
      name: dubbo-demo-service
      namespace: app
      labels:
        name: dubbo-demo-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          name: dubbo-demo-service
      template:
        metadata:
          labels:
            app: dubbo-demo-service
            name: dubbo-demo-service
        spec:
          containers:
          - name: dubbo-demo-service
            image: harbor.od.com/app/dubbo-demo-service:master_20201103_1119    # 镜像名,注意修改tag号
            ports:
            - containerPort: 20880
              protocol: TCP
            env:
            - name: JAR_BALL
              value: dubbo-server.jar
            imagePullPolicy: IfNotPresent
          imagePullSecrets:                                                   # 链接非公开仓库所用的secret
          - name: harbor
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
          securityContext:
            runAsUser: 0                                                      # 使用root用户启动
          schedulerName: default-scheduler
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxUnavailable: 1
          maxSurge: 1
      revisionHistoryLimit: 7
      progressDeadlineSeconds: 600
    [root@hdss7-21 ~]# kubectl create ns app
    [root@hdss7-21 ~]# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n app
    [root@hdss7-21 ~]# kubectl apply -f  http://k8s-yaml.od.com/dubbo-demo-service/dp.yaml
    
  2. 验证zk信息

    [root@hdss7-21 ~]# cd /opt/zookeeper/bin
    [zk: localhost:2181(CONNECTED) 0] ls /
    [dubbo, zookeeper]
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值