美文网首页DevOps
Pipeline发布项目

Pipeline发布项目

作者: 小李飞刀_lql | 来源:发表于2021-11-16 05:33 被阅读0次

流水线发布java项目

框架

1634996746927.png

001 设置参数

1634975364916.png 1634975409390.png
  parameters {
    gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的代码分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
  }  

002 拉取代码

1634975949131.png 1634975997478.png
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '711e362f-2255-4c8c-bb4a-a81353e2ee29', url: 'http://192.168.153.18/test/demo.git']]])

0001 设置环境变量

  environment { 
    gitlab_address = "http://192.168.153.18/test/demo.git"
    gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
  }
  

0002 调整参数

checkout([$class: 'GitSCM', branches: [[name: "${params.Branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])

003 编译构建

sh 'mvn clean package -Dmaven.test.skip=true'

004 发布部署

SSH Server可以在config中配置
1634977338236.png 1634976928639.png 1634976988674.png
sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''# 备份已部署的程序
tomcat=/usr/local/tomcat
cd $tomcat/webapps
mv ROOT.war /data/backup/$(date +"%F_%T")_ROOT.war
# 部署新程序并重启Tomcat
mv ly-simple-tomcat-0.0.1-SNAPSHOT.war  ROOT.war
pid=$(ps -ef |grep tomcat |egrep -v \'grep\' |awk \'{print $2}\')
[ -n "$pid" ] && kill -9 $pid
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
/bin/bash /usr/local/tomcat/bin/startup.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'usr/local/tomcat/webapps', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

005 完整脚本

pipeline {
  agent {
    label 'web1'
  }
  parameters {
    gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的代码分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
  }  
  environment { 
    gitlab_address = "http://192.168.153.18/test/demo.git"
    gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
  }
  stages {
    stage('拉取代码') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: "${params.Branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])
      }
    }
    stage('编译构建') {
      steps {
        sh 'mvn clean package -Dmaven.test.skip=true'
      }
    }
    stage('测试') {
      steps {
        echo 'test....'
      }
    }
    stage('部署') {
      steps {
        sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''# 备份已部署的程序
        tomcat=/usr/local/tomcat
        cd $tomcat/webapps
        mv ROOT.war /data/backup/$(date +"%F_%T")_ROOT.war
        # 部署新程序并重启Tomcat
        mv ly-simple-tomcat-0.0.1-SNAPSHOT.war  ROOT.war
        pid=$(ps -ef |grep tomcat |egrep -v \'grep\' |awk \'{print $2}\')
        [ -n "$pid" ] && kill -9 $pid
        JAVA_HOME=/usr/local/jdk
        export JAVA_HOME
        /bin/bash /usr/local/tomcat/bin/startup.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'usr/local/tomcat/webapps', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
      }
    }
  }
}

集成Ansible,发布多台服务器

框架

1634996807694.png

001 参数设置

1634988161807.png 1634988190355.png
parameters {
  gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的分支名称', name: 'selectBranch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
  choice choices: ['webservers1', 'webservers2', 'webservers3'], description: '灰度发布策略,分批次部署', name: 'Servers'
}

002 查询凭据

1634995815055.png

003 完整脚本

pipeline {
  agent {
    label 'web1'
  }
  parameters {
    gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的分支名称', name: 'selectBranch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
    choice choices: ['webservers1', 'webservers2', 'webservers3'], description: '灰度发布策略,分批次部署', name: 'Servers'
  } 
  environment { 
    gitlab_address = "http://192.168.153.18/test/demo.git"
    gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
    gitlab_ssh_auth = "6665ff79-b7c8-4bbc-aff3-85c52eb465fa"
  }
  stages {
    stage('拉取代码') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: "${params.selectBranch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])
      }
    }
    stage('编译构建') {
      steps {
        sh 'mvn clean package -Dmaven.test.skip=true'
      }
    }
    stage('部署') {
      steps {
        withCredentials([usernamePassword(credentialsId: '711e362f-2255-4c8c-bb4a-a81353e2ee29', passwordVariable: 'password', usernameVariable: 'username')]) {
        sh """
cat > /opt/jenkins_home/.hosts << EOF
[webservers1]
192.168.153.17
192.168.153.18
[webservers2]
192.168.153.17
192.168.153.18
[webservers3]
192.168.153.17
192.168.153.18
EOF
cat > /opt/jenkins_home/.playbook.yaml << "EOF"
- hosts: $Servers
  gather_facts: no
  vars:
    workspace: $WORKSPACE
    build_number: $BUILD_NUMBER
    tomcat_dir: "/usr/local/tomcat"
    backup_dir: "/data/backup"
    backup_filename: "demo-ROOT-\$(date +%F)-{{build_number}}.war"
  tasks:
  - name: 推送部署包到远程服务器
    copy: src="{{ item }}" dest={{tomcat_dir}}/webapps
    with_fileglob:
      - "{{workspace}}/target/*.war"
  - name: 部署新程序并重启Tomcat
    shell: |
      cd {{tomcat_dir}}/webapps
      mv ROOT.war {{backup_dir}}/{{backup_filename}}
      mv *.war ROOT.war
      pid=\$(ps -ef |grep {{tomcat_dir}} |egrep -v 'grep' |awk '{print \$2}')
      [ -n "\$pid" ] && kill -9 \$pid
      export JAVA_HOME=/usr/local/jdk
      nohup {{tomcat_dir}}/bin/startup.sh
EOF
        """
        }
        ansiblePlaybook(
            playbook: '/opt/jenkins_home/.playbook.yaml',
            inventory: '/opt/jenkins_home/.hosts',
            credentialsId: "${gitlab_ssh_auth}"
        )
      }
    }
  }
}
注释
$WORKSPACE和$BUILD_NUMBER是jenkins的内部变量

相关文章

网友评论

    本文标题:Pipeline发布项目

    本文链接:https://www.haomeiwen.com/subject/vvnftrtx.html