π Laminar: ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Continuous Integration
Π’ΠΎΡ ΡΠ°ΠΌΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΡ ΠΎΡΡΠ°ΡΠ½ΠΈΡ Π½Π°ΡΠ°Π» ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΡΠ΅Π΄Π½Π΅ΠΌΠ°ΡΡΡΠ°Π±Π½ΡΠΉ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄, Π½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° ΠΏΠΎΠ»ΠΏΡΡΠΈ ΠΈΠ·-Π·Π° Π²ΠΎΠ²ΡΠ΅ΠΌΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. Laminar CI β ΡΠ΅Π΄ΠΊΠΈΠΉ Π² Π½ΡΠ½Π΅ΡΠ½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° C++ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ Π΄ΠΎΠ»ΡΡΠ΅ ΠΏΡΡΠΈ ΠΌΠΈΠ½ΡΡ.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ CI:
- ΠΡΠΎΡΡΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°: ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ Π·Π°ΠΊΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Docker ΠΈ Π΅Π³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ Container Registry, Π² ΡΡΡΠΎΠ²ΠΎΠΉ ΠΆΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π·Π°ΠΊΠ°ΡΠΈΡΡ Π²ΡΡΡΠ½ΡΡ Π½Π΅ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ»Π½ΡΠ΅ ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Ρ ΠΈΡΡΠΎΡΠΏΠ»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π½Π΅ Π³ΠΎΠ²ΠΎΡΡ ΡΠΆΠ΅ ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Laminar ΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ(Π²ΡΠ΅ ΡΡΠΈ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ): Ρ ΠΎΡΡ/ΠΏΠΎΡΡ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π°Π΄ΡΠ΅Ρ RPC-ΡΠΎΠΊΠ΅ΡΠ° Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π’Π°ΠΊΠΎΠΉ Π½Π΅Π·Π°ΠΌΡΡΠ»ΠΎΠ²Π°ΡΡΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΏΠΎΠ·ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ Π²ΡΠ΅Π³ΠΎ Π·Π° ΠΎΠ΄Π½Ρ ΠΌΠΈΠ½ΡΡΡ.
- ΠΡΠΎΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ: ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΡΡΡ Π΄ΠΆΠΎΠ±Ρ, ΡΡΡ Π»ΠΎΠ³ΠΈ. ΠΠΎΠ³ΠΈ, ΠΊΡΡΠ°ΡΠΈ, ΡΠ²Π΅ΡΠ½ΡΠ΅. ΠΠΏΡΡΡ ΠΆΠ΅ ΡΠ΅ΠΊ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ°ΠΌ.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠΈΠ½Π³Π°: ΡΡΡ ΠΌΠΎΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ. ΠΡΡ, ΡΡΠΎ Laminar ΠΎΡ ΠΌΠ΅Π½Ρ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ β ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠΎΠΌ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ. ΠΠ°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΊΡΠ°ΡΠΈΠ²ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Ρ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΠ°ΠΌΠΈ, ΠΌΠΎΡΠ³Π°Π»ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ Π±Π΅ΠΉΠ΄ΠΆΠΈΠΊΠ°ΠΌΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΌΠΎΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΎΠ½ΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ-ΡΠΎ ΠΈ Π½Π°Π΄ΠΎ
Π ΠΈΡΠΎΠ³Π΅ Ρ ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΊΡΠ΅ΡΡΠΈΡΡ Laminar ΠΈ Gitea ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π² Ρ
ΡΠΊΠ΅ post-receive
Ρ ΠΌΠ΅Π½Ρ Π»Π΅ΠΆΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΊΡΠΈΠΏΡ:
#!/usr/bin/env bash
ln -sf /usr/local/bin/laminar.run /var/lib/laminar/cfg/jobs/${GITEA_REPO_NAME}.run
export LAMINAR_HOST="10.0.0.6:28001"
JOB_ID=$(laminarc queue ${GITEA_REPO_NAME} REPO_NAME=${GITEA_REPO_NAME})
echo "Watch your job status at https://ci.domain.tld/jobs/$(echo ${JOB_ID} | sed 's/:/\//g')"
Π ΡΠΊΡΠΈΠΏΡΠ΅ ΠΆΠ΅ /usr/local/bin/laminar.run
Ρ ΠΌΠ΅Π½Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
#!/usr/bin/env bash
set -e
if [[ ${REPO_NAME} = 'blog' || ${REPO_NAME} = 'rcmd.space' ]]; then
git clone git@git.rcmd.space:rcmd/${REPO_NAME}.git
else
git clone --depth 1 git@git.rcmd.space:rcmd/${REPO_NAME}.git
fi
cd ${REPO_NAME} && sudo /usr/bin/make
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΌΠ΅Π½Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΌΠ΅ΠΉΠΊΡΠ°ΠΉΠ»Π°, Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡΡΠΎΡΠΈΠΈ.
Π ΠΏΠ»Π°Π½Π°Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΡ Π½Π° ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ Ρ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΡΡ.
Tue, 9 Feb 2021 16:24:24 +0300
RSS // Telegram // Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°