• pipeline + Ansible 部署应用


    Pipeline是什么?

    从某种抽象层次上讲,部署 流水线( Deployment pipeline)是指从软件版本控制库到用户手中这一 过程 的 自动化 表现 形式。

    按《 持续 交付》 中的 定义, Jenkins 本来就支持 pipeline(通常会把部署流水线简称为pipeline), 只是 一 开始不叫pipeline, 而叫任务。

    Pipeline

    pipeline{
        agent{
            label "master"
        }
        environment {
            mvn_goals = "clean install"
        }
        parameters {
            choice(name:'BUILD_BRANCH', choices: 'develop
    master', description:'请选择分支:')
            choice(name: 'project_profile', choices: 'test
    dev', description: '选择配置文件')
            choice(name: 'mvn_goals', choices: 'clean install
    clean', description: 'mvn命令')
        }
        stages{
            stage("获取代码"){
                steps{
                    script {
                    // checkout([$class: 'GitSCM', branches: [[name: '${params.BUILD_BRANCH}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f6491ca0-5731-4b14-88fd-3de8e2d7bbf0', url: 'git@code.gome.inc:IM-CD/gmkq.git']]])
                      def result = sh script: "rm -r ${WORKSPACE}/gmkq", returnStatus: true
                      if (result == 0){
                        sh "git clone -b ${params.BUILD_BRANCH} git@code.gome.inc:IM-CD/gmkq.git"
                      } 
                
                    }    
                }
    
            }
            stage('MVN编译'){
                steps{
                    script{
                       sh script: "/usr/local/maven3.5/bin/mvn ${params.mvn_goals} -q -e -U -P ${params.project_profile} -Dmaven.test.skip=true"
    
                    }
                    // sh  "/usr/local/maven3.5/bin/mvn ${params.mvn_goals} -q -e -U -P ${params.project_profile} -Dmaven.test.skip=true"
                    
                }
            }
            stage(ansible部署){
                steps{
                    ansiblePlaybook installation: 'ansible-playbook', inventory: '/etc/ansible/gome-kq/hosts', playbook: '/etc/ansible/gome-kq/site.yml'
                }
            }
        }
        post{
            success{
                echo "========本次构建成功 ========"
            }
            failure{
                echo "========本次构建失败========"
            }
        }
    }

    Ansible 部署逻辑代码

    项目结构:

    [root@kvm-10-115-88-123 gome-kq]# tree 
    .
    ├── hosts
    ├── roles
    │   └── kq
    │       ├── tasks
    │       │   ├── gome_kq
    │       │   │   └── main.yml
    │       │   └── main.yml
    │       └── vars
    │           └── main.yml
    └── site.yml

    hosts部分, 发项目为分组

    [root@kvm-10-115-88-123 gome-kq]# cat hosts 
    [gome-kq]
    10.115.78.1
    
    [gome-kq:vars]
    dev=kq
    
    [gome-ehm]
    10.115.78.2
    
    [gome-ehm:vars]
    dev=ehm

    tasks 主任务入口:

    [root@kvm-10-115-88-123 kq]# cat tasks/main.yml 
    ---
    - name: deploy gome_kq
      include: gome_kq/main.yml
      when: dev is defined and dev=='kq'  

    tasks 项目逻辑入口

    [root@kvm-10-115-88-123 kq]# cat tasks/gome_kq/main.yml 
    ---
    - name: Copy app to remote host
      copy: src={{ local_app_name }} dest={{ remote_dir }}
    
    - name: stop prod app
      shell: ps -ef | grep  {{item}}  | grep -v grep |  awk '{print $2}' | xargs kill -9
      ignore_errors: True 
      register: result
      with_items: "{{tomcat_kq}}"
    
    - name: Backup prod package
      shell: mv {{ remote_dir }}/{{ item }}/webapps/gomekq.war {{ remote_dir }}/backup/gomekq.war_`date +%Y%m%d%H%M%S`
      with_items: "{{tomcat_kq}}"
    
    - name:  Copy app to tomcat home
      shell: cp {{ remote_dir }}/gomekq.war {{ remote_dir }}/{{ item }}/webapps
      with_items: "{{tomcat_kq}}"
       
    
    - name: start tomcat
      shell: "{{ remote_dir }}/{{item}}/bin/startup.sh" 
      with_items: "{{tomcat_kq}}"

    vars变量入口

    [root@kvm-10-115-88-123 kq]# cat vars/main.yml 
    local_app_name: "/var/lib/jenkins/workspace/kq-pipline/target/gomekq.war"
    remote_dir: "/home/work"
    #remote_dir_tomcat: "/home/work/{{ item }}/webapps"
    #start_tomcat: "/home/work/{{item}}/bin"
    tomcat_kq:
      - tomcat-kq-8080
      - tomcat-kq-8081
      - tomcat-kq-8082
    #with_items: "{{ tomcat_kq }}"
    
    process_name: 
      - tomcat-kq-8080
      - tomcat-kq-8081
      - tomcat-kq-8082

    效果如下:

     

     

     

  • 相关阅读:
    Win10 64bit 下 Oracle 11g的安装
    删除服务列表中的任意服务 services.msc
    centos7修改docker镜像源的方法
    Docker零基础
    CentOS 查看日志命令
    mac 修改默认python,pip,为python3,pip3
    多次调用摄像头,需要考虑渲染问题
    Ant Designer Vue 中 layout 样式类名丢失
    Windows10 右键假死卡住转圈。
    mac 安装yarn
  • 原文地址:https://www.cnblogs.com/zhangzihong/p/11692643.html
Copyright © 2020-2023  润新知