jenkins构建项目

文件如果存放在C:\Program Files (x86)或者C:\Program Files需要进行设置系统权限,不然创建文件或目录会失败
1.设置好对应的svn仓库
 
2.GCPI配置的脚本:
@echo off
::创建文件夹APL用来打包
md GCPI
cd projects/server/GCPI

:: compile code from svn
echo start compiling java source code ...
javac  -encoding UTF-8 -classpath .;WebRoot\WEB-INF\lib\* src_main\com\zhyd\gcpi\common\controller\*.java src_main\com\zhyd\gcpi\common\dao\*.java src_main\com\zhyd\gcpi\common\service\*.java src_main\com\zhyd\gcpi\common\test\*.java src_main\com\zhyd\gcpi\common\util\*.java src_main\com\zhyd\gcpi\filter\*.java src_main\com\zhyd\gcpi\job\*.java src_main\com\zhyd\gcpi\job\task\*.java src_main\com\zhyd\gcpi\mapper\sysconfig\*.java src_main\com\zhyd\gcpi\mapper\shrio\*.java src_main\com\zhyd\gcpi\mapper\log\*.java  src_main\com\zhyd\gcpi\service\log\*.java src_main\com\zhyd\gcpi\service\shrio\*.java src_main\com\zhyd\gcpi\service\sysconfig\*.java src_main\com\zhyd\gcpi\service\log\impl\*.java src_main\com\zhyd\gcpi\service\shrio\impl\*.java src_main\com\zhyd\gcpi\service\sysconfig\impl\*.java src_main\com\zhyd\gcpi\shrio\realm\*.java src_main\com\zhyd\gcpi\vo\*.java src_main\com\zhyd\gcpi\web\*.java -d WebRoot\WEB-INF\classes
echo copy xml files...
xcopy /e/r/c "src_config\*" "WebRoot\WEB-INF\classes"
xcopy /e/r/c "src_main\com\zhyd\gcpi\mapper\log\*.xml" "WebRoot\WEB-INF\classes\com\zhyd\gcpi\mapper\log"
xcopy /e/r/c "src_main\com\zhyd\gcpi\mapper\shrio\*.xml" "WebRoot\WEB-INF\classes\com\zhyd\gcpi\mapper\shrio"
xcopy /e/r/c "src_main\com\zhyd\gcpi\mapper\sysconfig\*.xml" "WebRoot\WEB-INF\classes\com\zhyd\gcpi\mapper\sysconfig"

:: 生成GCPI.war
cd WebRoot
jar -cvf GCPI.war .\*

@echo off
echo 当前CMD默认目录:%cd%
cd ..\..\..\..

:: 将SVN上需要用的文件copy到本地GCPI文件夹
echo start copying ......
echo 当前CMD默认目录:%cd%
xcopy /e/r/c "setup\server\*" "GCPI"

:: copy GCPI.war to apache-tomcat-6.0.51\webapps
echo move GCPI.war to tomcat\webapps ...
::move e:\jenkins\workspace\aaa\projects\server\GCPI\WebRoot\GCPI.war e:\jenkins\workspace\aaa\APL\apache-tomcat-6.0.51\webapps
echo 当前CMD默认目录:%cd%
move %cd%\projects\server\GCPI\WebRoot\GCPI.war %cd%\GCPI\apache-tomcat-6.0.51\webapps

echo cd GCPI and copying sql ...
cd GCPI
::echo 当前CMD默认目录:%cd%
::xcopy /s "D:\Jenkins\jenkins-2.60.1\mysql-5.7.17-win32.rar" .
xcopy /s "D:\Jenkins\jenkins-2.60.1\mysql-5.7.17-win32" .

::echo unzip sql.rar ...
::start winrar x mysql-5.7.17-win32.rar

::echo delete mysql-5.7.17-win32.rar
::del /f /s /q mysql-5.7.17-win32.rar

:: 调用Inno Setup工具进行封装,前提是要先在本机安装Inno setup软件,platform.iss/install.bat和uninstall.bat都在SVN上,
echo compiling platform.iss ... Inno Setup needs to be installed first ....
::无法使用compil32命令来运行Inno setup脚本,所以使用iscc命令以控制台输出方式运行,参考http://www.cnblogs.com/joean/p/4870428.html
::compil32 /cc platform.iss
iscc platform.iss
3.写对应的platform.iss文件
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "GCPI" 
;产品版本
#define MyAppVersion "1.0.0.1" 
#define MyAppPublisher "AgriGarden" 
#define MyAppURL "http://www.agri-garden.com/" 
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{FC6B755E-7269-44BD-ADD1-3E641794BDA9}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
;默认开始菜单名  
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
;将生成的文件放在与iss脚本相同的目录下
OutputDir=.
OutputManifestFile=Setup-Manifest.txt
OutputBaseFilename=GCPI1.0
Compression=lzma
SolidCompression=yes
;安装图标 
SetupIconFile=AgriGarden.ico
;卸载图标  
Uninstallable=true  
UninstallDisplayIcon=AgriGarden.ico
;安装完成后要求重启,因为要刷新注册表,这样自定义的文件就不会被杀毒软件误认为是无效快捷方式  
AlwaysRestart=yes 
;备注版本信息 
VersionInfoCompany=http://localhost:8080/GCPI/0-webapp/html/factory_login.html  
VersionInfoDescription=AgriGarden   
;文件版本
VersionInfoVersion=1.0.0.0
;产品版本
;VersionInfoTextVersion=1.2.3.4
VersionInfoCopyright=Copyright (C)2017

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "apache-tomcat-6.0.51\*"; DestDir: "C:\Program Files (x86)\apache-tomcat-6.0.51"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "jdk1.6.0_43\*"; DestDir: "C:\Program Files (x86)\jdk1.6.0_43"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "mysql-5.7.17-win32\*"; DestDir: "C:\Program Files (x86)\mysql-5.7.17-win32"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "redis-3.0.503\*"; DestDir: "C:\Program Files (x86)\redis-3.0.503"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "install.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "uninstall.bat"; DestDir: "{app}"; Flags: ignoreversion
;Source: "D:\setup\项目启动.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "AgriGarden.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "vcredist_x64.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "vcredist2010_x64_XiaZaiBa.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "gcpidb.sql"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
;卸载图标位置  
Source: "uninstall.ico"; Flags: solidbreak dontcopy  
;卸载插件位置  
Source: "UpdateIcon.dll"; Flags: solidbreak dontcopy 

[Icons]
;开始菜单,桌面快捷方式  
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename:"{app}\vcredist_x64.exe";Description:"正在安装vcredist_x64.exe";
Filename:"{app}\vcredist2010_x64_XiaZaiBa.exe";Description:"正在安装vcredist2010_x64_XiaZaiBa.exe";
Filename:"{app}\install.bat";Description:"正在启动或配置相关程序";

[UninstallRun]
Filename:"{app}\uninstall.bat";
Filename:"{app}\vcredist_x64.exe"; Parameters:"-uninstall";
Filename:"{app}\vcredist2010_x64_XiaZaiBa.exe"; Parameters:"-uninstall";

[UninstallDelete]
Type:filesandordirs;Name:"C:\Program Files (x86)\apache-tomcat-6.0.51" 
Type:filesandordirs;Name:"C:\Program Files (x86)\mysql-5.7.17-win32"
Type:filesandordirs;Name:"C:\Program Files (x86)\redis-3.0.503"

[Messages]  
BeveledLabel=AgriGarden   
;卸载对话框说明    
ConfirmUninstall=Are you sure you want to completely remove GCPI and all of its components? %n%nPress [Yes] to continue removing %1;%nPress [No] to cancel.

;自定义注册表,用于在用户系统中创建,修改或删除注册表健值  
[Registry]  
Root: HKLM; Subkey: "Software\GCPI"; ValueType: string; ValueName: Installed version; ValueData: "GCPI1.0"; Flags: uninsdeletekey  
Root: HKCR; Subkey: "GCPI"; ValueType: String; ValueData: "GCPI files";Flags: uninsdeletekey  
Root: HKCR; Subkey: "GCPI\DefaultIcon"; ValueType: String; ValueData: "{app}\AgriGarden.ico";Flags: uninsdeletekey  
Root: HKCR; Subkey: "GCPI\shell\open\command"; ValueType: String; ValueData: "{app}\GCPI.exe %1";Flags: uninsdeletekey  
Root: HKCR; Subkey: ".GCPI"; ValueType: String; ValueData: "GCPI";Flags: uninsdeletekey  

[code]   
function GetInstalledVersion(): String;  
var InstalledVersion: String;  
begin  
  InstalledVersion :='';  
  RegQueryStringValue(HKLM, 'Software\GCPI', 'Installed version', InstalledVersion);  
  Result := InstalledVersion;  
end;  
  
function InitializeSetup(): Boolean;  
var PrevVer: String;  
begin  
  PrevVer := GetInstalledVersion();  
  result := true;  
  if length(PrevVer) > 0 then   
  begin  
    //如果发现程序已经安装过了  
    MsgBox ('The program ' + PrevVer + ' has already been installed. Please uninstall it before start the new program.', mbError, MB_OK);  
    result := false;  
  end;  
end;  

//插件函数用法  
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系  
//返回值: 成功 = True, 失败 = False  
//安装初始化  
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;  
external 'UpdateIcon@files:UpdateIcon.dll stdcall';  
//替换卸载程序的图标  
function UpdateUninstIcon(const IcoFileName: String): Boolean;  
begin   
  //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!其它参数类似!  
  Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替换卸载图标  
end;  
procedure CurStepChanged(CurStep: TSetupStep);  
var uninspath, uninsname, NewUninsName, MyAppName,sIcon: String;  
  
begin  
  //注意: 替换卸载程序的图标,必须是在卸载程序生成之前!  
  //建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!  
  if CurStep=ssInstall then  
    begin  
    sIcon:= ExpandConstant('{tmp}\uninstall.ico'); //定义卸载图标  
    //ExtractTemporaryFile('UpdateIcon.dll');//该动态链接库可网上查找  
    ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标  
    //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!  
    UpdateUninstIcon(sIcon) //替换卸载图标  
    end;  
  if CurStep=ssDone then  
    begin  
    // 指定新的卸载文件名(不包含扩展名),请相应修改!    
    NewUninsName := 'UninstallGCPI';    
    // 应用程序名称,与 [SEUTP] 段的 AppName 必须一致,请相应修改!    
    MyAppName := 'GCPI';    
    // 以下重命名卸载文件    
    uninspath:= ExtractFilePath(ExpandConstant('{uninstallexe}'));    
    uninsname:= Copy(ExtractFileName(ExpandConstant('{uninstallexe}')),1,8);    
    RenameFile(uninspath + uninsname + '.exe', uninspath + NewUninsName + '.exe');    
    RenameFile(uninspath + uninsname + '.dat', uninspath + NewUninsName + '.dat');   
    end;   
    // 以下修改相应的注册表内容  
    if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1') then
    begin  
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"');  
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT');  
    end;     
end;
4.再写install.bat文件
@echo off 

title 运维系统正在安装中,请不要手动关闭
color 0a

echo compil32 环境变量
set InnoSetup=C:\Program Files (x86)\Inno Setup 5\

echo jdk 环境变量
set jdkpath=C:\Program Files (x86)\jdk1.6.0_43

::setx variable value -m
:: setx 这个是用来设置环境变量的,并且会写入注册表. variable,会被覆盖,此操作不可逆的
:: variable 代表键 value代表值 -m代表写入系统环境变量,如果没有该参数会写入当前用户环境变量.

setx JAVA_HOME "%jdkpath%" -m

setx CLASSPATH ".:%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar" -m

::追加path环境变量  find 后面/i代表忽略大小写   &&执行成功执行的命令  ||执行失败执行的命令
echo %Path%|find /i "%JAVA_HOME%" && set IsNull=true || set IsNull=false
echo %IsNull%
if not %IsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f

::设置当前用户环境变量
setx Path "%%JAVA_HOME%%\bin;%Path%;%InnoSetup%"
)

echo mysql 环境变量
set mysqlpath=C:\Program Files (x86)\mysql-5.7.17-win32

::setx variable value -m
:: setx 这个是用来设置环境变量的,并且会写入注册表. variable,会被覆盖,此操作不可逆的
:: variable 代表键 value代表值 -m代表写入系统环境变量,如果没有该参数会写入当前用户环境变量.

setx MYSQL_HOME "%mysqlpath%" -m

::追加path环境变量  find 后面/i代表忽略大小写   &&执行成功执行的命令  ||执行失败执行的命令
echo %Path%|find /i "%MYSQL_HOME%" && set IsNull=true || set IsNull=false
echo %IsNull%
if not %IsNull%==true (
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%MYSQL_HOME%%\bin" /f

::设置当前用户环境变量
setx Path "%%JAVA_HOME%%\bin;%%MYSQL_HOME%%\bin;%Path%" 
)

echo tomcat 环境变量
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v CATALINA_HOME /t REG_EXPAND_SZ /d "C:\Program Files (x86)\apache-tomcat-6.0.51" /f

echo mysql 环境变量
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MYSQL_HOME /t REG_EXPAND_SZ /d "C:\Program Files (x86)\mysql-5.7.17-win32" /f

::echo 安装vcredist_x64.exe
::start /wait .\vcredist_x64.exe /verysilent sp-

::echo 安装vcredist2010_x64_XiaZaiBa.exe
::start /wait .\vcredist2010_x64_XiaZaiBa.exe /verysilent sp-

echo 启动mysql并更新密码
"C:\Program Files (x86)\mysql-5.7.17-win32\bin\mysqld.exe" --install

net start mysql
::设置mysql服务自启动
sc config mysql start=auto
"C:\Program Files (x86)\mysql-5.7.17-win32\bin\mysql.exe" -u root -e "update mysql.user set authentication_string=password('root') where user='root' and Host = 'localhost'; "

net stop mysql
net start mysql
echo 导入gcpidb.sql
md C:\sql
move "C:\Program Files (x86)\GCPI\gcpidb.sql" C:\sql\
::mysql -h localhost -u root -proot < C:\Program Files (x86)\GCPI\gcpidb.sql
:: use names utf8;
"C:\Program Files (x86)\mysql-5.7.17-win32\bin\mysql.exe" -uroot -proot < C:\sql\gcpidb.sql
echo mysql启动完毕

::配置redis成为服务,就不会出现dos窗口
echo 启动redis
cd C:\Program Files (x86)\redis-3.0.503\
redis-server --service-install redis.windows.conf --loglevel verbose
redis-server --service-start 
::start /b redis-server.exe redis.windows.conf
echo redis启动完毕

rd /s/q C:\sql
echo 删除gcpidb.sql

echo 启动tomcat
set JAVA_HOME=C:\Program Files (x86)\jdk1.6.0_43
set CATALINA_HOME=C:\Program Files (x86)\apache-tomcat-6.0.51
set CATALINA_BASE=C:\Program Files (x86)\apache-tomcat-6.0.51

cd /d C:\Program Files (x86)\apache-tomcat-6.0.51\bin

::安装tomcat到服务中
call service.bat install tomcat

::设置tomcat服务自启动
sc config tomcat start=auto
net start tomcat
exit
5.最后写uninstall.bat
@echo off
title abc系统正在卸载中,请不要手动关闭
color 0a
echo 删除环境变量
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /f 
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v CATALINA_HOME /f
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MYSQL_HOME /f
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v CLASSPATH /f
echo 删除Apache注册表项
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation" /f

setx Path ""

echo 停止并删除tomcat
net stop tomcat
cd /d C:\Program Files (x86)\apache-tomcat-6.0.51\bin
::删除tomcat服务
call service.bat remove tomcat
::cd ..\..\
::sc delete "tomcat"
echo 停止并删除mysql
net stop mysql
sc delete mysql
::删除redis服务
echo 停止并删除redis服务
net stop Redis
sc delete Redis 
exit
5.检查文件目录是否存在:
if not exist c:\folder mkdir c:\folder   //如果文件不存在,则进行创建
if exist c:\folder rd c:\folder /s/q   //如果文件存在,进行删除

%cd%:批处理脚本(bat脚本)、命令行窗口

%~dp0:批处理脚本(bat脚本

代表的值:

%cd%:会。因为代表的是当前目录

%~dp0:不会。因为代表的是脚本文件在磁盘的位置

使用范围:

%cd%:批处理脚本(bat脚本)、命令行窗口

%~dp0:批处理脚本(bat脚本)







posted on 2018-03-06 18:11  xiaojiayu0011  阅读(612)  评论(0)    收藏  举报

导航