Para esto necesitamos
Una cuenta de desarrollador de Google Play válida
Servidor Linux con Docker preinstalado, en mi caso es Ubuntu 16.04
SDK de Android instalado
Jenkins: en este caso, lo implementaremos usando Docker
Gitea: un servicio conveniente para nuestro propio repositorio de Git (no es necesario usar GItHub también), también lo generaremos sobre la base de un contenedor Docker
Configuración de la cuenta de Google Play
Supongamos que usted es un desarrollador existente y ha publicado sus aplicaciones en modo manual, lo que sugiere que conoce los puntos principales del proceso y no debe ser expresado, solo tocaremos lo que necesitamos para la implementación automática.
Inicie sesión en Google Cloud Platform, si el proyecto aún no se ha creado, créelo
En la sección IAM y administración - Cuentas de servicio, haga clic en Crear una cuenta de servicio.
Luego de completar los campos correspondientes, se creará y aparecerá en la lista, haga clic en los tres puntos de la derecha y seleccione crear una clave, seleccione JSON, guárdelo, lo necesitaremos para configurar Jenkins
Inicie sesión en la Consola para desarrolladores de Gooogle Play.
email , ( )
, .
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 .
PD. Si usa otro sistema Git para almacenar su código, puede colocar el mismo código a mano en .git \ hooks \ post-update
Conclusión
En caso de recibir un comentario positivo del artículo, en la siguiente parte le diré cómo escribir un bot de Telegram para notificar a sus evaluadores sobre la disponibilidad de una actualización de la aplicación en Google Play.
Espero que esta información haya sido útil y que de alguna manera le facilite la vida al configurar la publicación automática.