2016-02-16 10 views
7

Przygotowuję kompilację Circle CI dla projektu Android i zastanawiam się, jak dodać plik gradle.properties do mojej kompilacji projektu. Używam lokalnego gradle.properties do przechowywania moich kluczy API i danych wrażliwych. Inne narzędzia CI (np. Jenkins) pozwalają na przesłanie pliku gradle.properties do użytku we wszystkich wersjach, ale nie jestem w stanie znaleźć sposobu, aby to zrobić w Kole okręgów.Czy referencje gradle.properties klasy Ko mogą mieć odwołania CI?

Wygląda na to, że zmienne środowiskowe to jedyny sposób, w jaki Circle CI pozwala na dodawanie tajnych referencji do projektu.

Czy istnieje sposób użycia poświadczeń z gradle.properties na kompilacjach Kreatora konfiguracji?

Odpowiedz

11

Znalazłem sposób dodawania poświadczeń/kluczy API do gradle.properties poprzez kółko CI. Pozwala projektom Android odwoływać się do gradle.properties poświadczeń w taki sam sposób dla kompilacji lokalnych i CircleCI.

Najpierw przechowuj poświadczenia w ustawieniach projektu Koło CI jako zmienne środowiskowe, które z założenia mają być prywatne. W interfejsie Circle CI GUI przejdź do swojego projektu, a następnie wybierz "Ustawienia projektu" w prawym górnym rogu. W menu po lewej stronie kliknij "Zmienne środowiskowe", które znajdują się w nagłówku "Poprawki". Tutaj możesz dodać swoje dane uwierzytelniające jako parę wartości nazw.

Następnie utwórz skrypt bash w projekcie Android, który zapisze zmienne środowiskowe Koel CI w lokalnym pliku gradle.properties. Napisałem taki skrypt i posted it here as gist. Oto metoda, która działa:

function copyEnvVarsToGradleProperties { 
    GRADLE_PROPERTIES=$HOME"/.gradle/gradle.properties" 
    export GRADLE_PROPERTIES 
    echo "Gradle Properties should exist at $GRADLE_PROPERTIES" 

    if [ ! -f "$GRADLE_PROPERTIES" ]; then 
     echo "Gradle Properties does not exist" 

     echo "Creating Gradle Properties file..." 
     touch $GRADLE_PROPERTIES 

     echo "Writing TEST_API_KEY to gradle.properties..." 
     echo "TEST_API_KEY=$TEST_API_KEY_ENV_VAR" >> $GRADLE_PROPERTIES 
    fi 
} 

Ten skrypt jest wywoływany tylko podczas Kręgu CI budować, a nie podczas lokalnego buduje. Powoływanie się na ten scenariusz jako zależność wstępnego procesu w pliku circle.yml, żeby gradle.properties jest napisane przed faktycznym build Gradle zaczyna:

dependencies: 
    pre: 
     - source environmentSetup.sh && copyEnvVarsToGradleProperties 

Będzie nadal uzyskać dostęp do kluczy API w build.gradle tak jak ty zawsze:

buildConfigField("String", "THIS_TEST_API_KEY", "\"" + TEST_API_KEY + "\"")

+0

tam nie sposób odczytać z właściwości zmiennych env zamiast gradle.properties? ponieważ jeśli chcesz dodać lub usunąć zmienną, wiele rzeczy jest edytowanych ... – Caipivara

+4

Ładne rozwiązanie! Musiałem dodać 'mkdir ~/.gradle -p' przed dotknięciem, ponieważ nie udało się, jeśli jeszcze nie utworzono katalogu' .gradle'. – WindRider

+0

skończyło się za pomocą tego https://gist.github.com/danielgomezrico/461bf74a24dd5efd28abef1bebc0f05d – Caipivara

Powiązane problemy