搭建Android持续集成服务器

构建高质量的Android应用程序的挑战是什么?

  1. Android 本身
    Android 设备本身,大量的Android变种对开发兼容的应用程序来说是一个极大的问题. 需要适配包括智能手机,平板,电视盒子(TV)等多种不同分辨率,不同内存大小,是否支持3G, 是否只有WIFI的设备. 这些硬件配置和软件版本的多样性和差异是必须要处理的.
  2. 开发团队中使用不同的开发工具,操作系统版本(这点基本不是个问题,可以统一)
  3. 自动化构建
  4. 自动化测试

术语

  • 宿主系统: Docker服务运行的系统,用于启动和运行容器

Docker - Dockerfile 常见问题

  • 如何解决构建镜像是 debconf: unable to initialize frontend: Dialog 的问题
1
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
  • 如何在构建镜像之前切换Ubuntu下载源
1
# 备份
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换
RUN sed -i "s/archive.ubuntu.com/debian.ustc.edu.cn/g" /etc/apt/sources.list

Docker - 容器之间的通信

通过网络端口通信

默认情况容器和主机之间的网络通信是封闭的, 如果要让容器能够被外部网络访问, 需要在启动容器的时候指定要开放的端口, 这样我们就能通过主机的网络访问容器内提供的的服务了.我们在容器中运行了一个Web服务器,用户需要访问这个容器内的资源, 这里为了方便,直接使用官方手册里的示例:

1
root@localhost:/# docker run -d -p 5000:5000 training/webapp python app.py

命令行分解:

  • -p 标志指定了端口映射,形式为: <主机端口>:<容器端口>, 注意不要弄反了.
  • -d 标志表示让容器在后台运行
  • training/webapp 表示镜像名称
  • python app.py 表示要在容器内运行的SHELL命令

Docker - 给容器瘦身

通过导出然后再导入,可以减小容器的磁盘占用大小, 首先需要通过一个镜像在后台启动一个容器

给容器瘦身

1
# 非交互式方式,启动后立即停止,我们通过这种方式获取一个容器的ID
root@localhost:~# ID=$(docker run -d developerworks/base /bin/bash)
# 查看容器ID
root@localhost:~# echo $ID
dbbd685a6391418a24493f8a07df62b3be6e813fc217841a80b739c96a12e426
root@localhost:~# docker export dbbd685a6391418a24493f8a07df62b3be6e813fc217841a80b739c96a12e426 | docker import - base

备份容器

1
root@localhost:~# ID=$(docker run -d developerworks/base /bin/bash)
root@localhost:~# echo $ID
dbbd685a6391418a24493f8a07df62b3be6e813fc217841a80b739c96a12e426
# 导出并压缩
root@localhost:~# docker export dbbd685a6391418a24493f8a07df62b3be6e813fc217841a80b739c96a12e426 | gzip -c > developerworks-base.tgz

参考资料

  1. http://www.hnwatcher.com/r/650964/Slimming-down-Docker-containers-Intercity-Blog

./configure –enable-mysqlnd –with-pdo-mysql –prefix=/root/runtimes/php –enable-fpm –with-gettext –with-mcrypt –with-mysql

Docker - 管理镜像

本文将会说明通过Docker命令行如何显示本机当前的镜像, 如何拉取镜像, 如何搜索Docker hub上的镜像, 以及如何创建自定义镜像并提交到Docker hub

Hero,把XML模式转换为JSON模式

Hero is a hexo-based command line tool that use xsd2json to generate json schema from xml schema files.

Prerequisite

You need to install swi-prolog

Workflow

  1. you need to create a empty directory, and run the following command to initialize it in the created directory.

    1
    $ mkdir hero-test && cd hero-test
    $ hero init
    [info] Copying data
    [info] You are almost done! Don't forget to run `npm install` before you start!
  2. install dependency packages

    1
    $ npm install
    npm http GET https://registry.npmjs.org/interpreted
    npm http GET https://registry.npmjs.org/nomnom
    npm http GET https://registry.npmjs.org/async
    ....
  3. place your xsd files to xsd directory, and run hero schema to generate json schema files in json directory.

    1
    $ hero schema
    [info] Generating json schema ...
    [info] Json schema models generated.

Git 常用别名

  • 切换分支
1
git config --global alias.co 'checkout'
  • 显示分支
1
git config --global alias.br 'branche'
  • 日志格式化
1
git config --global alias.logp 'log --pretty=format:"%h - %an, %ar : %s"'
git config --global alias.logpg 'log --pretty=format:"%h - %an, %ar : %s" --graph'
git config --global alias.log1 'log --pretty=oneline'
git config --global alias.log1g 'log --pretty=oneline --graph'

使用方法分别为:

1
git logp    # 自定义日期
git logpg   # 自定义日期,带Graph
git log1    # 一行
git log1g   # 一行,带Graph
  • 查看远程分支
1
git config --global alias.rv 'remote -v'
  • 查看全局配置
1
git config --global alias.cl 'config -l'

Gerrit 工作流

安装commit-msg钩子

执行

1
curl -Lo .git/hooks/commit-msg http://localhost:8080/tools/hooks/commit-msg
chmod u+x .git/hooks/commit-msg

1
scp -p -P 29418 hezhiqiang@localhost:hooks/commit-msg .git/hooks/
chmod u+x .git/hooks/commit-msg

Git init 命令参数

初始化一个git仓库使用git init命令, 其中有几个参数值得注意

  • --shared[=(false|true|umask|group|all|world|everybody|0xxx)]
    设置仓库可被什么范围的用户访问

  • --template=<template dir>
    仓库模板目录, 此目录下的文件在初始化一个新git仓库是会全部复制到新创建的仓库下, 默认模板位置在/usr/share/git-core/templates,可基于此进行定制

  • --separate-git-dir=<git dir>
    .git元数据目录分离出去

关于git init的详细文档,可通过命令git help init查看

安装Gerrit

Gerrit 版本: 2.9
JDK 版本: 1.7.0_45

很多东西都曾经使用过,这是其中之一,今日又需要安装,把以前没有遇到的问题记录一下

注意

创建数据库之前, 设置数据库默认编码:

1
[client]
default-character-set = utf8
[mysqld]
character_set_server = utf8
default-collation= utf8_general_ci

Gerrit 手册创建配置数据库的SQL语句如下:

体验 git-flow

git-flow 是个什么?

  • git-flow 是一个管理git代码仓库的生产力工具
  • git-flow 是一种git代码管理的最佳实践
  • git-flow 是一种能够让你傻笑一整天的玩具