Automatisieren der App-Veröffentlichung in Google Play mithilfe von Jenkins

Dafür brauchen wir





  1. Ein gültiges Google Play Developer-Konto





  2. Linux-Server mit vorinstalliertem Docker, in meinem Fall Ubuntu 16.04





  3. Installiertes Android SDK





  4. Jenkins - in diesem Fall stellen wir es mit Docker bereit





  5. Gitea - Ein praktischer Dienst für unser eigenes Git-Repository (es ist nicht erforderlich, GItHub ebenfalls zu verwenden). Wir werden ihn auch auf der Basis eines Docker-Containers erhöhen





Google Play-Konto einrichten

Nehmen wir an, Sie sind bereits Entwickler und haben Ihre Anwendungen im manuellen Modus veröffentlicht. Dies bedeutet, dass Sie die Hauptpunkte des Prozesses kennen und nicht geäußert werden sollten. Wir werden nur auf das eingehen, was wir für die automatische Bereitstellung benötigen.





  1. Melden Sie sich bei Google Cloud Platform an. Wenn das Projekt noch nicht erstellt wurde, erstellen Sie es





  2. Klicken Sie im Abschnitt IAM und Verwaltung - Dienstkonten auf Dienstkonto erstellen





  3. Nachdem Sie die entsprechenden Felder ausgefüllt haben, wird es erstellt und in der Liste angezeigt. Klicken Sie auf die drei Punkte rechts und wählen Sie Schlüssel erstellen, JSON auswählen, speichern. Wir benötigen es, um Jenkins zu konfigurieren





  4. Melden Sie sich bei der Gooogle Play Developer Console an





  5. email , ( )





  6. , .





Android SDK

# Install latest JDK
sudo apt install default-jdk

sudo apt install android-sdk

      
      



Android SDK PATH,  ~/.bashrc



 





# Export the Android SDK path 
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools

# Fixes sdkmanager error with java versions higher than java 8
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
      
      







source ~/.bashrc
      
      







sdkmanager --list
      
      







sdkmanager "platform-tools" "platforms;android-28"
      
      



Android SDK , ,





Gitea

git GitHub , . ( gitea Telegram Bot`a )





https://docs.gitea.io/en-us/install-with-docker/





2





1) Gitea , Docker HUB





version: '2'
services:
  web:
    image: gitea/gitea:1.12.4
    volumes:
      - ./data:/data
    ports:
      - "3000:3000"
      - "22:22"
    depends_on:
      - db
    restart: always
  db:
    image: mariadb:10
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=changeme
      - MYSQL_DATABASE=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=changeme
    volumes:
      - ./db/:/var/lib/mysql
      
      



2) docker-compose you_filename





3) Gitea URL http://you_IP:3000/





4) , , PUSH , ( , volume jenkins gradle , )





apk , keystore gradle ,





// Load keystore
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

// GenerateNameVersion
def getVersionNameTimestamp() {
    return new Date().format('yy.MM.ddHHmm')
}

// GenerateVersionCode
def getVersionCodeTimestamp() {
    def date = new Date()
    def formattedDate = date.format('yyMMddHHmm')
    def code = formattedDate.toInteger()
    println sprintf("VersionCode: %d", code)
    return code
}

......

android {
    signingConfigs {
        config {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
......
    defaultConfig {
        versionCode getVersionCodeTimestamp()
        versionName "${getVersionNameTimestamp()}"
      
      



keystore.properties





storePassword=you_password_keystore
keyPassword=you_password_key
keyAlias=you_key_name
storeFile=path_to_keystore_file
      
      



  • keystore.properties keystore , GitHub, OpenSource , .





  • Google Play , Gradle , , , - deploy (PUSH)





Jenkins

Docker , , ,





docker run -it -d -v jenkins_home:/var/jenkins_home -v /usr/lib/android-sdk:/usr/lib/android-sdk -p 8080:8080 -p 50000:50000 --env JENKINS_OPTS="--prefix=/jenkins" --restart always leganas/ls_repository:jenkins
      
      



volumes Android SDK





http://you_IP:8080/jenkins/





Jenkins ,





1) , System Configuration - , Environment variables ( )









2) - Git Gradle ( )





3) - , , API Token , , .





4) Git, Git client, Google OAuth Credentials plugin, Google Play Android Publisher





5) - Manage Credentials Configure credentials -Store - Jenkins - Global credentials (unrestricted)- 2 |





  • Git





    .. Gitea login/password , GitHub





  • Google Play Market





    JSON





6) Jenkins





  • - Git , Repository URL Credentials ( )





  • - Trigger builds remotely (e.g., from scripts), ( ) GIt huck





  • Invoke Gradle script , -





Release traack , , " "





7) Web Jenkins - Git /master , , Google Play.





Google Play , deploy Git PUSH /master





1) Gitea - - Git , post-receive ,





#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" = "$branch" ]; then
       curl --user you_user_name:you_user_token http://you_url_jenkins/job/you_project/build?token=you_tocken_build
    fi
done
      
      



  • you_user_name - jenkins





  • you_user_token -





  • you_url_jenkins Jenkins :





Jenkins PUSH master .





PS. Wenn Sie zum Speichern Ihres Codes ein anderes Git-System verwenden, können Sie denselben Code manuell in .git \ hooks \ post-update ablegen





Fazit

Im Falle eines positiven Feedbacks aus dem Artikel werde ich Ihnen im nächsten Teil erklären, wie Sie einen Telegramm-Bot schreiben, um Ihre Tester über die Verfügbarkeit eines Anwendungsupdates bei Google Play zu informieren.





Ich hoffe, diese Informationen waren nützlich und erleichtern Ihnen das Einrichten der automatischen Veröffentlichung.








All Articles