pipeline { agent { label "test1" } environment { git_address = "http://192.168.0.11/my-group/ms.git" git_password = "c601674b-44e0-45a2-aaba-3f476e2c3c51" ansible_ssh_auth = "242dbf20-4e53-4fa1-b8e7-1479e0a51572" } parameters { gitParameter branch: '', branchFilter: 'origin/(.*)', defaultValue: 'origin/master', description: '请选择你要发布的分支:', name: 'branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH' extendedChoice description: '请选择你要发布的微服务:', multiSelectDelimiter: ',', name: 'Service', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'portal,gateway,product,stock,order', visibleItemCount: 5 choice choices: ['webservers1', 'webservers2'], description: '''请选择你要发布的服务器组: [webservers1] 192.168.0.14 [webservers2] 192.168.0.15''', name: 'Servers' } stages { stage('拉去取代码') { steps { checkout([$class: 'GitSCM', branches: [[name: "${params.branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_password}", url: "${git_address}"]]]) } } stage('编译构建'){ steps { sh "export JAVA_HOME=/usr/local/jdk" sh "/usr/local/maven/bin/mvn clean package -Dmaven.skip.test=true" } } stage('部署并启动'){ steps { // 将用户选择的微服务的构建文件拷贝到临时目录,以便ansible统一推送 // Service=portal,gateway,product,stock,order script { def tmp_dir = "$WORKSPACE/tmp" def services = "$Service".split(",") for(name in services) { sh """ echo $name pwd ls mkdir $tmp_dir |true cd $name-service if ls |grep biz &>/dev/null;then cd $name-service-biz fi mv target/*.jar $tmp_dir ls $tmp_dir """ } }
// 生成主机清单文件和playbook sh """ cat > /opt/jenkins/.hosts << EOF [webservers1] 192.168.0.14 [webservers2] 192.168.0.15 EOF cat > /opt/jenkins/.playbook.yaml <<EOF - hosts: $Servers gather_facts: no vars: workspace: $WORKSPACE work_dir: "/data/ms" service_name: $Service # Service=portal,gateway,product,stock,order tasks: - name: 推送构建文件 copy: src={{ item }} dest={{ work_dir }}/{{ item.split("/")[-1].split("-")[0] }} #取的是最后一个数组中的第一个字符串 with_fileglob: - "{{ workspace }}/tmp/*.jar" #/opt/jenkins/workspace/weifuwu为工作目录
- name: 重启服务 systemd: name={{ item }} state=restarted loop: "{{ service_name.split(',') }}" EOF """ ansiblePlaybook( playbook: "/opt/jenkins/.playbook.yaml", inventory: "/opt/jenkins/.hosts", credentialsId: "${ansible_ssh_auth}" ) } } } }
|