Как получить сертификат подписи андроида от плагина jenkins - PullRequest
1 голос
/ 16 мая 2019

У меня есть проект jenkins для приложения для Android. Apk подписывает с плагином jenkins (см. Рисунок ниже):

Настройки сертификата Дженкинса

КАК мне вернуть файл сертификата .p12 от jenkins?

1 Ответ

1 голос
/ 24 мая 2019

Сначала определите правильный домашний каталог Jenkins. Перейдите в «Управление Jenkins», а затем «Информация о системе». Найдите значение JENKINS_HOME.

Далее войдите в Jenkins через SSH и перейдите в этот каталог. Файл с именем credentials.xml будет содержать ваши секреты.

Найдите идентификатор вашего сертификата (например, в URL):

Credentials ID in URL

Наконец, запустите консоль сценария вашего экземпляра Jenkins (доступно по URL-адресу /script или через «Управление Jenkins» -> «Консоль сценария») и выполните этот сценарий:

import com.cloudbees.plugins.credentials.*
import hudson.security.*
import java.security.*
import javax.xml.bind.DatatypeConverter

def creds =  CredentialsMatchers
                .firstOrNull(
                        CredentialsProvider
                            .lookupCredentials(
                                Credentials.class,
                                Jenkins.getActiveInstance(),
                                ACL.SYSTEM,
                                Collections.emptyList()
                            ),
                        CredentialsMatchers.withId("9X9X99XX-XX9X-9X99-9X9X-9X9X9999XXX9")
                )

// This will print a decrypted password
def password = creds.password
println password

// This will print all the available aliases
creds.keyStore.aliases().each { println it }

// Imagine, the alias you need is myapp.
// Get JVM representation of you certificate and key
def cert = creds.keyStore.getEntry("myapp", new KeyStore.PasswordProtection(password.toCharArray())).certificate
def privKey = creds.keyStore.getEntry("myapp", new KeyStore.PasswordProtection(password.toCharArray())).privateKey

// Format certificate and key
certpem = "-----BEGIN CERTIFICATE-----\n" +
        DatatypeConverter.printBase64Binary(cert.encoded) +
        "\n-----END CERTIFICATE-----\n";
keypem  = "-----BEGIN RSA PRIVATE KEY-----\n" +
        DatatypeConverter.printBase64Binary(privKey.encoded) +
        "\n-----END RSA PRIVATE KEY-----\n";

// Print them
println certpem
println keypem

Кстати, вы можете найти свои закодированные учетные данные по идентификатору в credentials.xml в доме Дженинса. Это должно выглядеть так:

<com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl>
    <scope>GLOBAL</scope>
    <id>9X9X99XX-XX9X-9X99-9X9X-9X9X9999XXX9</id>
    <description>App signing certificate</description>
    <keyStoreSource class="com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl$UploadedKeyStoreSource">
        <uploadedKeystoreBytes>{ENCRYPTED_CERTIFICATE}</uploadedKeystoreBytes>
    </keyStoreSource>
    <password>{ENCRYPTED_PASSWORD}</password>
</com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl>
...