jenkins-自动化打包部署

环境:

        centos 7.2或者更新

        rmp包:官方下载地址 Redhat Jenkins Packages

        java-1.8.0

安装:

[root@jenkins ~]# yum install wget  java-1.8.0 -y

[root@jenkins ~]# cd /var/opt/
[root@jenkins opt]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.176.2-1.1.noarch.rpm
[root@jenkins opt]# yum install ./jenkins-2.176.2-1.1.noarch.rpm -y

配置:jenkins 配置文件 /etc/sysconfig/jenkins  ,可以根据需求自行修改

[root@jenkins opt]# grep '^[^#]' /etc/sysconfig/jenkins 
JENKINS_HOME="/data/jenkins"        #jenkins的数据目录
JENKINS_JAVA_CMD=""
JENKINS_USER="jenkins"
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"                #jenkins 通过web访问的端口
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
mkdir /data/jenkins -pv
chown jenkins.jenkins /data/jenkins

访问web 并进行配置

jenkins-自动化打包部署_第1张图片

稍等一会,就可以正常登录了

jenkins-自动化打包部署_第2张图片

根据需要安装自定义插件,本次选择是推荐安装

jenkins-自动化打包部署_第3张图片

等待安装,估计需要5分钟左右,如果中间有失败,重试就行,安装完成之后,会自动跳入如下页面,然后自己创建用户,或者直接使用admin 账户

jenkins-自动化打包部署_第4张图片

开始登录:

jenkins-自动化打包部署_第5张图片

登录之后,安装一些插件,点击系统管理,进入 插件管理,选择可选插件,然后过滤下载

Maven Release Plug-in

Publish Over SSH

Multijob

jenkins-自动化打包部署_第6张图片

jenkins-自动化打包部署_第7张图片

jenkins-自动化打包部署_第8张图片

安装之后,点击系统管理,进入 全局工具配置

配置jdk

jenkins-自动化打包部署_第9张图片

配置maven

jenkins-自动化打包部署_第10张图片

配置远程服务器信息 Publish over SSH

    系统管理  系统设置,然后搜索 Publish over SSH

    填写远程机器的登录信息,填写之后 一定要测试一下,是否认证成功

jenkins-自动化打包部署_第11张图片

如果有需要用到的全局变量,也可以在系统设置里面配置,如下

jenkins-自动化打包部署_第12张图片

准备工作差不多了,现在需要创建一个maven 任务,测试一下

jenkins-自动化打包部署_第13张图片

这个定时删除旧的构建,还可以节省磁盘空间

jenkins-自动化打包部署_第14张图片

jenkins-自动化打包部署_第15张图片

jenkins-自动化打包部署_第16张图片

构建触发器,根据需要选择,默认为第一个选择

jenkins-自动化打包部署_第17张图片

jenkins-自动化打包部署_第18张图片

jenkins-自动化打包部署_第19张图片

jenkins-自动化打包部署_第20张图片


下面说下简单的pipline 流水线

pipeline {
    agent any 
	environment {
        ios="ios"
		android="android"
    }
    stages {
        
		
		stage("清理之前打包的热更资源文件") {
			steps {
				script { 
						sh label: 'removetars', returnStdout: true, script: 'rm -rf target aliPjo RainVersion'
					}
			}
		}
		
		
		
		stage('请选择版本[正式版|开发板]'){
			steps {
				script {
					def result="product\ndebug"
					def userInput = input(id: 'userInput', message: '请选择版本[正式版|开发版]', 
					parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
						description:'product:正式版\ndebug:开发版', name:'打包热更资源分支', choices: "${result}"] 
					]) 
		 
					if ( userInput =="debug" ) {
								ios="iosdebug"
								android="androiddebug"
					}else {
								ios="ios"
								android="android"
					}
					
				 
				}
			
			
			}
		
		
		}
		
		
		
        stage('请输入要更新的 IOS 客户端版本') { 
			steps { 
        
				script { 
						
					  def  result = sh(returnStdout: true, script: "sh /data/jenkins/get.cliet.version.sh $ios").trim()
					  def userInput = input(id: 'userInput', message: '请输入要更新的 IOS 客户端版本', 
					  parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
					   description:'...', name:'客户端版本', choices: "${result}"] 
					  ]) 


					checkout([$class: 'SubversionSCM', additionalCredentials: [], 
						excludedCommitMessages: '', 
						excludedRegions: '', 
						excludedRevprop: '', 
						excludedUsers: '', 
						filterChangelog: false, 
						ignoreDirPropChanges: false, 
						includedRegions: '', 
						locations: [[cancelProcessOnExternalsFail: true, 
							credentialsId: 'e433b9f7-72aa-41c3-add0-cecss3ba7398', 
							depthOption: 'infinity', 
							ignoreExternalsOption: true, 
							local: "./aliPjo/$ios/${userInput}", 
							remote: "svn://svn.kp.aliyu.com/hotclient/aliPjo/$ios/${userInput}"]], 
						quietOperation: true, 
						workspaceUpdater: [$class: 'UpdateUpdater']])

					
					checkout([$class: 'SubversionSCM', additionalCredentials: [], 
						excludedCommitMessages: '', 
						excludedRegions: '', 
						excludedRevprop: '', 
						excludedUsers: '', 
						filterChangelog: false, 
						ignoreDirPropChanges: false, 
						includedRegions: '', 
						locations: [[cancelProcessOnExternalsFail: true, 
							credentialsId: 'e433b9f7-72aa-41c3-add0-cecss3ba7398', 
							depthOption: 'files', 
							ignoreExternalsOption: true, 
							local: "./RainVersion/$ios/", 
							remote: "svn://svn.kp.aliyu.com/hotclient/aliPjo/$ios/"]], 
						quietOperation: true, 
						workspaceUpdater: [$class: 'UpdateUpdater']])
						
				}
			} 

		} 
		
		
		stage('请输入要更新的 Android 客户端版本') { 
			steps { 
        
				script { 
	 
					  def  result = sh(returnStdout: true, script: "sh /data/jenkins/get.cliet.version.sh $android").trim()
					  def userInput = input(id: 'userInput', message: '请输入要更新的 Android 客户端版本', 
					  parameters: [[$class: 'ChoiceParameterDefinition', defaultValue: 'strDef', 
					   description:'...', name:'客户端版本', choices: "${result}"] 
					  ]) 

					  println(userInput); //Use this value to branch to different logic if needed 
				 
				
					checkout([$class: 'SubversionSCM', additionalCredentials: [], 
						excludedCommitMessages: '', 
						excludedRegions: '', 
						excludedRevprop: '', 
						excludedUsers: '', 
						filterChangelog: false, 
						ignoreDirPropChanges: false, 
						includedRegions: '', 
						locations: [[cancelProcessOnExternalsFail: true, 
							credentialsId: 'e433b9f7-72aa-41c3-add0-cecss3ba7398', 
							depthOption: 'infinity', 
							ignoreExternalsOption: true, 
							local: "./aliPjo/$android/${userInput}", 
							remote: "svn://svn.kp.aliyu.com/hotclient/aliPjo/$android/${userInput}"]], 
						quietOperation: true, 
						workspaceUpdater: [$class: 'UpdateUpdater']])
					
					
					checkout([$class: 'SubversionSCM', additionalCredentials: [], 
						excludedCommitMessages: '', 
						excludedRegions: '', 
						excludedRevprop: '', 
						excludedUsers: '', 
						filterChangelog: false, 
						ignoreDirPropChanges: false, 
						includedRegions: '', 
						locations: [[cancelProcessOnExternalsFail: true, 
							credentialsId: 'e433b9f7-72aa-41c3-add0-cecss3ba7398', 
							depthOption: 'files', 
							ignoreExternalsOption: true, 
							local: "./RainVersion/$android/", 
							remote: "svn://svn.kp.aliyu.com/hotclient/aliPjo/$android/"]], 
						quietOperation: true, 
						workspaceUpdater: [$class: 'UpdateUpdater']])

				}
			} 

		}


		stage("打包热更资源文件") {
			steps {
				script { 
						sh label: 'tarhotclient', returnStatus: true, script: "[ ! -f RainVersion/$android/RainVersion.json ] && exit 1"
						sh label: 'tarhotclient', returnStatus: true, script: "[ ! -f RainVersion/$ios/RainVersion.json ] && exit 1"
						sh label: 'tarhotclient', returnStatus: true, script: "\\cp RainVersion/$android/RainVersion.json aliPjo/$android/ "
						sh label: 'tarhotclient', returnStatus: true, script: "\\cp RainVersion/$ios/RainVersion.json aliPjo/$ios/ "
						sh label: 'tarhotclient', returnStdout: true, script: "[ ! -d target ] && mkdir -pv target"
						sh label: 'tarhotclient', returnStdout: true, script: "tar  --exclude='*.svn' -zcvf target/hotclient.tar.gz aliPjo"
					}
			}
		}
		
		stage("传输文件到管理机并更新"){
			steps{
				script{
					sshPublisher(publishers: [sshPublisherDesc(configName: 'DevOps', 
						transfers: [sshTransfer(cleanRemote: false, excludes: '', 
							execCommand: 'sh /data/dev.scripts/update_hotclient.sh', 
							execTimeout: 120000, 
							flatten: false, 
							makeEmptyDirs: false, 
							noDefaultExcludes: false, 
							patternSeparator: '[, ]+', 
							remoteDirectory: '/data/updateapps/', 
							remoteDirectorySDF: false, 
							removePrefix: 'target/', 
							sourceFiles: 'target/hotclient.tar.gz')], 
						usePromotionTimestamp: false, 
						useWorkspaceInPromotion: false, 
						verbose: false)])
				}
			}
		
		}		
        
    }
}

jenkins-自动化打包部署_第21张图片

你可能感兴趣的:(linux,Linux,tools,jenkins,自动化,运维)