Para isso precisamos
Uma conta válida de desenvolvedor do Google Play
Servidor Linux com Docker pré-instalado, no meu caso é Ubuntu 16.04
SDK Android instalado
Jenkins - neste caso, vamos implantá-lo usando Docker
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.
Faça login no Google Cloud Platform, se o projeto ainda não tiver sido criado, crie-o
Na seção IAM e administração - Contas de serviço, clique em Criar uma conta de serviço
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
Faça login no Gooogle Play Developer Console
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 .
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.