• 所有项目用Jenkins进行持续构建


    最近在持续地完善Ant脚本,让构建更简单智能化。

    现在客户化的步骤有:
    1. 替代标准Android SDK的jar
    2. 在构建前去SVN获取最新提交的SVN号,然后修改AndroidManifest.xml的versionName,让它包含SVN号、构建时间信息。方便查询。
    3. 构建完之后,再把对AndroidManifest文件的修改revert回来。
    4. 调用系统签名文件进行系统签名

    这里需要用到的软件有:SlikSvn、xmltask。
    感觉比较有成就感的是第二步。使得本地电脑只需要提供基本的版本号,如1.2.4,然后把这个修改提交到SVN,然后经过Ant的构建,apk的版本自动改成包含SVN、构建日期等信息,但构建完之后,本地文件又没有任何改动。

    几个关键步骤:

    获取SVN号:(如果本地有修改的文件的话,获取的SVN号后面会MP字样,在Jenkins因为都是最新代码,就不会有此问题)

    <target name="-get-svnversion">
            <exec outputproperty="build.svnversion" executable="${svnversion.home}/svnversion">
                <arg line="-c" />
                <redirector>
                     <outputfilterchain>
                         <linecontainsregexp>
                             <regexp pattern="^*:"/>
                         </linecontainsregexp>
                         <tokenfilter>
                             <replaceregex pattern="[0-9]+\:\s*" flags="s" replace=""/>
                         </tokenfilter>
                     </outputfilterchain>
                 </redirector>
            </exec>
            <echo> Current version is: ${build.svnversion}</echo>
        </target>
    

      提取AndroidManifest文件里面的版本号:

        <target name="-extract-version">
            <xmltask source="${android.manifest}"> 
                <copy path="manifest/@android:versionName" property="current.version"/>
            </xmltask> 
            <echo>${current.version}</echo>
        </target>

    修改AndroidManifest里面的版本名称:

    <target name="-update-version" depends="-get-svnversion,-extract-version">
            <property name="matchChannel.start" value='android:versionName=\"' />
            <property name="matchChannel.end" value='\"' /> 
            
            <tstamp>
              <format property="TODAY_UK" pattern="yyyyMMdd-HHmm" locale="en,UK"/>
            </tstamp>
            <echo>the current date is ${TODAY_UK}</echo>
            
            <replaceregexp file="AndroidManifest.xml" 
                match='${matchChannel.start}[^"]*${matchChannel.end}' 
                replace="${matchChannel.start}${ant.project.name}-${current.version}-${TODAY_UK}-${build.svnversion}${matchChannel.end}" />
            
        </target>

    在使用xmltask之前,需要先下载该jar文件,然后把它放在某个位置。我这里就放在${ant.home}/lib/目录下。然后在xml前面写上:

    <taskdef name="xmltask" 
                classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="${ant.home}/lib/xmltask.jar"/>

    值得注意的是:在调用SVN获取版本号的时候,可能会说SVN版本太低,需要升级。我的脚本里面没有调用svn upgrade的命令(或许后续应该考虑加进去),手动在命令行输入刚才的命令。

    这样基本的构建脚本就完成了。每次要拿软件的时候,就直接在Jenkins上拿了。

  • 相关阅读:
    索引
    运算符优先级
    身份运算符
    成员运算符
    位运算符
    利用java编写物品的品牌、尺寸、价格、库存(新手)
    今天聊一聊nuxt.js(上)
    初入前端,面对一个项目应注意哪些?
    小型 Web 页项目打包优化方案
    跨域的那些事儿
  • 原文地址:https://www.cnblogs.com/vinson1816/p/3137784.html
Copyright © 2020-2023  润新知