Linux болон macOS дээрх C ба C++ хэлнүүдийн PVS-Studio анализатор дээр 7.04 хувилбараас эхлэн заасан файлуудын жагсаалтыг шалгах туршилтын сонголт гарч ирэв. Шинэ горимыг ашигласнаар та анализаторыг хүсэлтийг шалгах, татах хүсэлтийг тохируулах боломжтой. Энэ нийтлэл нь Travis CI, Buddy, AppVeyor зэрэг алдартай CI (Тасралтгүй Интеграци) системд GitHub төслийн өөрчлөгдсөн файлуудын жагсаалтыг хэрхэн шалгахыг танд хэлэх болно.
Файлын жагсаалтыг шалгах горим
Linux болон macOS-д зориулсан PVS-Studio 7.04 хувилбарт эх файлуудын жагсаалтыг шалгах горим гарч ирэв. Энэ нь бүтээх систем нь танд файл үүсгэх боломжийг олгодог төслүүдэд ажилладаг
Мөн файлын жагсаалтыг шалгах горимыг хөрвүүлэгчийн эхлүүлсэн мөрийн бүртгэлтэй (pvs-studio-analyzer trace) хамт ашиглаж болно. Үүнийг хийхийн тулд та эхлээд төслийн бүрэн бүтцийг хийж, хянах хэрэгтэй бөгөөд ингэснээр анализатор шалгаж байгаа бүх файлын эмхэтгэлийн параметрүүдийн талаар бүрэн мэдээллийг цуглуулдаг.
Гэсэн хэдий ч, энэ сонголт нь мэдэгдэхүйц сул талтай байдаг - та үүнийг ажиллуулах бүртээ бүхэл бүтэн төслийн ул мөрийг хийх шаардлагатай болно, энэ нь үүрэг даалгаврыг хурдан шалгах санаатай зөрчилддөг. Эсвэл, хэрэв та ул мөрийн үр дүнг өөрөө кэш хийвэл, ул мөрийн дараа эх файлуудын хамаарлын бүтэц өөрчлөгдвөл анализаторын дараагийн ажиллагаа бүрэн бус байж болно (жишээ нь эх файлуудын аль нэгэнд шинэ #include нэмэгдсэн).
Иймээс бид файлын жагсаалтыг шалгах горимыг мөрийн бүртгэлтэй хамт хүсэлтийг шалгах эсвэл татах хүсэлтийг ашиглахыг зөвлөдөггүй. Хэрэв та үүрэг даалгаврыг шалгахдаа өсөн нэмэгдэж буй бүтээх боломжтой бол горимыг ашиглах талаар бодож үзээрэй
Шинжилгээнд зориулсан эх файлуудын жагсаалтыг текст файлд хадгалж, параметрийг ашиглан анализатор руу дамжуулдаг -S:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
Энэ файл нь файлуудын харьцангуй эсвэл үнэмлэхүй замыг зааж өгдөг бөгөөд шинэ файл бүр шинэ мөрөнд байх ёстой. Шинжилгээнд зориулж зөвхөн файлын нэрийг төдийгүй төрөл бүрийн текстийг зааж өгөхийг зөвшөөрнө. Анализатор энэ нь файл биш гэдгийг харж, мөрийг үл тоомсорлох болно. Хэрэв файлуудыг гараар зааж өгсөн бол энэ нь тайлбар өгөхөд хэрэг болно. Гэсэн хэдий ч, ихэвчлэн CI-д дүн шинжилгээ хийх явцад файлуудын жагсаалтыг үүсгэдэг, жишээлбэл, эдгээр нь гүйцэтгэх эсвэл татах хүсэлтийн файлууд байж болно.
Одоо энэ горимыг ашигласнаар та шинэ кодыг хөгжүүлэлтийн үндсэн салбар руу орохоос өмнө хурдан шалгаж болно. Сканнерын систем нь анализаторын анхааруулгад хариу үйлдэл үзүүлэхийн тулд хэрэгсэл плог хөрвүүлэгч туг нэмсэн --заагч-сануулгууд:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
Хэрэв анализаторын тайланд анхааруулга байгаа бол хувиргагч нь энэ тугийн тусламжтайгаар тэгээс өөр кодыг буцаана. Буцах кодыг ашигласнаар та урьдчилан захиалах, гүйцэтгэх эсвэл татах хүсэлтийг хаах боломжтой бөгөөд үүсгэсэн анализаторын тайланг харуулах, хуваалцах эсвэл имэйлээр илгээх боломжтой.
Анхаарна уу. Та эхлээд файлуудын жагсаалтад дүн шинжилгээ хийж эхлэхэд төслийг бүхэлд нь шинжлэх болно, учир нь анализатор нь толгой файлууд дээрх төслийн эх файлуудын хамаарлын файлыг үүсгэх шаардлагатай. Энэ нь C болон C++ файлуудыг шинжлэх онцлог юм. Ирээдүйд хамаарлын файлыг кэш хийх боломжтой бөгөөд үүнийг анализатор автоматаар шинэчлэх болно. Файлын жагсаалтыг шалгах горимыг ашиглахдаа нэмэлт дүн шинжилгээ хийх горимыг ашиглахаас илүү давуу тал нь объектын файлуудыг биш зөвхөн тухайн файлыг кэшлэх шаардлагатай байдаг.
Татах хүсэлтийн шинжилгээний ерөнхий зарчим
Төслийг бүхэлд нь шинжлэх нь маш их цаг хугацаа шаарддаг тул зөвхөн тодорхой хэсгийг нь шалгах нь зүйтэй юм. Асуудал нь та шинэ файлуудыг төслийн бусад файлуудаас салгах хэрэгтэй болдог.
Хоёр салаатай модны жишээг харцгаая:
Энэ амлалт гэж төсөөлөөд үз дээ A1 аль хэдийн шалгагдсан нэлээн их хэмжээний код агуулсан. Хэсэг хугацааны өмнө бид амлалтаас салбар хийсэн A1 мөн зарим файлыг өөрчилсөн.
Мэдээжийн хэрэг та үүнийг дараа нь анзаарсан A1 дахин хоёр амлалт гарсан, гэхдээ эдгээр нь бусад салбаруудын нэгдэл байсан, учир нь бид үүрэг хүлээгээгүй. мастер. Тэгээд одоо цаг нь иржээ hotfix бэлэн. Тийм ч учраас нэгдэхийг татах хүсэлт гарч ирсэн B3 и A3.
Мэдээжийн хэрэг, тэдгээрийн нэгдлийн үр дүнг бүхэлд нь шалгах боломжтой боловч хэдхэн файлыг өөрчилсөн тул энэ нь хэтэрхий их цаг хугацаа шаардсан бөгөөд үндэслэлгүй байх болно. Тиймээс зөвхөн өөрчлөгдсөнийг шинжлэх нь илүү үр дүнтэй байдаг.
Үүнийг хийхийн тулд бид мастер болгон нэгтгэхийг хүсч буй салбарынхаа HEAD-д байгаа салбаруудын ялгааг олж авна.
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$MERGE_BASE Бид үүнийг дараа нь нарийвчлан авч үзэх болно. Үнэн хэрэгтээ CI үйлчилгээ бүр нэгтгэх мэдээллийн сангийн талаар шаардлагатай мэдээллээр хангадаггүй тул та энэ өгөгдлийг олж авах шинэ арга замыг гаргаж ирдэг. Үүнийг тайлбарласан вэб үйлчилгээ бүрд доор дэлгэрэнгүй тайлбарлах болно.
Тиймээс бид салбаруудын ялгааг олж авлаа, эс тэгвээс өөрчлөгдсөн файлын нэрсийн жагсаалтыг гаргав. Одоо бид файлаа өгөх хэрэгтэй .pvs-pr.list (бид дээрх гаралтыг түүн рүү шилжүүлсэн) анализатор руу:
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
Шинжилгээ хийсний дараа бид бүртгэлийн файлыг (PVS-Studio.log) уншихад хялбар формат руу хөрвүүлэх хэрэгтэй.
plog-converter -t errorfile PVS-Studio.log --cerr -w
Энэ тушаал нь алдаануудыг жагсаах болно
Зөвхөн одоо бид алдааг харуулахаас гадна угсрах, шалгах үйлчилгээнд асуудал байгаа эсэхийг мэдэгдэх шаардлагатай байна. Энэ зорилгоор хөрвүүлэгч дээр туг нэмсэн -W (--заагч-сануулгууд). Хэрэв дор хаяж нэг анализаторын анхааруулга байгаа бол хэрэгслийн буцах код плог хөрвүүлэгч нь 2 болж өөрчлөгдөх бөгөөд энэ нь эргээд татах хүсэлтийн файлуудад гарч болзошгүй алдааны талаар CI үйлчилгээнд мэдэгдэх болно.
Травис CI
Тохиргоог файл хэлбэрээр хийсэн .travis.yml. Тохиромжтой болгохын тулд би бүх зүйлийг файлаас дуудагдах функц бүхий тусдаа bash скрипт болгон оруулахыг зөвлөж байна. .travis.yml (bash script_name.sh function_name).
Бид шаардлагатай кодыг скриптэд нэмнэ bash, ингэснээр бид илүү их функцийг авах болно. хэсэгт Суулгах дараах зүйлийг бичье.
install:
- bash .travis.sh travis_install
Хэрэв танд ямар нэгэн заавар байгаа бол зураасыг арилгаж скрипт рүү шилжүүлж болно.
Файлаа нээцгээе .travis.sh болон анализаторын тохиргоог функцэд нэмнэ travis_install():
travis_install() {
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
}
Одоо энэ хэсэгт нэмж оруулъя скрипт дүн шинжилгээ хийх:
script:
- bash .travis.sh travis_script
Мөн bash скрипт дээр:
travis_script() {
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
Төслийг бүтээсний дараа энэ кодыг ажиллуулах шаардлагатай. Жишээлбэл, хэрэв та CMake дээр бүтээгдсэн бол:
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
}
Энэ нь дараах байдлаар гарах болно.
travis_script() {
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
cmake $CMAKE_ARGS CMakeLists.txt
make -j8
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
git diff --name-only origin/HEAD > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
-S .pvs-pr.list
--disableLicenseExpirationCheck
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
}
Та эдгээр орчны хувьсагчдыг аль хэдийн анзаарсан байх $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI тэдгээрийг бие даан тунхаглаж байна:
- $TRAVIS_PULL_REQUEST татах хүсэлтийн дугаар эсвэл хадгалдаг хуурамч, хэрэв энэ нь ердийн салбар бол;
- $TRAVIS_REPO_SLUG төслийн агуулахын нэрийг хадгалдаг.
Энэ функцийн алгоритм:
Travis CI нь буцаах кодуудад хариу үйлдэл үзүүлдэг тул анхааруулга байгаа нь үйлчилгээг алдаа агуулсан гэж тэмдэглэхийг хэлнэ.
Одоо энэ кодын мөрийг нарийвчлан авч үзье:
git diff --name-only origin/HEAD > .pvs-pr.list
Баримт нь Travis CI нь татах хүсэлтийг шинжлэх явцад салбаруудыг автоматаар нэгтгэдэг.
Тиймээс бид дүн шинжилгээ хийдэг A4, үгүй ээ B3->A3. Энэ онцлогоос шалтгаалан бид зөрүүг тооцоолох хэрэгтэй А3, энэ нь яг салбараас дээд хэсэг юм Гарал үүсэл.
Нэг чухал зүйл үлдлээ - хөрвүүлсэн орчуулгын нэгжүүд (*.c, *.cc, *.cpp гэх мэт) дээр толгой файлуудын хамаарлыг кэшлэх. Анализатор нь файлуудын жагсаалтыг шалгах горимд анх эхлүүлэхэд эдгээр хамаарлыг тооцоолж, дараа нь .PVS-Studio санд хадгалдаг. Travis CI нь танд фолдеруудыг кэшлэх боломжийг олгодог тул бид лавлах өгөгдлийг хадгалах болно .PVS-Studio/:
cache:
directories:
- .PVS-Studio/
Энэ кодыг файлд нэмэх шаардлагатай .travis.yml. Энэ лавлах нь дүн шинжилгээ хийсний дараа цуглуулсан янз бүрийн өгөгдлийг хадгалдаг бөгөөд энэ нь файлын жагсаалтын дүн шинжилгээ эсвэл нэмэлт дүн шинжилгээ хийх дараагийн ажлыг ихээхэн хурдасгах болно. Хэрэв энэ нь хийгдээгүй бол анализатор нь бүх файлд дүн шинжилгээ хийх болно.
Buddy
Travis CI шиг,
Юуны өмнө бид угсрах шугамд шинэ арга хэмжээ нэмэх хэрэгтэй.
Төслийг бүтээхэд ашигласан хөрвүүлэгчийг зааж өгье. Энэ үйлдэлд суулгасан докер савыг анхаарна уу. Жишээлбэл, GCC-д зориулсан тусгай сав байдаг:
Одоо PVS-Studio болон шаардлагатай хэрэгслүүдийг суулгацгаая.
Дараах мөрүүдийг засварлагч дээр нэмье.
apt-get update && apt-get -y install wget gnupg jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
apt-get update && apt-get -y install pvs-studio
Одоо "Run" таб (эхний дүрс) руу орж, дараах кодыг харгалзах редакторын талбарт нэмнэ үү.
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
Хэрэв та Travs-CI-ийн хэсгийг уншсан бол энэ код танд аль хэдийн танил болсон, гэхдээ одоо шинэ үе шат байна:
Баримт нь одоо бид нэгтгэлийн үр дүнг биш, харин татах хүсэлт гаргасан салбарын HEAD-д дүн шинжилгээ хийж байна.
Тиймээс бид болзолт үүрэг хүлээсэн B3 мөн ялгааг нь олж авах хэрэгтэй A3:
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
Тодорхойлоход A3 GitHub API-г ашиглацгаая:
https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}
Бид Buddy-ийн өгсөн дараах хувьсагчдыг ашигласан:
- $BUDDY_EXECUTION_PULL_REQEUST_NO - хүсэлтийн дугаарыг татах;
- $BUDDY_REPO_SLUG — хэрэглэгчийн нэр болон репозиторын хослол (жишээ нь max/test).
Одоо доорх товчлуурыг ашиглан өөрчлөлтүүдийг хадгалж, татах хүсэлтийн шинжилгээг идэвхжүүлье:
Travis CI-ээс ялгаатай нь бид үүнийг зааж өгөх шаардлагагүй .pvs-studio кэш хийх зориулалттай, учир нь Buddy дараагийн эхлүүлэхэд зориулж бүх файлыг автоматаар кэш болгодог. Тиймээс хамгийн сүүлд үлдсэн зүйл бол Buddy-д PVS-Studio-ийн нэвтрэх болон нууц үгээ хадгалах явдал юм. Өөрчлөлтүүдийг хадгалсны дараа бид Pipeline руу буцах болно. Бид хувьсагчдыг тохируулах, PVS-Studio-д нэвтрэх, түлхүүр нэмэх зэрэгт шилжих хэрэгтэй.
Үүний дараа шинээр татах хүсэлт эсвэл амлалт гарч ирэх нь хянан шалгах ажиллагааг эхлүүлэх болно. Хэрэв даалгаварт алдаа байгаа бол Бадди үүнийг татах хүсэлтийн хуудсан дээр зааж өгнө.
AppVeyor
AppVeyor-г тохируулах нь Buddy-тэй төстэй, учир нь бүх зүйл вэб интерфэйс дээр явагддаг бөгөөд төслийн репозиторт *.yml файл нэмэх шаардлагагүй.
Төслийн тойм дахь Тохиргоо таб руу орцгооё:
Энэ хуудсыг доош гүйлгээд татах хүсэлтийг цуглуулахын тулд кэш хадгалахыг идэвхжүүлцгээе:
Одоо бид угсралтын зураг болон орчны шаардлагатай хувьсагчдыг зааж өгсөн Байгаль орчны таб руу орцгооё.
Хэрэв та өмнөх хэсгүүдийг уншсан бол эдгээр хоёр хувьсагчийг сайн мэддэг байх - PVS_KEY и PVS_USERNAME. Үгүй бол тэд PVS-Studio анализаторын лицензийг шалгах шаардлагатай гэдгийг сануулъя. Ирээдүйд бид тэдгээрийг Баш скрипт дээр дахин харах болно.
Доорх ижил хуудсан дээр бид кэш хийх фолдерыг зааж өгсөн болно:
Хэрэв бид үүнийг хийхгүй бол бид хэд хэдэн файлын оронд бүх төслийг шинжлэх болно, гэхдээ бид заасан файлуудаас гаралтыг авах болно. Тиймээс лавлахын нэрийг зөв оруулах нь чухал.
Одоо скриптийг шалгах цаг болжээ. Тестүүд табыг нээгээд Скриптийг сонгоно уу:
Та энэ маягтанд дараах кодыг оруулах шаардлагатай.
sudo apt-get update && sudo apt-get -y install jq
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update && sudo apt-get -y install pvs-studio
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
plog-converter -t errorfile PVS-Studio.log --cerr -w
Кодын дараах хэсэгт анхаарлаа хандуулцгаая.
PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
--dump-files --dump-log pvs-dump.log
-S .pvs-pr.list
else
pvs-studio-analyzer analyze -j8
-o PVS-Studio.log
--disableLicenseExpirationCheck
fi
Энэ анхдагч утгыг хадгалах ёстой хувьсагчид pwd командын утгыг тодорхой зааж өгсөн нь эхлээд харахад хачирхалтай мэт санагдаж байгаа ч би одоо бүгдийг тайлбарлах болно.
AppVeyor дээр анализаторыг тохируулах явцад би анализаторын маш хачирхалтай үйлдэлтэй тулгарсан. Нэг талаас, бүх зүйл зөв ажиллаж байсан ч шинжилгээ эхлээгүй. Бид /home/appveyor/projects/testcalc/ лавлах дотор байгааг анзаарахад би маш их цаг зарцуулсан бөгөөд анализатор биднийг /opt/appveyor/build-agent/ дотор байгаа гэдэгт итгэлтэй байна. Дараа нь би $PWD хувьсагч бага зэрэг худлаа байгааг ойлгосон. Энэ шалтгааны улмаас би дүн шинжилгээ хийхээс өмнө түүний утгыг гараар шинэчилсэн.
Тэгээд бүх зүйл өмнөх шигээ:
Одоо дараах фрагментийг авч үзье.
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO -
https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID}
| jq -r ".base.ref"`
Үүн дээр бид татах хүсэлтийг зарласан салбаруудын хоорондох ялгааг олж авдаг. Үүнийг хийхийн тулд бидэнд дараах орчны хувьсагч хэрэгтэй.
- $APPVEYOR_PULL_REQUEST_NUMBER — татах хүсэлтийн дугаар;
- $APPVEYOR_REPO_NAME - хэрэглэгчийн нэр болон төслийн агуулах.
дүгнэлт
Мэдээжийн хэрэг, бид бүх боломжит тасралтгүй интеграцийн үйлчилгээг авч үзээгүй боловч бүгд өөр хоорондоо маш төстэй үйл ажиллагааны онцлогтой байдаг. Кэшийг эс тооцвол үйлчилгээ бүр өөрийн "унадаг дугуй" хийдэг тул бүх зүйл үргэлж өөр байдаг.
Хаа нэгтээ, Travis-CI шиг, хэд хэдэн мөр код, кэш нь өөгүй ажилладаг; AppVeyor шиг хаа нэгтээ та тохиргоонд хавтсыг зааж өгөх хэрэгтэй; гэхдээ хаа нэгтээ та өвөрмөц түлхүүрүүдийг үүсгэж, кэштэй фрагментийг дарж бичих боломжийг олгохын тулд системийг итгүүлэхийг хичээх хэрэгтэй. Тиймээс, хэрэв та дээр дурдаагүй тасралтгүй интеграцийн үйлчилгээнд татах хүсэлтийн дүн шинжилгээ хийхийг хүсвэл эхлээд кэш хийхэд асуудал гарахгүй эсэхийг шалгаарай.
Анхаарал тавьсанд баярлалаа. Хэрэв ямар нэг зүйл болохгүй бол бидэн рүү бичээрэй
Хэрэв та энэ нийтлэлийг англи хэлээр ярьдаг үзэгчидтэй хуваалцахыг хүсвэл орчуулгын холбоосыг ашиглана уу: Максим Звягинцев.
Эх сурвалж: www.habr.com