设为首页 收藏本站
查看: 1495|回复: 0

[经验分享] iOS+Jenkins+gogs+webhook 自动化集成方案

[复制链接]

尚未签到

发表于 2018-1-9 08:29:37 | 显示全部楼层 |阅读模式
前言
  每次打包给测试工程进行测试,都要在电脑上编译->导出ipa->上传svn->告知测试人员。每次迭代的时候都进行着重复的工作,身为一个高效率的码农,我寻找一个可以自动化的工具帮我做这件事,就有了文中的方案了。

搭建

安装Jenkins
  Jenkins需要依赖java,需要需要下载JDK,安装完JDK就可以去Jenkins官网下载War包。
  JDK下载传送门
  
Jenkins下载传送门
  下载war放在一个自己喜欢的路径放着,然后进入该目录运行启动命令,可以自定义端口号启动,命令如下
java -jar jenkins.war --httpPort=8888  启动后打开浏览器输入http://localhost:8888 ,首次启动需要重置密码,Jenkins默认的配置目录
cat ~/.jenkins/secrets/initialAdminPassword  复制该密码进入输入框即可登录,然后设置一下账号密码,选择一些插件。如果提示offline的话,就跳过选择插件直接进入首页。
  
为了解决无法获取插件列表问题,可以在系统管理->插件管理->高级->升级站点里面更换成http://updates.jenkins-ci.org/update-center.json这个站点即可获取到插件列表。
  我只是安装了Generic Webhook Trigger插件。在可选插件里面搜索你想要安装的插件进行安装即可。
  这样Jenkins工具就配置完成了。

Gogs的配置
  我是使用Gogs进行代码托管。如果是用svn进行代码管理的话,可以百度一下,有很多相关的教程。
  在git仓库里面设置一下webhook。

  因为我们在Jenkins安装的webhook插件的接收地址是http://192.168.1.91:8888/generic-webhook-trigger/invoke?token=<在Jenkins上填写的令牌>
  选择接收数据格式为json,只触发push时间。

配置Jenkins任务

新建任务

  填入对应代码的项目名称。
  
这里可以选择构建一个自由风格的软件项目去重新配置,也可以选择复制一个已经存在的任务去配置。然后点击确认。

配置任务


  •   通用

      可以勾选丢弃旧的构建。

  •   源码管理

      选择Git,并添加对应的项目的URL,添加对应的git账号。分支名填$ref。为什么要填这个,等一下就会说明。分支名是让Jenkins选用该分支进行构建。
      
    Additional Behaviours附加行为选择Clean before checkout、Check out to specific local branch,分支名填写**。

  •   构建触发器

      Gogs所push的json格式可以在传送门这里查看。部分字段如下。如果不是使用Gogs的话,可以到对应工具的官网寻找。

      其中的ref字段就是该push事件的分支。我们可以根据这个字段去区分需要自动化构建的分支。比如我们的develop分支是不需要进行构建的,master分支是需要构建的。
      令牌填写项目名,用于唯一标识这个job,请记住不能重复。
      
    勾选Generic Webhook Trigger ,添加post content parameters,变量名为该job的一个环境变量,在job的其他位置可以用$***的形式引用,好比如刚刚的$ref。
      
    Expression选择Jsonpath,用jsonpath的语法去匹配对应的字段名。
      
    Optional filter用于区分触发构建的。这里用分支名来区分是否进行构建。我用这个正则^\S*release|beta|alpha$去只监听release、beta、alpha三个分支,这里根据自己的实际情况去修改。

  •   构建
      其实可以安装xcode插件去进行构建的,但是配置xcode插件有点麻烦,我放弃了,选择使用shell脚本,这样可以很大程度自定义。使用xcode插件的可以自行百度。部分脚本如下。
    configuration="Release"  

      
    ipa_version=$(git symbolic-ref --short -q HEAD)
      

      
    bundle_version=""
      
    if [[ $ipa_version = 'alpha' ]]; then
      configuration="Debug"
      bundle_version=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infopl_path)
      
    elif [[ $ipa_version = 'beta' ]]; then
      configuration="Release"
      bundle_version=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infopl_path)
      
    elif [[ $ipa_version = 'release' ]]; then
      configuration="Release"
      bundle_version=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $infopl_path)
      
    else
      exit 0
      
    fi
      

      
    archivePath="${BUILD_PATH}/${ipa_version}/${JOB_NAME}.xcarchive"
      

      
    tempPath="${BUILD_PATH}/${ipa_version}/temp"
      

      
    xcodebuild clean -scheme $JOB_NAME -configuration $configuration
      
    projectPath=$(find $WORKSPACE  -name "*.xcworkspace" -maxdepth 1)
      

      
    if [[ -n $projectPath ]]; then
      xcodebuild archive -workspace ./${JOB_NAME}.xcworkspace/ -scheme ${JOB_NAME} -archivePath ${archivePath} -configuration $configuration
      
    else
      projectPath=$(find $WORKSPACE  -name "*.xcodeproj" -maxdepth 1)
      xcodebuild archive -project $projectPath -scheme ${JOB_NAME} -archivePath ${archivePath} -configuration $configuration
      
    fi
      

      
    xcodebuild -exportArchive -archivePath ${archivePath} -exportPath ${tempPath} -exportOptionsPlist ${exportOptionsPlist}
      xcode8以后使用xcodebuild进行导出ipa的时候需要提供exportOptionsPlist。导出development、ad-hot、AppStore的plist内容是有点不一样的,具体可以手动导出对应的包,里面会有exportOptionsPlist的,参照弄就好了。

  •   构建完成后
      可以上传到ftp或者分发到蒲公英,然后发一封邮件给相应的人员,告知他们。我这些操作是构建脚本里面一块弄了。也可以使用Jenkins的一些插件去帮助你。

最后
  希望本文能帮到一些同学。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-433144-1-1.html 上篇帖子: Jenkins 安装及使用 下篇帖子: Jenkins+ant+Jmeter接口自动化框架搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表