Android plataformarako proiektu bat garatzerakoan, nahiz eta txikia izan, goiz edo beranduago garapen-inguruneari aurre egin behar diozu. Android SDK-az gain, beharrezkoa da Kotlin, Gradle, platform-tools, build-tools-en azken bertsioa izatea. Eta garatzailearen makinan dependentzia horiek guztiak Android Studio IDE erabiliz neurri handiagoan konpontzen badira, CI/CD zerbitzarian eguneratze bakoitza buruhauste bihur daiteke. Eta web garapenean Docker ingurunearen arazoaren irtenbide estandarra bihurtu bada, zergatik ez saiatu Android garapenean antzeko arazo bat konpontzen hura erabiliz...
Docker zer den ez dakienarentzat, besterik gabe, deitutakoa sortzeko tresna da. OS kernel minimo bat eta nahi dugun tokian zabaldu dezakegun beharrezko software multzoa duten "edukiontziak", ingurumena zainduz. Gure edukiontzian zer egongo den zehatz-mehatz Dockerfile-n zehazten da, gero edonon abiarazi daitekeen eta idempotentzia propietateak dituen irudi batean muntatzen dena.
Dockerren instalazio-prozesua eta oinarriak ezin hobeto deskribatzen dira berean
# Π’.ΠΊ. ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Android-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Gradle,
# ΠΈ ΠΏΠΎ ΡΡΠ°ΡΡΠ»ΠΈΠ²ΠΎΠΌΡ ΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ² Π΅ΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ Docker-ΠΎΠ±ΡΠ°Π·
# ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ Π²Π·ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ Ρ Π½ΡΠΆΠ½ΠΎΠΉ Π½Π°ΠΌ Π²Π΅ΡΡΠΈΠ΅ΠΉ Gradle
FROM gradle:5.4.1-jdk8
# ΠΠ°Π΄Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ Π΄Π»Ρ Android SDK ΠΈ
# Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
ANDROID_HOME="/usr/local/android-sdk"
ANDROID_VERSION=28
ANDROID_BUILD_TOOLS_VERSION=28.0.3
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡ, ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΄Π° SDK ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π°ΡΡ
ΠΈΠ²,
# ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌ
RUN mkdir "$ANDROID_HOME" .android
&& cd "$ANDROID_HOME"
&& curl -o sdk.zip $SDK_URL
&& unzip sdk.zip
&& rm sdk.zip
# Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΡΠΎΡΠΊΠ°Ρ
ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
# Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΌΠΈ. ΠΠ° ΠΎΡ. ΡΠ°ΠΉΡΠ΅ Android Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΡΠΎ ΠΌΡ
# ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ Ρ ΠΌΠ°ΡΠΈΠ½ Π³Π΄Π΅ Π²ΡΡΡΠ½ΡΡ ΡΡΠΈ
# Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ»ΠΈ ΠΈ ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
# ΠΈΡ
ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π»ΡΠ·Ρ
&& mkdir "$ANDROID_HOME/licenses" || true
&& echo "24333f8a63b6825ea9c5514f83c2829b004d1" > "$ANDROID_HOME/licenses/android-sdk-license"
&& echo "84831b9409646a918e30573bab4c9c91346d8" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
# ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SDK ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ build-tools, platform-tools
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
"platforms;android-${ANDROID_VERSION}"
"platform-tools"
Gure Android proiektuarekin karpetan gordetzen dugu eta komandoarekin edukiontzia eraikitzen hasten gara
docker build -t android-build:5.4-28-27 .
Parametroa -t gure edukiontziaren etiketa edo izena zehazten du, normalean bere izenaz eta bertsioaz osatua. Gure kasuan, android-build deitu genion eta bertsioan gradle, android-sdk eta platform-tools-en bertsio multzo bat adierazi genuen. Etorkizunean, errazagoa izango zaigu βbertsioβ hau erabiliz behar dugun irudia izenez bilatzea.
Muntaia amaitu ondoren, gure irudia lokalean erabil dezakegu, komandoarekin deskargatu dezakegu docker push irudi-biltegi publiko edo pribatu batera beste makina batzuetara deskargatzeko.
Adibide gisa, eraiki dezagun proiektu bat lokalean. Horretarako, proiektua duen karpetan, exekutatu komandoa
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug
Azter dezagun zer esan nahi duen:
docker run - irudia abiarazteko komandoa bera
-rm β esan nahi du edukiontzia gelditu ondoren, bere bizitzan zehar sortutako guztia ezabatzen duela
-v "$PWD":/home/gradle/ β gure Android proiektuarekin uneko karpeta muntatzen du barneko edukiontzi karpetan /home/gradle/
-w /home/gradle β edukiontziaren lan-direktorioa zehazten du
Android-build: 5.4.1-28-27 β bildu dugun gure edukiontziaren izena
gradle assembleDebug β gure proiektua muntatzen duen benetako muntaia-taldea
Dena ondo badoa, segundo/minutu pare batean zure pantailan antzeko zerbait ikusiko duzu ERAIKITZEN ERAIKITZEN 8m 3s-tan! Eta app/build/output/apk karpetak muntatutako aplikazioa edukiko du.
Graduko beste zeregin batzuk antzera egin ditzakezu: egiaztatu proiektua, exekutatu probak, etab. Abantaila nagusia da proiektua beste edozein makinatan eraiki behar badugu, ez dugula ingurune osoa instalatzeaz kezkatu behar eta nahikoa izango da beharrezko irudia deskargatu eta bertan eraikitzea exekutatzeko.
Edukiontzian ez da aldaketarik gordetzen, eta muntaia bakoitza hutsetik abiarazten da, eta horrek, alde batetik, muntaiaren nortasuna bermatzen du abiarazten den edozein lekutan, bestetik, mendekotasun guztiak deskargatu behar dituzun bakoitzean. eta konpilatu kode guztia berriro, eta batzuetan denbora garrantzitsua izan daiteke. Hori dela eta, ohiko abiarazte βhotzβaz gain, eraikitzen hasteko aukera dugu deitutakoa gorde bitartean. "cache", non ~/.gradle karpeta gordetzen dugu proiektuaren laneko karpetan kopiatuz, eta hurrengo eraikuntzaren hasieran itzuliko dugu. Kopiatzeko prozedura guztiak script bereizietara eraman genituen eta abiarazteko komandoa bera honela hasi zen
docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 /bin/bash -c "./pre.sh; gradle assembleDebug; ./post.sh"
Ondorioz, gure proiektuaren batez besteko eraikuntza-denbora hainbat aldiz murriztu zen (proiektuaren menpekotasun kopuruaren arabera, baina batez besteko proiektua 1 minutu beharrean minutu batean hasi zen muntatzen).
Horrek guztiak, noski, zentzua dauka zure barneko CI/CD zerbitzaria baduzu, zuk zeuk onartzen duzuna. Baina gaur egun arazo horiek guztiak konpontzen diren hodeiko zerbitzu asko daude eta ez duzu horretaz kezkatu beharrik, eta beharrezko muntaketa-propietateak proiektuaren ezarpenetan ere zehaztu daitezke.
Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan.
Zure CI/CD sistema etxean mantentzen al duzu edo hirugarrenen zerbitzuren bat erabiltzen duzu?
-
Barne zerbitzari bat erabiltzen dugu
-
Kanpoko zerbitzu bat erabiltzen dugu
-
Ez dugu CI/CD erabiltzen
-
Beste
42 erabiltzailek eman dute botoa. 16 erabiltzaile abstenitu ziren.
Iturria: www.habr.com