Build Android với Jenkins
White

Minh Hoang TO viết ngày 14/07/2016

Bài viết này trình bày cách thiết lập cơ chế build CI thông qua Jenkins cho các Android project (libraries hoặc applications) được quản lý bằng Gradle.

Để thiết lập hệ thống build như vậy ta cần server-build Linux đã cài sẵn Jenkins và các thao tác chính sau:

  • Cài đặt tools (Gradle, Android SDK, Nexus,...)
  • Cấu hình chữ ký
  • Tạo build item trên giao diện của Jenkins

Cài đặt Gradle

Tải Gradle về và cài đặt stand-alone, sau đó cấu hình trong ~/.bashrc sao cho command gradle visible trên terminal.
alt text

Cài đặt Android SDK

Việc cài đặt Android SDK trên server chạy Jenkins có khác biệt đôi chút so với cài đặt trên máy tính cá nhân là sẽ không có giao diện quản lý việc cài đặt, mọi thứ cần làm thông qua command line.

Trước hết cần cài đặt SDK Manager trên server-build và dùng command list sdk để thu được danh sách các packages chưa được cài đặt (hoặc đang có bản update mới)

cd ${ANDROID_SDK_HOME}/tools
./android list sdk

alt text

Tiếp theo dùng command update sdk --filter để cài đặt/cập nhật các package cần thiết. Ví dụ để cập nhật Android Support Library (có index là 6) ta có thể dùng command

./android update sdk --no-ui --filter 6

Cài đặt Maven Repository

Trong trường hợp hệ thống build bao gồm cả các built-in Android libraries (.jar/.aar) ta sẽ cần setup Maven repository để quản lý các build artifact này. Giải pháp đơn giản nhất là dựng Maven repo với Nexus

Cấu hình signature trong Gradle

Ta cần thao tác trên Gradle script để đảm bảo:

  • Developer có thể build release ở local
  • Khi build trên CI tool sẽ dùng chữ ký của sếp
  • chữ ký của sếp không đi kèm với code source

Cách mà người viết bài này thường dùng là tạo file signing.gradle có nội dung như dưới đây và nằm trong cùng thư mục với file build.gradle của project

android {
    signingConfigs {
        release {
            storeFile file(project.getProperty("rks"))
            storePassword project.getProperty("rksp")
            keyAlias project.getProperty("rka")
            keyPassword  project.getProperty("rkp")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }

}

Tiếp theo, thêm đoạn Gradle script sau vào file build.gradle để đảm bảo chỉ khi thêm command-line-property rks vào lệnh build Gradle thì hệ thống build mới dùng custom key.

if(project.hasProperty("rks")){
    apply from: "signing.gradle"
}

Tạo build item trên Jenkins

Clone project ra một folder trên build server

git clone ${PROJECT_GIT_LINK} ${BUILD_FOLDER}

Tạo build item thông qua giao diện Jenkins và cấu hình Execute Shell như sau:

cd ${BUILD_FOLDER}

git fetch
git reset --hard origin/master

gradle assembleRelease -Prks=${PATH_TO_KEY_STORE}  -Prksp=${KEY_STORE_PASS} -Prka=${KEY_ALIAS} -Prkp=${KEY_PASS}

Kết quả

alt text

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Minh Hoang TO

4 bài viết.
5 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
10 0
Bài viết này trình bày một giải pháp buildfromscratch cho bài toán khá phổ biến sau Tôi có một ứng dụng A, tôi đang liên kết với các đối tác {C_1,...
Minh Hoang TO viết hơn 1 năm trước
10 0
White
6 0
Trước hết xin nhắc lại mục đích của bài viết này là đưa ra giải pháp buildfromscratch cho bài toán sau: Tôi có một ứng dụng A, tôi đang liên kết v...
Minh Hoang TO viết hơn 1 năm trước
6 0
White
1 0
Bài viết này trình bày cách xử lý khá đơn giản để đăng nhập vào tài khoản quản trị của TeamCity khi bạn vô tình quên password. Thay vì tìm hiểu cơ...
Minh Hoang TO viết hơn 1 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
5 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!