پهرين، اسان کي هڪ پروجيڪٽ جي ضرورت آهي جيڪا اسان خودڪار ڪنداسين، اچو ته اسپرنگ بوٽ / جاوا 11 / ميون ۾ هڪ ننڍڙي ايپليڪيشن ٺاهيو. هن آرٽيڪل جي مقصدن لاءِ، اسان کي اپليڪيشن جي منطق ۾ ڪا به دلچسپي نه هوندي؛ ايپليڪيشن جي چوڌاري انفراسٽرڪچر اسان لاءِ اهم آهي، تنهنڪري هڪ سادو REST API ڪنٽرولر اسان لاءِ ڪافي هوندو.
توهان هتي ذريعن کي ڏسي سگهو ٿا: github.com/antkorwin/github-actions پائپ لائن جي تعمير جا سڀئي مرحلا هن منصوبي لاء پل درخواستن ۾ ظاهر ٿيندا آهن.
JIRA ۽ منصوبه بندي
اهو چوڻ جي قابل آهي ته اسان عام طور تي JIRA کي هڪ مسئلي جي ٽريڪٽر طور استعمال ڪندا آهيون، تنهنڪري اچو ته هن منصوبي لاء هڪ الڳ بورڊ ٺاهيو ۽ اتي پهريون مسئلا شامل ڪريو:
on - هي ان واقعي جو بيان آهي جنهن تي اسان جو اسڪرپٽ لانچ ڪيو ويندو.
تي: pull_request/push - اشارو ڪري ٿو ته هي ڪم فلو هر وقت شروع ٿيڻ جي ضرورت آهي جڏهن ماسٽر ڏانهن ڌڪ لڳايو وڃي ٿو ۽ درخواستون ٺاهي وينديون آهن.
هيٺ ڏنل ڪمن جي وضاحت آهي (روزگار) ۽ عمل ڪرڻ جا مرحلا (قدمهر ڪم لاءِ.
هلندڙ - هتي اسان ٽارگيٽ OS چونڊي سگھون ٿا، حيرت انگيز طور تي، توھان پڻ چونڊي سگھو ٿا Mac OS، پر پرائيويٽ مخزن تي اھو ڪافي قيمتي آھي (لينڪس جي مقابلي ۾).
فائدا توهان کي ٻين عملن کي ٻيهر استعمال ڪرڻ جي اجازت ڏئي ٿي، مثال طور، ايڪشن/ سيٽ اپ-جاوا ايڪشن استعمال ڪندي اسان ماحول کي جاوا 11 لاءِ انسٽال ڪريون ٿا.
جي مدد سان سان اسان وضاحت ڪري سگھون ٿا پيرا ميٽرز جن سان اسان عمل کي شروع ڪريون ٿا، بنيادي طور تي اھي دليل آھن جيڪي عمل ڏانھن منتقل ڪيا ويندا.
اهو سڀ ڪجهه رهي ٿو Maven سان منصوبي جي تعمير کي هلائڻ لاءِ: run: mvn -B clean package جھنڊو -B چوي ٿو ته اسان کي غير انٽرايڪٽو موڊ جي ضرورت آهي ته جيئن اوچتو مايون اسان کان ڪجهه پڇڻ نه چاهي.
زبردست! هاڻي، هر دفعي توهان ماسٽر سان واعدو ڪيو، منصوبي جي تعمير شروع ٿيندي.
خودڪار ٽيسٽ لانچ
اسيمبلي سٺي آهي، پر حقيقت ۾، هڪ منصوبي کي محفوظ طور تي گڏ ڪري سگهجي ٿو، پر ڪم نه. تنهن ڪري، ايندڙ قدم ٽيسٽ رن کي خودڪار ڪرڻ آهي. ان کان علاوه، ٽيسٽ پاس ڪرڻ جي نتيجن کي ڏسڻ لاءِ ڪافي آسان آھي جڏھن توھان پي آر جو جائزو وٺو - توھان کي پڪ ڄاڻو ٿا ته ٽيسٽ پاس ٿي ويا آھن ۽ ڪو به ضم ڪرڻ کان اڳ پنھنجي شاخ کي هلائڻ نه وساريو.
اسان ٽيسٽ هلائينداسين جڏهن پل جي درخواست ٺاهي ۽ ماسٽر ۾ ضم ٿي ويندي، ۽ ساڳئي وقت اسان ڪوڊ-ڪوريج تي رپورٽ ٺاهڻ شامل ڪنداسين.
ٽيسٽ کي ڍڪڻ لاء، مان ڪوڊڪوف استعمال ڪريان ٿو جيڪوڪو پلگ ان سان گڏ. ڪوڊڪوف جو پنهنجو عمل آهي، پر ان کي اسان جي پل جي درخواست سان ڪم ڪرڻ لاءِ ٽوڪن جي ضرورت آهي:
توهان GitHub تي مخزن جي سيٽنگن ۾ رازن ۾ هڪ متغير شامل ڪري سگهو ٿا:
توھان حاصل ڪري سگھو ٿا ٽوڪن تي codecov.io GitHub ذريعي اختيار ڪرڻ کان پوء، عوامي منصوبي کي شامل ڪرڻ لاء توهان کي صرف هن طرح جي لنڪ جي پيروي ڪرڻ جي ضرورت آهي: GitHub استعمال ڪندڙ جو نالو/[ريپو نالو]. هڪ خانگي مخزن پڻ شامل ڪري سگھجي ٿو؛ هن کي ڪرڻ لاءِ، توهان کي Github ۾ ايپليڪيشن کي ڪوڊڪوف حق ڏيڻ جي ضرورت آهي.
SONAR_TOKEN - تي حاصل ڪري سگهجي ٿو sonarcloud.io ۽ توهان کي ان کي راز ۾ رجسٽر ڪرڻ جي ضرورت آهي. GITHUB_TOKEN - هي هڪ بلٽ ان ٽوڪن آهي جيڪو GitHub ٺاهي ٿو، جنهن جي مدد سان سونار ڪلائوڊ [bot] گٽ ۾ لاگ ان ٿيڻ جي قابل هوندو ته جيئن اسان کي پل جي درخواستن ۾ پيغام موڪلجي.
Dsonar.projectKey - سونار ۾ پروجيڪٽ جو نالو، توھان ان کي پروجيڪٽ سيٽنگن ۾ ڏسي سگھو ٿا.
ھاڻي ڪنھن به پل-درخواست کي ھڪڙي ھڪڙي ٽيگ سان نشان ھڻڻ گھرجي: قسم: ٺيڪ، قسم: خاصيتون، قسم: دستاويز، قسم: ٽيسٽ، قسم: ترتيب.
ڇڪڻ جي درخواستن جي خودڪار تشريح
جيئن ته اسان هڪ اهڙي موضوع کي ڇڪيو آهي جيئن ڇڪڻ جي درخواستن سان مؤثر ڪم، اهو هڪ اهڙي عمل بابت ڳالهائڻ جي قابل آهي جيئن ليبلر، اهو پي آر ۾ ٽيگ رکي ٿو جنهن جي بنياد تي فائلون تبديل ڪيون ويون آهن. مثال طور، اسان نشان لڳائي سگھون ٿا [build] ڪنهن به پل جي درخواست جنهن ۾ ڊاريڪٽري ۾ تبديليون شامل آهن .github/workflow.
مان ان عمل کي جوڙڻ ۾ ڪامياب نه ٿيس جيڪو خودڪار طريقي سان پُل درخواستن ۾ ليبل رکي ٿو ان عمل سان جيڪو چيڪ ڪري ٿو گهربل ليبلز جي موجودگيءَ لاءِ؛ ميچ-ليبل بوٽ پاران شامل ڪيل ليبل ڏسڻ نٿو چاهي. اهو توهان جي پنهنجي عمل کي لکڻ آسان لڳي ٿو جيڪو ٻنهي مرحلن کي گڏ ڪري ٿو. پر اڃا به هن فارم ۾ اهو استعمال ڪرڻ بلڪل آسان آهي؛ توهان کي فهرست مان هڪ ليبل چونڊڻ جي ضرورت آهي جڏهن پل جي درخواست ٺاهيندي.
اهو وقت لڳائڻ جو وقت آهي
مون GitHub Actions ذريعي (ssh ذريعي، scp ذريعي، ۽ docker-hub استعمال ڪندي) ڪيترن ئي ترتيب ڏيڻ جي آپشنز جي ڪوشش ڪئي، ۽ مان چئي سگهان ٿو ته، گهڻو ڪري، توهان کي سرور تي بائنري اپلوڊ ڪرڻ جو هڪ طريقو ملندو، توهان جي پائپ لائن ڪيتري به خراب ناهي. آهي.
مون سڄي انفراسٽرڪچر کي هڪ جاءِ تي رکڻ جو آپشن پسند ڪيو، تنهنڪري اچو ته ڏسون ته GitHub پيڪيجز کي ڪيئن لڳايو وڃي (هي بائنري مواد، npm، jar، docker لاءِ مخزن آهي).
ڊاڪر تصوير ٺاهڻ ۽ ان کي GitHub پيڪيجز ۾ شايع ڪرڻ لاءِ اسڪرپٽ:
پهرين، اسان کي اسان جي ايپليڪيشن جي JAR فائل ٺاهڻ جي ضرورت آهي، جنهن کان پوء اسان حساب ڪريون ٿا گيٽ هب ڊاکر رجسٽري ڏانهن رستو ۽ اسان جي تصوير جو نالو. هتي ڪجھ چالون آهن جيڪي اسان کي اڃا تائين نظر نه آيون آهن:
ھڪڙي تعمير جھڙوڪ: echo “::set-output name=NAME::VALUE” توھان کي اجازت ڏئي ٿو ھڪڙي متغير جي قيمت کي موجوده قدم ۾ مقرر ڪريو، ته جيئن اھو پوءِ ٻين سڀني مرحلن ۾ پڙھي سگھجي.
توھان حاصل ڪري سگھو ٿا پوئين قدم ۾ متغير سيٽ جي قيمت ھن قدم جي سڃاڻپ ڪندڙ ذريعي: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
معياري GITHUB_REPOSITORY متغير ذخيرو جو نالو ۽ ان جي مالڪ ("مالڪ/ريپو-نالو"). مخزن جي نالي کان سواءِ هن لڪير مان هر شيءِ کي ڪٽڻ لاءِ، اسين استعمال ڪنداسين bash نحو: ${GITHUB_REPOSITORY#*/}
تصوير جي ورزن کي ظاهر ڪرڻ لاءِ، اسان ڪمٽٽ جي SHA هيش مان پهريون انگ استعمال ڪريون ٿا - GITHUB_SHA هتي پڻ nuances آهن، جيڪڏهن توهان اهڙيون تعميرات نه صرف ماسٽر ۾ ضم ٿيڻ وقت، پر پل جي درخواست جي تخليق جي مطابق پڻ. واقعي، پوءِ SHA شايد هيش سان نه ملي سگهي جيڪا اسان گٽ جي تاريخ ۾ ڏسون ٿا، ڇاڪاڻ ته عمل/چڪ آئوٽ عمل پي آر ۾ ڊيڊ لاڪنگ عملن کان بچڻ لاءِ پنهنجو منفرد هيش ٺاهي ٿو.
جيڪڏهن هر شي چڱي طرح ڪم ڪيو، پوء کوليو پيڪيجز سيڪشن (https://github.com/antkorwin/github-actions/packages) مخزن ۾، توهان هڪ نئين ڊاکر تصوير ڏسندا:
باقي رهي ٿو اسان جي سرور کي ترتيب ڏيڻ لاءِ هن رجسٽري سان ڪم ڪرڻ ۽ سروس کي ٻيهر شروع ڪرڻ. مان شايد انهي بابت ڳالهائيندس ته اهو ڪيئن ڪجي سسٽم ذريعي ڪنهن ٻئي وقت.
مانيٽرنگ
اچو ته هڪ سادي اختيار تي نظر رکون ته ڪيئن ڪجي صحت جي چڪاس اسان جي ايپليڪيشن لاءِ GitHub عمل استعمال ڪندي. اسان جي بوٽ ايپليڪيشن ۾ هڪ ايڪٽيوٽر آهي، تنهنڪري اسان کي ان جي اسٽيٽس چيڪ ڪرڻ لاءِ API لکڻ جي به ضرورت ناهي؛ اسان اڳ ۾ ئي سست لاءِ سڀ ڪجهه ڪري چڪا آهيون. توهان کي صرف ميزبان کي ڇڪڻ جي ضرورت آهي: SERVER-URL:PORT/actuator/health
اچو ته سرور جي حيثيت کي دستي طور تي چيڪ ڪريون curl ذريعي:
jobs:
ping:
runs-on: ubuntu-18.04
steps:
- name: curl actuator
id: ping
run: |
echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"
- name: health check
run: |
if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
echo "health check is failed"
exit 1
fi
echo "It's OK"
پهرين، اسان هڪ متغير ۾ محفوظ ڪريون ٿا جيڪو سرور درخواست جو جواب ڏنو، ايندڙ قدم ۾ اسان چيڪ ڪريون ٿا ته اسٽيٽس UP آهي ۽، جيڪڏهن اهو معاملو نه آهي، ته پوء اسان هڪ غلطي سان نڪرندا آهيون. جيڪڏهن توهان کي پنهنجي هٿن سان هڪ عمل کي "مغرور" ڪرڻ جي ضرورت آهي، پوء نڪرڻ 1 - مناسب هٿيار.
- name: send alert in telegram
if: ${{ failure() }}
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
Health check of the:
${{secrets.SERVER_HOST}}/api/actuator/health
failed with the result:
${{ steps.ping.outputs.status }}
اسان صرف ٽيليگرام ڏانهن موڪليندا آهيون جيڪڏهن عمل اڳئين قدم تي ناڪام ٿيو. پيغام موڪلڻ لاءِ اسان استعمال ڪريون ٿا Appleboy/telegram-action؛ توهان پڙهي سگهو ٿا ته ڪيئن حاصل ڪجي بوٽ ٽوڪن ۽ چيٽ آئي ڊي دستاويزن ۾: github.com/appleboy/telegram-action
Github تي رازن ۾ لکڻ نه وساريو: سرور لاءِ URL ۽ ٽيليگرام بوٽ لاءِ ٽوڪن.
بونس ٽريڪ - سست لاء JIRA
مون واعدو ڪيو هو ته جيئرا واپس وينداسين، ۽ موٽي آيا آهيون. سوين ڀيرا مون اسٽينڊ اپ تي هڪ صورتحال جو مشاهدو ڪيو آهي جڏهن ڊولپرز هڪ فيچر ٺاهيو، هڪ شاخ کي ضم ڪيو، پر مسئلو کي JIRA ۾ ڇڪڻ وساري ڇڏيو. يقينن، جيڪڏهن اهو سڀ ڪجهه هڪ جڳهه تي ڪيو وڃي ها ته اهو آسان ٿي وڃي ها، پر حقيقت ۾ اسان IDE ۾ ڪوڊ لکندا آهيون، شاخن کي bitbucket يا GitHub ۾ ضم ڪندا آهيون، ۽ پوء ٽاسڪ کي جيرا ۾ ڇڪيندا آهيون، ان لاء اسان کي نئين ونڊوز کولڻ جي ضرورت آهي. ، ڪڏهن وري لاگ ان ٿيو وغيره وغيره. جڏهن توهان مڪمل طور تي ياد ڪيو ته توهان کي اڳتي وڌڻ جي ضرورت آهي، پوء بورڊ کي ٻيهر کولڻ جو ڪو به مقصد ناهي. نتيجي طور، صبح جو هڪ اسٽينڊ اپ تي توهان کي وقت گذارڻ جي ضرورت آهي ٽاسڪ بورڊ کي اپڊيٽ ڪرڻ.
GitHub به اسان جي هن معمولي ڪم ۾ مدد ڪندو؛ شروعات ڪندڙن لاءِ، اسان مسئلا پاڻمرادو ڇڪي سگھون ٿا code_review ڪالمن ۾ جڏهن اسان هڪ پل جي درخواست جمع ڪريون ٿا. توهان سڀني کي ڪرڻو آهي شاخ جي نالي جي ڪنوينشن تي عمل ڪريو:
[имя проекта]-[номер таска]-название
مثال طور، جيڪڏهن پروجيڪٽ جي اهم "GitHub عمل" GA آهي، پوء GA-8-jira-bot GA-8 ڪم کي لاڳو ڪرڻ لاءِ هڪ شاخ ٿي سگهي ٿي.
JIRA سان انضمام Atlassian کان ڪمن ذريعي ڪم ڪري ٿو، اهي مڪمل نه آهن، مون کي ضرور چوڻ گهرجي ته انهن مان ڪجهه مون لاء ڪم نه ڪيو. پر اسان صرف انهن تي بحث ڪنداسين جيڪي ضرور ڪم ڪن ٿا ۽ فعال طور تي استعمال ڪيا ويا آهن.
پهرين توهان کي عمل کي استعمال ڪندي JIRA ۾ لاگ ان ٿيڻ جي ضرورت آهي: atlassian/gajira-login
Github Packages هڪ وڏي شيءِ آهي، سڄي انفراسٽرڪچر کي هڪ جاءِ تي رکڻ آسان آهي، توهان کي مختلف ونڊوز ذريعي سرفنگ ڪرڻ جي ضرورت ناهي، هر شيءِ هڪ يا ٻه ماؤس ڪلڪن جي ريڊيس جي اندر آهي ۽ مڪمل طور تي GitHub عملن سان ضم ٿيل آهي. ڊاکر رجسٽري سپورٽ مفت ورزن ۾ پڻ هڪ سٺو فائدو آهي.
GitHub تعمير لاگز ۾ راز لڪائي ٿو، تنهنڪري پاسورڊ ۽ ٽوڪن کي ذخيرو ڪرڻ لاء استعمال ڪندي اهو خوفناڪ ناهي. منهنجي سڀني تجربن دوران، مون ڪڏهن به ان راز کي ان جي خالص روپ ۾ ڪنسول ۾ ڏسي نه سگهيو.
اوپن سورس منصوبن لاءِ مفت
ڪن
YML، چڱو، مان هن کي پسند نٿو ڪريان. جڏهن اهڙي وهڪري سان ڪم ڪري رهيا آهيو، مون وٽ سڀ کان وڌيڪ عام ڪمٽ پيغام آهي "فيڪس yml فارميٽ"، ڪڏهن ڪڏهن توهان هڪ ٽيب کي ڪٿي رکڻ وساريندا آهيو، ڪڏهن ڪڏهن توهان ان کي غلط لائن تي لکندا آهيو. عام طور تي، اسڪرين جي سامهون ويٺي هڪ پروڪٽر ۽ حڪمران سان گڏ سڀ کان وڌيڪ خوشگوار تجربو ناهي.
DEBUG، ڪميٽ سان وهڪري کي ڊيبگ ڪرڻ، ٻيهر تعمير ڪرڻ، ۽ ڪنسول ڏانهن آئوٽ ڪرڻ هميشه سولو نه هوندو آهي، پر اهو وڌيڪ آهي ”توهان اوورڊون“ ڪيٽيگري؛ توهان کي استعمال ڪيو ويو آهي ڪم ڪرڻ لاءِ آسان IDEA سان، جڏهن توهان ڪنهن به شيءِ کي ڊيبگ ڪري سگهو ٿا .
توھان پنھنجي عمل کي ڪنھن به شيءِ تي لکي سگھوٿا جيڪڏھن توھان ان کي ڊاکر ۾ لپايو، پر صرف جاوا اسڪرپٽ مقامي طور تي سپورٽ ڪئي وئي آھي، يقينا اھو ذائقي جو معاملو آھي، پر مان js جي بدران ٻي شيء کي ترجيح ڏيندس.