본문 바로가기

CI/CD/Jenkins

[ Jenkins ] ANDROID APK 자동배포

Jenkins 관리 → 시스템 설정
Global properties → Enviroment variables → [ SDK 환경변수 ] 설정
Jenkins 관리 → Global Tool Configuration
JDK 설정
GIT 설정
Gradle 설정
Jenkins 관리 → Manage Users
관리자(admin) 클릭
Credentials → User → Global credentials (unrestricted)
Add Credentials → Username with password → [ 깃 인증 아이디/토큰 ] 입력
새로운 Item
[ 프로젝트 명 입력 ] → Freestyle project → OK
JDK 선택
소스 코드 저장소 선택
Invoke Gradle script 선택
Gradle Version 선택 → [ clean assembleRelease ] 입력
Archive the artifacts
[ build/*.apk ] 입력

※ 안드로이드 프로젝트 [ gradle.build ] 파일 설정

plugins {
    id 'com.android.application'
    id 'com.google.gms.google-services'
}

String APK_NAME = "androidProject"

static def getDate()
{
    def date = new Date()
    def formattedDate = date.format('yyyyMMdd_HHmmssS')
    return formattedDate
}

android {
    compileSdk 33

    defaultConfig {
        applicationId "com.android.project"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"
    }

    signingConfigs
    {
        release
        {
            storeFile file("/app/cert/android/android.jks")
            storePassword "P@ssw0rd!"
            keyAlias "key0"
            keyPassword "P@ssw0rd!"
        }
    }

    applicationVariants.all { variant ->

        variant.outputs.all { output ->

            def newName = APK_NAME

            newName += "-" + defaultConfig.versionName

            if (variant.buildType.name == "SNAPSHOT")
            {
                newName += "-" + getDate()
            }

            newName += "-" + variant.buildType.name

            outputFileName = new File("./../../../../../build/", newName + ".apk")
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        SNAPSHOT {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_15
        targetCompatibility JavaVersion.VERSION_15
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.0'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}