Automatiser la publication d'applications sur Google Play à l'aide de Jenkins

Pour cela, nous avons besoin





  1. Un compte de développeur Google Play valide





  2. Serveur Linux avec Docker préinstallé, dans mon cas, c'est Ubuntu 16.04





  3. SDK Android installé





  4. Jenkins - dans ce cas, nous allons le déployer à l'aide de Docker





  5. Gitea - Un service pratique pour notre propre référentiel Git (il n'est pas nécessaire d'utiliser GItHub également), nous le monterons également sur la base d'un conteneur Docker





Configurer un compte Google Play

Supposons que vous soyez un développeur existant et que vous ayez publié vos applications en mode manuel, ce qui suggère que vous connaissez les principaux points du processus et que vous ne devez pas être exprimé, nous ne parlerons que de ce dont nous avons besoin pour le déploiement automatique.





  1. Connectez-vous à Google Cloud Platform, si le projet n'a pas encore été créé, créez-le





  2. Dans la section IAM et administration - Comptes de service, cliquez sur Créer un compte de service





  3. Après avoir rempli les champs appropriés, il sera créé et apparaîtra dans la liste, cliquez sur les trois points à droite et sélectionnez créer une clé, sélectionnez JSON, enregistrez-le, nous en aurons besoin pour configurer Jenkins





  4. Connectez-vous à la console développeur de Gooogle Play





  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. Si vous utilisez un autre système Git pour stocker votre code, vous pouvez placer le même code à la main dans .git \ hooks \ post-update





Conclusion

En cas de retour positif de l'article, dans la partie suivante, je vous dirai comment écrire un robot Telegram pour informer vos testeurs de la disponibilité d'une mise à jour d'application sur Google Play.





J'espère que ces informations vous ont été utiles et vous faciliteront en quelque sorte la vie pour configurer la publication automatique.








All Articles