分类 计算机技术 下的文章

Jenkins搭建.NET自动编译测试并发布


2持续部署系统

2.1分析

Web源码发布费时费力,需要先下载源码,进行编译,发布到本地,再将所有文件复制到服务器,但很多文件是不需要更新的。可以对流程进行优化。运行vs,获取最新源码,进行文件编译,发布到本地,按生成时间进行筛选,最终效果是获取指定SVN版本号间的改动文件,例如不同的发布环境下面的代码是根据不同的svn版本进行发布的,可以先查出来某一服务器上发布的svn版本,对旧的的svn版本和最新的svn版本做对比,筛选出有更新的文件,但操作难度太大参考:从SVN导出指定版本号之间修改的文件。可以退而求其次筛选出1个月内的最新文件,再分发给服务器进行更新,能大大减少更新文件的数量。
原理:进行更新文件的筛选,找出最新文件,压缩并上传到服务器。
优化后的流程:开发人员本地提交源码-自动化服务器定期获取源码并编译-筛查出更新包-同步到其他服务器上进行文件替换。

2.2准备工作

下面将使用发布平台,实现自动发布web端代码。
目前发现C:WindowsTemp目录,jenkins会在这里新建一个bat文件,360安全卫士一直会阻止而导致无法生成升级包。先关闭安全卫士。
检查需要发布的项目是基于.NET4.0还是4.6发布的,本教程适合4.0,目前4.6暂未进行测试。

2.2.1安装Jenkins工具

(1)下载Jenkins的windows安装包,进行安装。
(2)最好下载net4.7
(3)下载 Microsoft Build Tools 2013
地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=40760,下载文件为BuildTools_Full.exe
(4)安装7z压缩软件到C:Program Files7-Zip目录。

Jenkins安装完以后设置用户名和密码,进行初始化。
打开http://localhost:8080
EhWVhj.md.jpg
默认管理员是admin,默认密码是那个目录里的文件
先复制密码,粘贴以后继续
EhWMuV.jpg
EhWuj0.jpg
安装推荐的插件,全程需要联外网
EhWAAg.jpg
创建用户

若无法登录,则需要重启服务
用管理员身份启动cmd
进入jenkins安装根目录

cd C:\"Program Files (x86)"\Jenkins

关闭命令:

net stop jenkins

启动命令:

net start jenkins

可以把这个命令写成bat文件,每次开机以后执行一次。
项目目录C:Program Files (x86)Jenkinsworkspace
可以手动把svn的源码拷贝到 C:Program Files (x86)Jenkinsworkspace任务名称 下面
比如任务名称为lyweb那就把所有源码拷贝到C:Program Files (x86)Jenkinsworkspacelyweb文件夹下面
这样就不会再下载一次了,第一次下载都很漫长。
而且使用自动下载的源码构建以后所有的文件都是最新的日期,可以先构建成功一次,再删除C:Program Files (x86)Jenkinsworkspacelyweb文件夹下面的文件,把开发人员本地的文件夹复制进去,再构建一次。

2.2.2创建临时目录

D:uploadly项目发布程序 为编译以后的文件
D:uploadupload2 筛选出一个月内有更新的文件
D:uploadsync 这个里面是需要分发出去的upload.zip的包,此包是一个月内累计更新的文件,复制到服务器上替换就行了。

2.3插件安装

在面板配置里选择系统管理-插件管理 在可选插件里搜索MSBuild插件,并安装
安装完以后设置。

2.3.1配置MSBuild的版本

【系统管理】->【全局工具配置】->【MSBuild】,点击【新增MSBuild】进行版本的添加,如下:
EhW3EF.jpg
其中name输入Version4
路径输入C:WindowsMicrosoft.NETFramework64v4.0.30319MSBuild.exe
注意:如果是4.6的项目,参考:http://www.cnblogs.com/EasonJim/p/6038363.html

2.3.2svn插件

还要在jenkins的配置里改svn的版本号,默认是1.4,我当前使用的是1.8
进入【系统管理】->【系统设置】把svn版本改一下。
EhW9jP.jpg

2.4部署更新任务

2.4.1general设置

http://localhost:8080中新建任务
选择【构建一个自由风格的软件项目】,其余的不要去选择。
EhWe9s.jpg

2.4.2源码设置

在这里需要先添加用户名和密码,保存后,再选择该用户名和密码。
EhWncq.jpg

2.4.3构建触发器

也可以选择钩子,但不能每次有人提交代码就更新,定时更新,进行小版本迭代会更好。
EhWiB8.jpg

2.4.4构建环境

都不选

2.4.5构建

(1)执行清理
新建批处理命令
EhRo11.jpg
EhWm3n.jpg
先删除所有临时文件。代码如下:

del /f /q /s D:\upload\sync\upload.zip
del /f /q /s D:\upload\upload2\*.*
RD  /s /q  D:\upload\upload2\
mkdir D:\upload\upload2
del /f /q /s  D:\upload\ly项目发布程序\*.*
RD  /s /q D:\upload\ly项目发布程序\
mkdir D:\upload\ly项目发布程序

(2)设置编译哪个项目
EhWPnf.jpg
MSBuild Version 选择Version4
EhWFHS.jpg
在 MSBuild Build File里选择./src/LRSMES.WebUI/LRSMES.WebUI.csproj 这里是项目名称,最好选择具体的哪个项目。
Command Line Arguments设置为 /t:Rebuild /p:Configuration=Release /p:TargetFrameworkVersion=v4.0 /p:OutputPath=D:uploadly项目发布程序;Configuration=Release
注意这个/t:Rebuild每条命令与下一条命令之间都有一个空格。
/t:Rebuild 表示每次都重建,不使用增量编译
/p:Configuration=Release 表示编译Release版本,
/p:TargetFrameworkVersion=v4.0表示编译的目标是.NET4.0
/p:OutputPath=D:uploadly项目发布程序;Configuration=Release 表示发布到d盘的某一目录下。
(3)再新建批处理筛选出最新的文件
以下是代码:

@echo off
set y=%date:~0,4%
set m=%date:~5,2%
set d=25
set /a m-=1
if %m%==0 set m=12&set /a y-=1
if "%m%"=="1" (set mm1=01)
if "%m%"=="2" (set mm1=02)
if "%m%"=="3" (set mm1=03)
if "%m%"=="4" (set mm1=04)
if "%m%"=="5" (set mm1=05)
if "%m%"=="6" (set mm1=06)
if "%m%"=="7" (set mm1=07)
if "%m%"=="8" (set mm1=08)
if "%m%"=="9" (set mm1=09)
if "%m%"=="10" (set mm1=10)
if "%m%"=="11" (set mm1=11)
if "%m%"=="12" (set mm1=12)
echo 格式化以后月份为,前面加了0,例如05之类 %mm1%
echo 上个月25日的日期是%y%-%mm1%=%d%
echo 格式化日期mm-dd-yyyy后为%mm1%-%d%-%y%

echo d | xcopy D:\upload\ly项目发布程序\_PublishedWebsites\LRSMES.WebUI\Areas D:\upload\upload2\Areas /s /r /y /d:%mm1%-%d%-%y%
echo d | xcopy D:\upload\ly项目发布程序\_PublishedWebsites\LRSMES.WebUI\bin D:\upload\upload2\bin /s /r /y /d:%mm1%-%d%-%y%
echo d | xcopy D:\upload\ly项目发布程序\_PublishedWebsites\LRSMES.WebUI\Scripts D:\upload\upload2\Scripts /s /r /y /d:%mm1%-%d%-%y%

echo d | xcopy D:\upload\upload2\Areas D:\lyWeb\Areas /s /e /r /y /d
echo d | xcopy D:\upload\upload2\bin D:\lyWeb\bin /s /e /r /y /d
echo d | xcopy D:\upload\upload2\Scripts D:\lyWeb\Scripts /s /e /r /y /d

在这里解释一下为什么要得到上个月的日期,如当前日期是2019年5月25日,上个月的日期是2019年4月25日,若不写一个自动获取日期,则 echo d | xcopy D:uploadly项目发布程序_PublishedWebsitesLRSMES.WebUIbin D:uploadupload2bin /s /r /y /d:%mm1%-%d%-%y%命令执行时,最后面的/d:就只能把时间写死,成为/d:05-25-2019 这样才能避免可能出现的日期问题。至于_PublishedWebsites目录,则是本地发布以后就是在这个目录里,暂时未找到设置方法。echo d 和echo f的问题,由于复制文件时,系统会询问复制的是一个目录还是文件,分别对应d和f。后来发现这样有一个问题,就是若构建失败,有可能清空已下载好的源码,系统会重新下载一遍,导致该筛选方法失效,但一个月以后就正常了。临时的补救措施是手动把以前下载好的再覆盖一次源码。
这样可以自动选择出一个月内的更新文件,若本机也是web服务器,顺便可以直接更新。
(4)最后新建一个批处理进行压缩

echo [INFO] 压缩要上传的文件
echo revision:%SVN_REVISION% > D:\upload\upload2\revision.txt
call C:\"Program Files"\7-Zip\7z.exe a D:\upload\sync\upload.zip D:\upload\upload2\
echo f | xcopy D:\upload\sync\upload.zip D:\lyWeb\Resources\upload.zip /s /e /r /y /d

需要7z压缩软件先安装好。C:"Program Files"目录加引号是因为批处理在识别带空格的目录时必须要这样。
创建一个revision.txt文件,自动写入svn版本号。先用7z压缩软件压缩出upload.zip文件,再复制到能共享的目录里,如web的站点。
压缩一个作为同步到服务器上的包,命名必须固定如upload.zip,把文件也复制一份到web网站,这样其他主机可以访问http://XXXX/Resources/upload.zip地址获得最新的升级包了
(5)构建后通知
可以写一个邮件通知,若不成功则发邮件。
也可以自动发钉钉消息通知,下面是使用钉钉的尝试。
详见[钉钉通知系列]Jenkins发布后自动通知
https://s2.ax1x.com/2019/05/13/E5Qma4.png
正在测试jenkins发送自定义格式和报错信息到钉钉指定人
目标:获取当前任务的svn版本号和构建id

2.5手动执行构建

2.5.1自动生成升级包

EhWlHU.jpg
然后可以在左下角查看控制台的进度,一般10分钟内只能执行一次构建。
EhR20U.jpg

2.6分发

2.6.1客户端软件设置

其他服务器若需要同步最新的文件,需要安装7z软件到C:Program Files7-Zip目录,并下载wget.exe文件到C:WindowsSystem32文件夹
下载wget的方法是 https://zhuanlan.zhihu.com/p/28826000
下载链接为https://eternallybored.org/misc/wget/
至于为什么不用windows自带的命令,主要是wget是linux系统下非常好用的一个命令,使用简单。

2.6.2编写一键更新脚本

在d盘新建uploadtemp文件夹,并创建一个名称为“自动更新web代码.bat”的批处理文件,改扩展名为bat。其中D:pzWeb改为服务器上的web页面位置。
下面是代码:

del /f /q /s D:\upload\upload.zip
RD  /s /q  D:\upload\temp\
mkdir D:\upload\temp\
wget.exe -O D:\upload\upload.zip http://XXXXXX/Resources/upload.zip
call C:\"Program Files"\7-Zip\7z.exe x D:\upload\upload.zip -oD:\upload\temp
echo d | xcopy D:\upload\temp\upload2\Areas D:\pzWeb\Areas /s /e /r /y /d
echo d | xcopy D:\upload\temp\upload2\bin D:\pzWeb\bin /s /e /r /y /d
echo d | xcopy D:\upload\temp\upload2\Scripts D:\pzWeb\Scripts /s /e /r /y /d

echo 执行完毕。此脚本将于60秒后自动关闭!
ping 127.0.0.1 -n 60 >nul

由于7z压缩时默认把上级文件夹名也带上了,导致解压缩后是在D:uploadtempupload2目录。
先清空临时目录下的所有文件,再下载最新的升级包到本地,然后解压缩,把解压以后的文件复制到web站点目录。这里加了一个/d参数,若服务器的文件比较旧,而且最新的升级包里有这个最新的文件,则进行更新,否则不会自动替换。若服务器上的文件被人为修改过,则需要看修改的是哪些文件,先备份出来,提交源码以后再执行一次同步。若服务器长时间未进行过同步,例如超过一个月,则无法自动同步一个月以上的文件,可以先手动完全同步一次,再使用自动同步的命令。
下载到本地以后,若有些目录不需要更新,如Areasmap目录,则把D:uploadtempupload2Areasmap目录删除,删除命令是RD /s /q D:uploadtempupload2Areasmap,这样就不会同步该目录。
但目前还未实现iis自动回收池和重启web服务的命令
鉴于有些web会因为某些原因人工关闭站点,先不搞iis了
这些服务器同步时需要360开白名单,或者手动运行一下bat文件,让360放行
运行无误后在服务器设置一个定时执行任务就行。

2.7定期自动执行

默认每天中午10点自动获取一次源码并编译,12点同步到其他的web服务器,全程不需要人员参与。

2.8手动执行

(1)若需要手动编译,则登录此站点,并点击构建。
EhWlHU.jpg
(2)然后可以在左下角查看控制台的进度,一般10分钟内只能执行一次构建。
EhR20U.jpg
(3)最后手动去其他web服务器上执行自动更新web代码.bat


我的iphone6s越狱记录:一切为了音质


标签(空格分隔): iphone 越狱 cydia 插件


apple_music

前言

主要目的是两个:
1.保留软件环境、各种app停留在专用版本。这样可以用得更久。
2.个性化设置,融合安卓和苹果的优点,这样用得更舒服。

准备工作

  1. 充满电的iphone6s一部,关闭省电模式。
  2. 苹果原装数据线一根,非原装的可能导致无法刷机的问题。
  3. 各种越狱工具及插件deb文件

开始越狱

我的iphone6s的IOS系统版本是10.2.1

1.从官网下载doubleH3lix越狱工具,我用的是RC8,使用大胡子Cydia Impactor签名工具进行安装,安装到手机后桌面会出现一个名为 doubleH3lix 的APP,手机打开“设置 -> 通用 -> 描述文件与设备管理”找到你的ID进入,点击信任;
2.回到桌面运行doubleH3lix 点击 jailbreak,等待越狱完成,桌面出行Cydia代表越狱成功,如果未出现cydia请重启手机重新越狱。
3.本次越狱为不完美越狱,设备重启后越狱将失效,Cydia和已装的越狱应用会闪退,越狱插件将失效;重启后需打开doubleH3lix 应用,一直亮屏,等3-5分钟再需点击 h3lix 应用上的 Kickstart 按钮,等待设备再次越狱完成,不行就多试几次。

插件

cydia更新时可以使用科学上网工具,可以在美区下载potatso lite,这样速度会快一点。

添加软件源:

雷锋源 https://apt.abcydia.com/
酋长源 http://apt-cydia.com
flex3源 http://getdelta.co/
同步推源 http://apt.tongbu.com/
按键精灵源 http://apt-mobileanjian.com/
贴吧源 apt.cydiaba.cn

安装插件

AFC2Fix ios10 //这个是针对于ios用的,安装后用爱思助手可以看到越狱后的目录,但重启机器后需要卸载,再重新安装。
按键精灵 1.3.1 //写脚本,自动化
App Admin 1.0r-61 //可以任意更改已安装app的版本,配合flex3使用。
AppSync //关闭ios app签名检查,安装和谐软件,但重启机器后需要卸载,再重新安装。
BetterShutdown 0.9.2//关机增加重启和注销
CCQuick x 控制中心增强 1.0-4//功能强大的控制中心增强
cocoaTop 进程管理器 2.0.2//类似于windows进程管理的软件
Ext3nder 签名续签 0.9.44//解决7天App签名失效,导致闪退问题
Fiza File Manager 3.5.2-1//配合Ext3nder使用
Flex 3 Beta 3~Beta46//各种定制,去广告、改配置
iAP26 最强内购插件 0.0.2//最强软件内购
iCleaner Pro 系统清理 7.7.0//ios垃圾清理
KuaiDial 1.0.1a2-13//T9拨号,不知道为什么无法实现通话接听震动
liberty 去越狱检测 0.1.16a//去除微信、支付宝越狱检测
NFCWriter 0.1-113k//强大的NFC模拟修改插件,模拟各种门禁卡
屏蔽IOS系统更新 0.0.1//屏蔽系统ios10~11系统更新
Safari Plus 1.5//safari增强
PP助手 10.3.x专版 3.7.7
同步推 3.4.3//第三方的软件安装平台
WIFI密码历史记录 0.4.1//查看wifi密码
极限省电补丁3(MaxPowerSaver3) 1.7
WeChatRedEnvelop 2.0.2-2//稳定,可以加看门狗后台守护,无法锁屏抢, ,github地址https://github.com/buginux/WeChatRedEnvelop
WeChatRedEnvelopesHelper //似乎功能更强,但抢自己的未成功
flex3_p1
flex3_p2
flex3_p3
flex3_p4
flex3_p5
flex3_p6

自动签名设置

使用Fiza File Manager配合Ext3nder续签软件,配置7天后自动签名。耗电情况未测试。续签教程请参考Ext3续签插件使用教程-自动续签越狱工具-免闪退免过期免烦恼https://bbs.feng.com/read-htm-tid-11693296.html

去广告设置

主要是使用app admin对app进行版本控制,下载ios当前系统支持的app,再使用flex3对app进行设置。

1.app admin 使用时若软件可以更新,点击更新后自行选择需要的版本,若当前app版本是最新的,先卸载,再安装,安装时可以选择版本,也可以把正版软件抓包,备份在pc上,再从pc端进行安装。
2.flex3未购买前每天只能下载2个补丁,花4美元购买后就可以无限制使用。
flex3里搜索需要使用的补丁,先下载下来,再使其生效。
需要测试是否生效,可能app版本不对,导致无法生效,需要再次更换app的版本。

目前已实现:
优酷7.2.3、腾讯视频6.0.6、爱奇艺8.10.0去视频广告
虾米音乐6.7.8去广告
微信6.6.6去广告
支付宝去广告改步数
icleaner去广告
12306 3.0.3去广告
wps8.2.0去广告
知乎4.10.1去广告
qq音乐8.1 DTS音效和去启动广告(只有会员才能有更好的音质,不过有音效效果加成,重低音效果更好)
nplayer开启dts x音质
nplayer 3.7.5//enable dolby 可以打开dts x音质,需要在nplayer plus的设置里打开音频的DTS Headphone:X
京东164657禁止升级和启动广告
音悦台 优化去广告 //只需要去启动广告就行

备份时需要把/var/mobile/Library/Application Support/Flex3路径下的patches.plist文件拷出来

音乐app续费及破解

这才是重点,为了听高质量的音乐。

国内的音乐软件

1.这里有酷我音乐破解,可以无限制的下载最高音质。不过界面太乱。
2.qq音乐只能听普通音质的dts音效。
3.网易云音乐无法下载vip专享音乐,视频也无法下载最高画质,可以通过workflow规则下载视频。

Apple Music

可以淘宝“apple music 学生”,使用学生套餐,每月5元,堪称最便宜的正版,需绑定支付宝等支付手段,但尽量不要再改app store的id,重新绑定需要再次淘宝一次。
但国内联网速度不佳,曲库一般,够用,适合听国外音乐和古典音乐。am占用内存过大。用am来管理音乐,维护曲库,操作简单,把所有后台的操作都交给am,只需要关注自己喜欢的歌,维护清单就行。

只用它在线听最新的歌曲,而且是正版的,音质甩国内几条街。而且订阅结束,无法听缓存的歌曲。

想要永久拥有该音乐,需要破除DRM保护。
什么是DRM?
数字版权管理,或DRM,是一类技术,使权利人制定和执行的人使用自己的知识产权条款。最常见的媒体公司使用DRM,以打击盗版其内容限制用户的能力,发挥它,将它复制,下载,烧录,等等。

破除DRM保护的方法:
1.手机开启am或pc端使用itunes,听音乐,把需要下载的音乐添加到资料库,并下载到本地,本地可以看到m4p扩展名的歌曲,这里的歌曲无法拷贝到别处播放。
2.安装tuneskit破解软件,这里是下载地址,安装后打破解补丁,杀毒软件可能会报错。
3.使用tuneskit读取itunes的歌曲,并进行转录,只测试了音频,未测试视频。可以配置转录后参数为m4a格式,2声道、44100HZ、320kbps(其实256以上就行,再高没效果)。
4.把转录后的歌曲用itools导入到iphone的音乐里,作为离线听歌使用。

qq音乐

qqmusic
qqmusic_dts
已用flex3强制打开dts音质,还是有点效果的,至于好到哪里?我觉得就是重低音强了点,环绕效果更好,但对于个别音乐可能适得其反,总之听音乐是一门玄学,自己耳朵听着舒服就行。

音乐的其他获取渠道

我以前写过的文章正版iTunes Plus AAC音乐专辑免费下载的途径里有iTunes分享店 https://www.aacfree.com/tag/id369211611/,可自行搜索,并同步到百度网盘。

使用nas管理音乐的方法

需要使用Neutron Music Player播放nas上的音乐

视频压缩方法

https://www.zybuluo.com/hzl201/note/1127445

结语

iphone越狱后会失去ios的保护,但可以定制更多的功能,其实不需要越狱也可以用的很好。
优化后:
1.各种广告都消灭。
2.音乐和视频都是最好音质和画质的数字格式,开启dts和dolby音效,而且是永久使用。
3.可以使用收费软件(未越狱时安装pp助手,效果也差不多),大部分内购已破除,安装美区专用软件。
4.电话终于支持T9了。
5.使用google服务接管苹果服务,通讯录、日历已经同步到google,不越狱也可同步,google的照片管理真的是比较好用。

忽略耗电的影响,基本达到预期了。

参考

64位越狱工具doubleH3lix发布 支持iOS10-10.3.3
Ext3nder–设备端签名神器使用方法(支持自动签名)
极限省电补丁3(MaxPowerSaver3)