#Android# Docker 与自动化

1.6mkdir -p /hi/ci/android/jenkins-datadocker run -d \ -p 8081:8081 \ --name nexus \ sonatype/nexus3docker run -d \ -u root \ -v $(which docker):/usr/bin/docker \ -v /hi/ci/android/jenkins-data/:/var/jenkins_home/workspace/ \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/lib64/libsystemd-journal.so.0:/usr/lib/x86_64-linux-gnu/libsystemd-journal.so.0 \ -v /usr/lib64/libsystemd-id128.so.0:/usr/lib/x86_64-linux-gnu/libsystemd-id128.so.0 \ -v /usr/lib64/libdevmapper.so.1.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.1.02 \ -v /usr/lib64/libgcrypt.so.11:/usr/lib/x86_64-linux-gnu/libgcrypt.so.11 \ -v /usr/lib64/libdw.so.1:/usr/lib/x86_64-linux-gnu/libdw.so.1 \ -p 8082:8080 \ --name jenkins \ jenkins

在 Jenkins 下 Android 工程我也打算使用 Docker 来构建,所以要实现 Docker in docker 的功能,于是上面的脚本在开启 Jenkins 容器时必须做些挂载设置。而 Jenkins 中构建 Android 工程的命令可以写成这样:

docker run --rm -v /hi/ci/android/jenkins-data/:/workspace -w /workspace/${JOB_NAME} daocloud.io/nekocode/docker-android:1.6 gradle clean app:assembleRelease

如果签名使用的 Keystore 密码配置放在 Properties 文件中,而且加入了 .gitignore 列表的话(这是个好习惯),可以使用类似下面的命令在构建前自动在工作目录生成需要的 Properties 文件:

echo "KEY_ALIAS=xxx\nKEYSTORE_PASSWORD=xxx\nKEY_PASSWORD=xxx" > /var/jenkins_home/workspace/${JOB_NAME}