Ịrụ ọrụ gam akporo n'ime akpa Docker

Mgbe ị na-emepụta ọrụ maka ikpo okwu gam akporo, ọbụlagodi nke kacha nta, n'oge na-adịghị anya, ị ga-emerịrị gburugburu mmepe mmepe. Na mgbakwunye na gam akporo SDK, ọ dị mkpa ịnwe ụdị Kotlin, Gradle, ngwaọrụ ikpo okwu, ngwa-ewu. Ma ọ bụrụ na igwe onye nrụpụta na-edozi ihe ndị a niile dabere na iji Android Studio IDE, mgbe ahụ na sava CI/CD nwelite ọ bụla nwere ike ịghọ isi ọwụwa. Ma ọ bụrụ na mmepe weebụ Docker aghọwo ọkọlọtọ ngwọta maka nsogbu gburugburu ebe obibi, mgbe ahụ gịnị ma ị gbalịa dozie nsogbu yiri ya na mmepe Android site na iji ya ...

Maka ndị na-amaghị ihe Docker bụ, n'ikwu ya n'ụzọ dị mfe, ọ bụ ngwá ọrụ maka ịmepụta ihe a na-akpọ. “containers” nwere opekata mpe OS kernel yana sọftụwia dị mkpa nke anyị nwere ike ibugharị ebe ọ bụla anyị chọrọ, na-echekwa gburugburu. A na-ekpebi ihe ga-adị na akpa anyị na Dockerfile, nke a na-agbakọta na foto nke enwere ike ịmalite ebe ọ bụla ma nwee ihe onwunwe ike.

A kọwapụtara usoro ntinye na ntọala Docker nke ọma na nke ya ebe nrụọrụ weebụ gọọmentị. Ya mere, na-ele anya ntakịrị, nke a bụ Dockerfile anyị mechiri:

# Т.к. основным инструментом для сборки 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"

Anyị na-echekwa ya na nchekwa na ọrụ Android anyị wee malite iwu akpa ahụ na iwu

docker build -t android-build:5.4-28-27 .

Ogologo -t ezipụta mkpado ma ọ bụ aha nke akpa anyị, nke na-enwekarị aha ya na ụdị ya. N'ọnọdụ anyị, anyị kpọrọ ya android-build na ụdị ahụ anyị gosipụtara otu ụdị gradle, android-sdk na ngwaọrụ ikpo okwu. N'ọdịnihu, ọ ga-adịrị anyị mfe iji "ụdị" a chọọ ihe oyiyi anyị chọrọ n'aha.

Mgbe mgbakọ ahụ mechara, anyị nwere ike iji ihe oyiyi anyị na mpaghara, anyị nwere ike ibudata ya na iwu docker push gaa na ebe nchekwa onyonyo ọha ma ọ bụ nkeonwe ka ibudata ya na igwe ndị ọzọ.

Dịka ọmụmaatụ, ka anyị wuo ọrụ na mpaghara. Iji mee nke a, na folda nwere ọrụ ahụ, mee iwu ahụ

docker run --rm -v "$PWD":/home/gradle/ -w /home/gradle android-build:5.4.1-28-27 gradle assembleDebug

Ka anyị chọpụta ihe ọ pụtara:

docker na-agba ọsọ - iwu mmalite ihe onyonyo n'onwe ya
-rm - pụtara na mgbe akpa ahụ kwụsịrị, ọ na-ehichapụ ihe niile e kere n'oge ndụ ya
-v "$PWD":/home/gradle/ - na-ebugo folda ugbu a na ọrụ gam akporo anyị n'ime nchekwa akpa / ụlọ / gradle /
-w /home/gradle - ezipụta akwụkwọ ndekọ aha nke akpa
android-ewu:5.4.1-28-27 - aha akpa anyị na-anakọta
gradle assembleDebug - n'ezie mgbakọ otu na-achịkọta anyị oru ngo

Ọ bụrụ na ihe niile na-aga nke ọma, mgbe ahụ n'ime sekọnd ole na ole / nkeji ị ga-ahụ na ihuenyo gị ihe dị ka Zụlite na-aga nke ọma na 8m 3s! Na ngwa / wuo / mmepụta / apk nchekwa ga-enwe ngwa a gbakọtara.

Ị nwere ike ịrụ ọrụ gradle ndị ọzọ n'otu aka ahụ - lelee ọrụ ahụ, mee ule, wdg. Isi uru bụ na ọ bụrụ na anyị kwesịrị ịrụ ọrụ ahụ na igwe ọ bụla ọzọ, anyị ekwesịghị ichegbu onwe anyị banyere ịwụnye gburugburu ebe obibi na ọ ga-ezuru iji budata ihe oyiyi dị mkpa ma rụọ ọrụ na ya.

Akpa ahụ anaghị echekwa mgbanwe ọ bụla, a na-amalitekwa mgbakọ ọ bụla site na ncha, nke, n'otu aka ahụ, na-ekwe nkwa njirimara nke mgbakọ ahụ n'agbanyeghị ebe a na-ewepụta ya, n'aka nke ọzọ, oge ọ bụla ị ga-ebudata ihe ndabere niile. ma chịkọta koodu niile ọzọ, nke a nwere ike were oge ụfọdụ dị mkpa. Ya mere, na mgbakwunye na mmalite "oyi" a na-emekarị, anyị nwere nhọrọ nke ịmalite ụlọ ahụ mgbe ị na-echekwa ihe a na-akpọ. "cache", ebe anyị na-echekwa ~/ .gradle nchekwa site na iṅomi ya na nchekwa ọrụ nke ọrụ ahụ, na mmalite nke ụlọ ọzọ anyị na-eweghachi ya azụ. Anyị bupụrụ usoro nṅomi niile n'ime edemede dị iche iche na iwu mmalite n'onwe ya malitere ịdị ka nke a

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"

N'ihi ya, nkezi ọrụ anyị na-ewu oge na-ebelata ọtụtụ ugboro (dabere na ọnụ ọgụgụ nke adabere na oru ngo, ma nkezi oru ngo si otú malitere na-agbakọta na 1 nkeji kama 5 nkeji).

Ihe a niile, n'ezie, ọ bụ naanị ezi uche ma ọ bụrụ na ị nwere ihe nkesa CI / CD nke gị, nke ị na-akwado onwe gị. Ma ugbu a, e nwere ọtụtụ ọrụ igwe ojii nke a na-edozi nsogbu ndị a niile na ị gaghị echegbu onwe gị, na ihe ndị dị mkpa mgbakọ nwere ike ịkọwapụta na ntọala ọrụ.

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

Ị na-edobe usoro CI/CD gị n'ime ụlọ ma ọ bụ jiri ọrụ ndị ọzọ?

  • Anyị na-eji ihe nkesa dị n'ime

  • Anyị na-eji ọrụ mpụga

  • Anyị anaghị eji CI/CD

  • Ndị ọzọ

Ndị ọrụ 42 họpụtara. Ndị ọrụ 16 anabataghị.

isi: www.habr.com

Tinye a comment