文档章节

Android项目持续集成实践之Gitlab CI

snowdream
 snowdream
发布于 2016/07/26 17:02
字数 794
阅读 112
收藏 0

作者:snowdream Email:yanghui1986527#gmail.com QQ 群: 529327615
原文地址:https://snowdream.github.io/blog/2016/07/02/android-ci-gitlab/

简介

持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

入门

下面我们来简单介绍,如果通过Gitlab CI来对Android项目持续集成。

一言不合,先甩给你一个项目链接: https://gitlab.com/snowdream/Citest

项目很简单,就是一个默认创建的Android项目,然后上传至Gitlab。

如果给项目添加持续集成功能呢?
按照文档的说法,你需要给项目添加一个名称为.gitlab-ci.yml的配置文件。

.gitlab-ci.yml文件怎么写??此处省略108个字。 通读下面两篇文章,大概就清楚了。 http://doc.gitlab.com/ce/ci/quick_start/README.html http://doc.gitlab.com/ce/ci/yaml/README.html

当然,也许你读完了,还是感觉蒙了。那你还需要参考下别人怎么实践的。

  1. http://doc.gitlab.com/ce/ci/quick_start/README.html
  2. http://doc.gitlab.com/ce/ci/yaml/README.html
  3. http://www.greysonparrelli.com/setting-up-android-builds-in-gitlab-ci/
  4. https://github.com/asura-app/android/blob/master/.gitlab-ci.yml
  5. https://github.com/lfuelling/android-sdk-docker
  6. https://hub.docker.com/r/jangrewe/gitlab-ci-android/
  7. http://blog.goddchen.de/2016/04/configuration-for-gitlab-ci-android-projects/
  8. http://stackoverflow.com/questions/35916233/gitlab-com-ci-shared-runner-for-android-projects

实践

** 下面是重点:**
基本流程是:

  1. Gitlab Ci通过Docker来拉取包括openjdk-8-jdk的容器
  2. 下载Android SDK
  3. 通过Gradle Wrapper运行编译工程

** 下面是主菜: **
适用于Android项目的 .gitlab-ci.yml 文件 当然,在实际过程中,你可以需要做一些调整,比如android sdk 中的版本号等。

image: java:openjdk-8-jdk
 
before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
  - wget --quiet --output-document=android-sdk.tgz https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
  - tar --extract --gzip --file=android-sdk.tgz
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter android-23
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter platform-tools
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter build-tools-23.0.3
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services
  - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository
  - export ANDROID_HOME=$PWD/android-sdk-linux
  - chmod u+x ./gradlew
 
build:
  script:
    - ./gradlew assembleRelease
  artifacts:
    paths:
    - app/build/outputs/

好了。将.gitlab-ci.yml 添加到你的Android项目中,然后上传至Gitlab系列的Git服务器,就开始持续集成了。

详细的构建过程日志太长,我就不贴了。链接如下: https://gitlab.com/snowdream/Citest/builds/2140420

总结

与Travis Ci相比,Gitlab CI更灵活,可定制性高,但也意味着用起来并不是那么容易。 Travis Ci 更倾向于提供一个开箱即用的 CI服务。 而 Gitlab CI 更倾向于提供一个定制化的CI服务,比如支持Docker。 以上只是对于通过Gitlab CI对Android项目进行持续集成的简单实践。 如果感兴趣,大家可以思考下下面的问题:

  1. 怎么通过Gitlab CI进行持续发布?
  2. 怎么在Gitlab CI 加密字符串和文件,比如keystore文件?
  3. 怎么在Gitlab CI中进行交互性操作,比如输入密码?
  4. 怎么在过Gitlab CI中使用缓存?

© 著作权归作者所有

共有 人打赏支持
snowdream

snowdream

粉丝 20
博文 12
码字总数 6591
作品 15
海淀
程序员
GitLab 11.2 发布,可批量导入 Android 操作系统代码

GitLab 11.2 发布了,此次更新为 Web IDE 提供了增强功能、支持清单文件以导入 Android 项目,并启用自定义项目模板。 通过在浏览器中提供具有提交暂存功能的高级代码编辑器,Web IDE 可以更...

h4cd
08/23
0
0
I-team 博客的 gitlab-runner 持续集成实践

做为一个略微看过nodejs语法,但又不懂nodejs的攻城狮,搭建hexo环境很是麻烦,要考虑到FQ、版本兼容等问题。于是乎,博主每换一个电脑,为了能继续发博客,都需要在新电脑上花一天时间重新搞...

haifeiWu
07/24
0
0
前端的gitlab的ci初尝试

title: 前端的gitlab的ci尝试 date: 2018-05-22 11:56:22 tags: gitlab ci 本文记录一个前端部署Gitlab的CI。不是在自己的服务器上面搭建的Gitlab。使用的是Gitlab.com的Gitlab的CI,在腾讯云...

小落
05/22
0
0
gitlab之gitlab-ci自动部署

简介 gitlab-ci全称是gitlab continuous integration的意思,也就是持续集成。中心思想是当每一次push到gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列...

浮躁的码农
2017/11/07
0
0
Jenkins Gitlab持续集成打包平台搭建

相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点...

nineep
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部