基于jenkins一键打包生成软件exe

 梳理一下基于jenkins一键打包生成软件exe:

 

Prerequisite:

将需要用到的文件上传到svn指定位置,以便于随时可以checkout使用。这里把以下文件import到svn的路径:https://192.168.xxx.xxx/svn/APL/trunk/products/system/setup/server

apache-tomcat-6.0.51

jdk1.6.0_43

mysql-5.7.17-win32

Xxxxxx.ico

install.bat

uninstall.bat

platform.iss

vcredist_x64.exe

vcredist2010_x64_XiaZaiBa.exe

也可以把这些文件放到服务器的某个位置,比如D:\setup

 

1.      Createa new job on Jenkins

SVNRepository URL:

https://192.168.1.9/svn/APL/trunk/products/system

 

Buildcommand:

setup\server\Jenkins_Build.bat

 

注意事项:

1)      脚本的关键其实是最后一步,调用Inno Setup工具进行封装,但前提是要先在本机安装Inno setup软件,platform.iss/install.bat/uninstall.bat都通过SVN上export。

2)      Platform.iss是Inno setup的主运行程序,分析脚本内容如下:

OutputDir=E:\setup\setup

这里,OutputDir是生成的exe软件包的位置,本例中,是我本机的E盘

OutputBaseFilename=mysetup

这里,OutputBaseFilename是生成的exe软件包的名字,本例中,软件包名字为mysetup.exe。

Source:"E:\setup\jdk1.6.0_43\*"; DestDir: "C:\Program Files(x86)\jdk1.6.0_43"; Flags: ignoreversion recursesubdirs createallsubdirs

其中,Source路径是本机存放的需要封装的文件的路径,DestDir路径是封装成exe后再运行时的对象机中的路径,本例中,Source是我本机的E盘,DestDir是192.168.1.9服务器的C盘。

3)      以下五个文件都会放到{app}路径下,本例中是192.168.1.9服务器的C:\ Program Files (x86)\AplIot下。

Source:"E:\setup\install.bat"; DestDir: "{app}"; Flags:ignoreversion

Source:"E:\setup\uninstall.bat"; DestDir: "{app}"; Flags:ignoreversion

Source:"E:\setup\AgriGarden.ico"; DestDir: "{app}"; Flags:ignoreversion

Source:"E:\setup\vcredist_x64.exe"; DestDir: "{app}"; Flags: ignoreversion

Source:"E:\setup\vcredist2010_x64_XiaZaiBa.exe"; DestDir: "{app}";Flags: ignoreversion

4)      这里需要注意的是,vcredist_x64.exe和vcredist2010_x64_XiaZaiBa.exe是可执行文件,通过Platform.iss可以自启动可执行文件,除了在[Files]里增加Source和DestDir之外,还需要在[Run]里添加Filename和路径。

[Files]

Source: "E:\setup\vcredist_x64.exe";DestDir: "{app}"; Flags: ignoreversion

Source:"E:\setup\vcredist2010_x64_XiaZaiBa.exe"; DestDir: "{app}";Flags: ignoreversion

 

[Run]

Filename:"{app}\vcredist_x64.exe";Description:"正在安装vcredist_x64.exe";

Filename:"{app}\vcredist2010_x64_XiaZaiBa.exe";Description:"正在安装vcredist2010_x64_XiaZaiBa.exe";

5)      在[Run]里会调用启动install.bat,在[UninstallRun]里会调用启动uninstall.bat

[Run]

Filename:"{app}\install.bat";Description:"正在启动或配置相关程序";

[UninstallRun]

Filename:"{app}\uninstall.bat";

 

2.      Verifythe job

Job成功完成后,去Platform.iss脚本里的OutputDir路径下取exe文件,本例中是在E:\setup\setup中会生成mysetup.exe。

在本地的虚拟机中进行验证:

1.      新建虚拟机

2.      控制面板->卸载程序->卸载和VC++Redistributable相关的程序

3.      将本机中的E:\setup\setup\mysetup.exe粘贴到虚拟机桌面,双击运行。

4.      运行成功后,登陆http://localhost:8080/AplIot/webSite-iot/html/login.html (选择Chrome浏览器或者360浏览器)查看AplIot网页是否可以正常运行。


附源码:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "AplIot" 
#define MyAppVersion "1.0" 
#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}
DisableProgramGroupPage=yes
OutputDir=E:\setup\setup
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
SetupIconFile=AgriGarden.ico
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

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

[Files]
Source: "E:\setup\apache-tomcat-6.0.51\*"; DestDir: "C:\Program Files (x86)\apache-tomcat-6.0.51"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\setup\jdk1.6.0_43\*"; DestDir: "C:\Program Files (x86)\jdk1.6.0_43"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\setup\mysql-5.7.17-win32\*"; DestDir: "C:\Program Files (x86)\mysql-5.7.17-win32"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "E:\setup\install.bat"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\setup\uninstall.bat"; DestDir: "{app}"; Flags: ignoreversion
;Source: "D:\setup\项目启动.html"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\setup\AgriGarden.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\setup\vcredist_x64.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\setup\vcredist2010_x64_XiaZaiBa.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[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";
[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"
@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 mysql启动完毕

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
@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

setx Path ""

echo 停止并删除tomcat
net stop tomcat
cd C:\Program Files (x86)\tomcat6\bin
cd ..\..\
call service.bat remove
sc delete tomcat
echo 停止并删除mysql
net stop mysql
sc delete mysql
exit
@echo off
::创建文件夹APL用来打包
md APL
cd projects/server/AplIot

:: compile svn code
echo start compiling java source code ...
javac  -encoding UTF-8 -classpath .;WebRoot\WEB-INF\lib\* src\com\zhyd\apliot\common\*.java src\com\zhyd\apliot\controller\*.java  src\com\zhyd\apliot\dao\*.java src\com\zhyd\apliot\dao\impl\*.java src\com\zhyd\apliot\filter\*.java  src\com\zhyd\apliot\listener\*.java src\com\zhyd\apliot\modbus\dao\*.java src\com\zhyd\apliot\modbus\dao\impl\*.java src\com\zhyd\apliot\modbus\model\*.java  src\com\zhyd\apliot\model\*.java  src\com\zhyd\apliot\server\dao\*.java src\com\zhyd\apliot\server\dao\impl\*.java src\com\zhyd\apliot\task\*.java src\com\zhyd\apliot\test\*.java src\com\zhyd\apliot\util\*.java src\com\zhyd\apliot\xml\dao\*.java  src\com\zhyd\apliot\xml\dao\impl\*.java  -d WebRoot\WEB-INF\classes

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

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

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

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

echo copying sql ...
xcopy /s "E:\setup\mysql-5.7.17-win32.rar" .

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

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

:: 调用Inno Setup工具进行封装,前提是要先在本机安装Inno setup软件
echo compiling platform.iss ... Inno Setup needs to be installed first ....
::compil32 /cc platform.iss
iscc platform.iss



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章