Automatizando a publicação de aplicativos no Google Play usando Jenkins

Para isso precisamos





  1. Uma conta válida de desenvolvedor do Google Play





  2. Servidor Linux com Docker pré-instalado, no meu caso é Ubuntu 16.04





  3. SDK Android instalado





  4. Jenkins - neste caso, vamos implantá-lo usando Docker





  5. Gitea - Um serviço conveniente para nosso próprio repositório Git (não é necessário usar o GItHub também), também o criaremos com base em um contêiner Docker





Configurando uma conta do Google Play

Vamos supor que você seja um desenvolvedor existente e tenha publicado seus aplicativos no modo manual, o que sugere que você conhece os pontos principais do processo e não deve ser falado, apenas abordaremos o que precisamos para implantação automática.





  1. Faça login no Google Cloud Platform, se o projeto ainda não tiver sido criado, crie-o





  2. Na seção IAM e administração - Contas de serviço, clique em Criar uma conta de serviço





  3. Depois de preencher os campos apropriados, ela será criada e aparecerá na lista, clique nos três pontos à direita e selecione criar uma chave, selecione JSON, salve, vamos precisar dela para configurar o Jenkins





  4. Faça login no Gooogle Play Developer Console





  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. Se você usar outro sistema Git para armazenar seu código, poderá colocar o mesmo código manualmente em .git \ hooks \ post-update





Conclusão

No caso de um feedback positivo do artigo, na próxima parte contarei como escrever um bot do Telegram para notificar seus testadores sobre a disponibilidade de uma atualização de aplicativo no Google Play.





Espero que esta informação tenha sido útil e, de alguma forma, facilite sua vida para configurar a publicação automática.








All Articles