Halo kabeh. Kita nerusake seri artikel babagan nulis proyek sampeyan.
Urut cabang
Sing penting, supaya ora ilang ing cabang lan urutane ing gudang, aku mutusake kanggo ngganti jeneng kanthi nambahake STEP_{number} prefix . Contone, kita duwe telung cabang saliyane sing utama:- JRTB-0
- JRTB-2
- JRTB-3
- STEP_1_JRTB-0 - langkah pisanan
- STEP_2_JRTB-2 - langkah kapindho
- STEP_3_JRTB-3 - langkah katelu
A sethitik babagan Docker
Apa iku Docker? Ing cendhak, iku alat sing sampeyan bisa kanthi cepet lan aman nyebarke (nyebar) aplikasi, nggawe infrastruktur tertutup kanggo wong-wong mau, mung perlu kanggo wong-wong mau. Isih angel, aku ngerti. Umumé, Docker bisa dingerteni minangka platform pangembangan ing ngendi sampeyan bisa kerja kanthi cepet lan efisien. Docker bisa dingerteni minangka program sing mlaku ing server. Program iki nduweni kemampuan kanggo nyimpen wadhah kanthi aplikasi. Apa iku wadhah? Iki minangka infrastruktur sing kapisah sing sampeyan bisa nambah kabeh sing dibutuhake. Contone, kanggo aplikasi Jawa kita kudu JRE kanggo mbukak aplikasi, wadhah bakal duwe iki, kita kudu sawetara piranti lunak liyane - kita bisa nambah iki. Utawa mungkin kita butuh Linux lan wadah servlet Tomcat. Iki uga bisa ditindakake. Kontainer digawe adhedhasar gambar: yaiku, iki minangka cithakan khusus ing ngendi kabeh sing dibutuhake kanggo nggawe wadhah Docker ditulis. Kepiye carane nggawe gambar iki? Ing kasus kita, kita kudu nggawe Dockerfile ing oyod proyek sing nggambarake apa sing kudu ana ing wadhah kasebut. Amarga kita ora pengin mbabarake token bot ing endi wae, kita kudu nggunakake aplikasi kasebut saben-saben pengin nyebarake aplikasi kasebut. Sampeyan bisa maca liyane babagan topik iki kene lan kene .Kita nulis JRTB-13
Kita kudu nyiyapake proses penyebaran cepet lan gampang kanggo aplikasi kita menyang server. Sing, kanggo mesin sing dianggo 24/7. Ayo njupuk Docker minangka basis. Nanging ora ana tugas ing dhaptar sing bakal tanggung jawab kanggo nambah fungsi iki. Piye wae aku ora kejawab nalika nggawe. Ora masalah, kita bakal nggawe saiki. Kita pindhah menyang tab nggawe masalah ing GitHub banjur pilih Panjaluk Fitur: Tambah katrangan babagan tugas, kritéria kanggo ditampa, atur proyek endi masalah iki lan sampeyan bisa nggawe masalah anyar: Saiki, kanggo nuduhake yen tugas kasebut wis rampung. ditampa kanggo karya, ngganti status tugas saka Kanggo nindakake ing Progress: Iki bakal dadi artikel angel. Yen sampeyan duwe masalah, tulis ing komentar: Aku bakal ngawasi lan njawab kanthi paling apik. Iki bakal dadi Dhukungan Pelanggan cilik :DNggawe Dockerfile
Apa iku dockerfile? Kanggo Docker, iki minangka skrip (instruksi langkah-langkah) babagan carane nggawe gambar kanggo wadhah Docker. Supaya aplikasi bisa digunakake, kita butuh JDK, versi 11. Yaiku, kita kudu nemokake gambar docker JDK 11 lan ditambahake menyang gambar kita. Iki soko padha carane kita nambah katergantungan ing memori. Docker duwe DockerHub kanggo tujuan iki . Kanggo ndownload gambar sacara lokal, sampeyan kudu ndhaptar ing kana. Sawise registrasi, ayo goleki JDK11. Saka apa aku ketemu, iki wadhah: adoptopenjdk/openjdk11 . Katrangan babagan wadhah iki nduweni apa sing dibutuhake kanggo file docker:FROM adoptopenjdk/openjdk11:ubi
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Ayo ndandani folder sing njupuk file jar. Kita duwe ing folder target sawise kita mbukak tugas mvn paket maven. Sadurunge nindakake kabeh iki, adhedhasar cabang utama sing dianyari, kita nggawe sing anyar kanggo tugas kita: STEP_4_JRTB-13 . Saiki sampeyan bisa kerja. Ing oyod proyek, gawe file tanpa ekstensi Dockerfile lan tambahake ing ngisor iki:
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Baris pisanan yaiku apa sing bakal didhasarake gambar - adoptopenjdk/openjdk11. Baris kapindho yaiku nambah argumen menyang gambar sing jenenge JAR_FILE, sing ana ing folder target. Kajaba iku, folder saiki ditemtokake dening lokasi Dockerfile. Baris katelu - nyalin jar proyek kita menyang gambar docker. Baris pungkasan ateges ngemot array sing digawe saka printah ing terminal, sing dipisahake kanthi spasi. Yaiku, ing pungkasan bakal ditindakake: "java -jar /app.jar" Kanggo njaga rahasia token bot, nalika miwiti wadhah, kita kudu ngliwati rong variabel - jeneng bot lan token. Kanggo nindakake iki, kita bakal nulis pitakon sing kudu miwiti proyek kita kanthi variabel. Lan carane nindakake? Sampeyan kudu Google: iki link pisanan karo gambaran normal. Apa sing arep kita lakoni? Kita duwe rong variabel ing file application.properties sing ditetepake ana:
- bot.jeneng panganggo
- bot.token
- Ayo mbukak skrip bash.
- Skrip bash nganggo docker-compose.
- Docker-compose ngluncurake wadhah docker karo aplikasi kita.
- Wadah Docker mbukak aplikasi kita.
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}", "-jar", "/app.jar"]
Sampeyan bisa ndeleng manawa kita nambahake rong baris lan nganyari ENTRYPOINT. garis:
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
ngumumake variabel ing file encoder. Kanthi gawan, padha duwe nilai sing ditemtokake. Yen, nalika nggawe gambar saka dockerfile iki, variabel lingkungan kanthi jeneng kasebut dilewati, nilai kasebut bakal beda. Lan ing ENTRYPOINT kita nambah sawetara unsur liyane sing bakal maca variabel lingkungan iki:
"-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}"
Ing kene sampeyan bisa ndeleng manawa ing baris kasebut, nggunakake konstruksi ${}, nilai BOT_NAME lan BOT_TOKEN bakal diterusake. Sabanjure kita kudu ngajari carane nampa lan ngliwati variabel kasebut menyang docker-compose.
Nggawe docker-compose.yml
Luwih becik sampeyan maca babagan format YAML kanthi kapisah, yen ora, artikel kasebut wis akeh banget. Kanggo kita, iki mung gambaran liyane saka variabel saka jinis .properties. Mung ing properti ditulis liwat titik, nanging ing YAML iki rampung luwih apik. Contone, kaya iki. Rong variabel ing .properties: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin Nanging ing .yaml (padha karo .yml) bakal kaya mangkene:javarush:
telegram:
bot:
name: ivan
token: pupkin
Pilihan kapindho luwih ayu lan bisa dingerteni. Spasi kudu persis kaya sing kasebut ing ndhuwur. Ayo kita nerjemahake application.properties lan application.yml piye wae. Pisanan sampeyan kudu nggawe. Ing oyod proyek, gawe file docker-compose.yml lan tulis ing ngisor iki:
version: '3.1'
services:
jrtb:
build:
context: .
environment:
- BOT_NAME=${BOT_NAME}
- BOT_TOKEN=${BOT_TOKEN}
restart: always
Baris pisanan yaiku versi docker-compose. layanan: ngandika sing kabeh baris ing ngisor iki sawise iki (bakal dipindhah) nuduhake layanan sing kita configuring. Kita mung duwe siji iki nganti saiki - aplikasi java sing diarani jrtb . Lan wis ana ing sangisore kabeh setelane. Contone, mbangun: konteks:. ngandika yen kita bakal katon kanggo Dockerfile ing direktori padha docker-compose.yml. Nanging lingkungan: bagean bakal tanggung jawab kanggo mesthekake yen kita pass variabel lingkungan perlu kanggo Dockerfile. Mung apa kita kudu. Mulane, kita ngliwati variabel ing ngisor iki. Docker-compose bakal nggoleki ing variabel lingkungan operasi server. Ayo ditambahake menyang skrip bash.
Nggawe skrip bash
Langkah pungkasan yaiku nggawe skrip bash. Gawe file sing diarani start.sh ing oyod proyek lan tulis ing ngisor iki:#!/bin/bash
# Pull new changes
git pull
# Prepare Jar
mvn clean
mvn package
# Ensure, that docker-compose stopped
docker-compose stop
# Add environment variables
export BOT_NAME=$1
export BOT_TOKEN=$2
# Start new deployment
docker-compose up --build -d
Baris pisanan dibutuhake kanggo kabeh skrip bash: ora bakal bisa digunakake tanpa. Banjur - mung sakumpulan printah ing terminal sing kudu dieksekusi. Aku wis nambah komentar ing saben printah supaya kudu cetha. Ing bab mung aku arep nerangake apa $1 lan $2 tegese. Iki minangka rong variabel sing bakal dilewati nalika skrip bash diluncurake. Nggunakake printah ekspor, bakal ditambahake menyang variabel server lan diwaca ing docker-compose. Iki dianggo kanggo Ubuntu, mbokmenawa ora kanggo Windows, nanging aku ora yakin. Saiki sampeyan kudu nambah script stop.sh, kang bakal mungkasi karya. Bakal ngemot sawetara baris:
#!/bin/bash
# Ensure, that docker-compose stopped
docker-compose stop
# Ensure, that the old application won't be deployed again.
mvn clean
Kene kita mungkasi docker-nyipta lan ngresiki jarnik project, kang wis lying watara wiwit mbangun pungkasan. Kita nindakake iki kanggo mesthekake yen proyek kita dibangun maneh kanthi akurat. Ana precedents, mulane aku nambah) Akibate, kita entuk 4 file anyar:
- Dockerfile - file kanggo nggawe gambar aplikasi kita;
- docker-compose.yml - file kanthi setelan carane kita bakal mbukak wadhah kita;
- start.sh - bash script kanggo deploying aplikasi kita;
- stop.sh minangka skrip bash kanggo mungkasi aplikasi kita.
# Cathetan Rilis ## 0.3.0-SNAPSHOT * JRTB-13: nambahake proses penyebaran menyang proyek kasebut ## 0.2.0-SNAPSHOT * JRTB-3: dileksanakake pola Command kanggo nangani perintah Telegram Bot ## 0.1.0-SNAPSHOT * JRTB -2: ditambahake bot telegram rintisan * JRTB-0: ditambahake proyek kerangka SpringBoot
Lan ing README kita bakal nambah paragraf anyar sing njlèntrèhaké cara masang aplikasi kita:
## Proses Deployment Deployment segampang mungkin: Piranti lunak sing dibutuhake: - terminal kanggo mbukak skrip bash - docker - docker-compose kanggo nyebarake aplikasi, ngalih menyang cabang sing dibutuhake lan mbukak skrip bash: $ bash start.sh $ {bot_username} ${bot_token } Iku kabeh.
Mesthi, kabeh ditulis nganggo basa Inggris. Kaya biasane, ing cabang sing mentas digawe STEP_4_JRTB-13 kita nggawe komitmen anyar kanthi jeneng: JRTB-13: ngleksanakake proses penyebaran liwat docker lan push. Aku mandheg manggoni kanthi rinci babagan perkara sing wis dakcritakake ing artikel sadurunge. Aku ora weruh titik kanggo mbaleni bab sing padha. Kajaba iku, sing ngerti lan nindakake dhewe ora bakal duwe pitakon. Iki aku ngomong babagan carane nggawe cabang anyar, carane nggawe commit, carane push commit menyang repositori.
GO TO FULL VERSION