jenkins-自动化打包部署

环境:

        centos 7.2或者更新

        rmp包:官方下载地址 https://pkg.jenkins.io/redhat-stable/

        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 并进行配置

image.png

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

image.png

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

image.png

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

image.png

开始登录:

image.png

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

Maven Release Plug-in

Publish Over SSH

Multijob

image.png

image.png

image.png

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

配置jdk

image.png

配置maven

image.png

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

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

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

image.png

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

image.png

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

image.png

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

image.png

image.png

image.png

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

image.png

image.png

image.png

image.png


下面说下简单的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)])
				}
			}
		
		}		
        
    }
}

image.png

  • jenkins-自动化打包部署已关闭评论
  • 1,088 views
    A+
发布日期:2019年07月23日  所属分类:linux