جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل

جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل

حبر کي ٿورڙي ڇڪڻ سان، مون کي حيرت ٿي ته تمام ٿورا مضمون شايع ڪيا ويا آهن GitHub جي موضوع تي (بيٽا) فيچر - ايڪشن.

اهو لڳي ٿو ته اهڙي وضاحت جي وضاحت ڪري سگهجي ٿي حقيقت اها آهي ته ڪارڪردگي اڃا تائين جاچ ۾ آهي، "بيٽا" جي باوجود. پر اها بيٽا جي هڪ مفيد خصوصيت آهي جيڪا هن اوزار کي خانگي ذخيرو ۾ استعمال ڪرڻ جي اجازت ڏئي ٿي. اهو هن ٽيڪنالاجي سان ڪم ڪرڻ بابت آهي جنهن بابت آئون هن مضمون ۾ ڳالهائيندس.

قبل از تاريخ

جيڪڏهن اسان ترتيب سان شروع ڪريون ٿا، ته اهو شايد قابل ذڪر آهي ته هڪ ذاتي "منهنجي باري ۾" ويب سائيٽ کي محفوظ ڪرڻ لاء هڪ تيز، آسان، آسان ۽ مفت آپشن ڳولڻ جي عمل ۾، مون کي ڪيتريون ئي راتيون گذارڻيون هيون ۽ ڪيترن ئي مضمونن ذريعي ڪم ڪرڻو پيو.

ڪجهه ماڻهو هوسٽنگ چونڊيندا آهن، ٻيا ڪلائوڊ سرور، ۽ جيڪي نه ٿا سمجهن ته ڪم، ڳالهه ٻولهه ۽ ادائگي انهن سڀني لاءِ جيئن ته اسٽيٽيڪ سائيٽس کي مخزن تي اپلوڊ ڪرڻ، ڇاڪاڻ ته هاڻي اهو ٿي سگهي ٿو GitHub ۽ GitLab ٻنهي تي.

يقينن، اهو هر ڪنهن جي ذاتي پسند آهي.

منهنجي آخري پسند هئي GitHub صفحا.

صفحن بابت

ڪير نه ٿو ڄاڻي gh-pages - هي هڪ ويب سائيٽ جي صورت ۾ دستاويزن کي ذخيرو ڪرڻ لاء هڪ اختيار آهي ۽ اهو مفت مهيا ڪيو ويو آهي، ۽ دستاويزن کان علاوه، اهو پڻ تجويز ڪيل آهي ذاتي ويب سائيٽن کي ذخيرو ڪرڻ لاء. هي ڪارڪردگي GitHub پاران سڀني صارفين کي مهيا ڪئي وئي آهي ۽ مخزن جي سيٽنگن ۾ موجود آهي.

پروجيڪٽ مخزن هڪ شاخ استعمال ڪري ٿو gh-pages, هڪ صارف جي سائيٽ لاء - نالي سان هڪ الڳ مخزن username.github.io سائيٽ جي ذريعن سان master شاخ.

توھان وڌيڪ تفصيل ڏسي سگھو ٿا دستاويز ۾، پر مون کي صرف نوٽ ڪرڻ ڏيو ته GitHub حيرت انگيز طور تي فياض آهي هر ڪنهن کي اجازت ڏيڻ جي اجازت ڏيڻ ۾ پنهنجي پنهنجي ڊومين کي اهڙي سائيٽ سان ڳنڍڻ لاءِ صرف هڪ فائل شامل ڪندي CNAME ڊومين جي نالي سان ۽ GitHub سرورز تي توهان جي ڊومين فراهم ڪندڙ جي DNS کي ترتيب ڏيڻ.

مون کي پڪ آهي ته هتي ڪيترائي آرٽيڪل موجود آهن ته اهڙي سائيٽ کي ڪيئن ڊولپ ڪيو وڃي، تنهن ڪري اهو نه آهي جيڪو آئون اڳتي ڳالهائڻ وارو آهيان.

هڪ مسئلي جو واقعو

مسئلو اهو هو ته جڏهن هڪ جامد جنريٽر استعمال ڪيو وڃي، اتي اضافي اسڪرپٽ لکڻ جي ضرورت آهي ۽ صفحا ٺاهڻ ۽ انهن کي مخزن ۾ لوڊ ڪرڻ جي عمل کي آسان ڪرڻ لاءِ لائبريريون استعمال ڪرڻ گهرجن. بس، جيڪڏهن توهان ذريعن کي هڪ الڳ خانگي مخزن ۾ ذخيرو ڪريو ٿا، ته پوءِ هر ڀيري سائيٽ تي ڪا به تبديلي اچي ٿي، ان لاءِ ضروري هو ته مقامي ماحول کي ايندڙ نسل جي جامد صفحن ۽ اشاعت جي مکيه سائيٽ جي مخزن ۾ ترتيب ڏيو.

ڪثرت آهي جامد جنريٽر ۽ انهن سڀني کي ساڳيو مسئلو آهي. اهي ڪارناما تمام گهڻو وقت ۽ ڪوشش وٺن ٿا، ۽ آخرڪار سائيٽ تي ڪم کي سست ڪري ٿو، خاص طور تي OS کان OS ڏانهن ڪيترن ئي لڏپلاڻ کان پوء يا هارڊ ڊرائيو تي ڊيٽا جي نقصان سان واقعا. (منهنجي صورت ۾ اهو معاملو هو).

تازو ئي، يا ته ويب سائيٽ تي هڪ پاپ اپ نوٽيفڪيشن ۾ يا GitHub جي هڪ نيوز ليٽر ۾، هڪ نئون ٺهيل CI/CD نظر آيو، جنهن انهن عملن کي گهٽ ۾ گهٽ ڪوشش سان ڪرڻ جي اجازت ڏني.

جامد صفحو جنريٽر بابت

مان هن ذيلي مضمون تي خاص توجه نه ڏيندس، پر مان ڪجھ ٿورا شيئر ڪندس جيڪي مون کي ھيٺين جي چونڊ ۽ استعمال دوران آيو.

1) ھڪڙو جنريٽر چونڊيو جيڪو توھان جي پروگرامنگ ٻولي کي مناسب بڻائي، يا ھڪڙو جيڪو ممڪن طور تي صاف آھي. مون کي اهو خيال ان وقت آيو جڏهن مون پاڻ کي سائيٽ لاءِ ڪم ڪرڻ لاءِ ڪجهه ڪارڪردگي شامل ڪرڻي هئي، ان جي وڌيڪ استحڪام ۽ آٽوميشن لاءِ ڪڇ شامل ڪرڻي هئي. اضافي طور تي، اهو هڪ سٺو سبب آهي اضافي ڪارڪردگي پاڻ کي پلگ ان جي صورت ۾ لکڻ لاء؛

2) جيڪو جنريٽر چونڊڻ لاءِ هڪ ذاتي پسند آهي، پر اهو غور ڪرڻ جي قابل آهي ته GitHub صفحن جي ڪارڪردگي جي ڪم ۾ ابتدائي وسعت لاءِ، توهان کي پهريان انسٽال ڪرڻ گهرجي. Jekll. خوشقسمتيء سان، اهو توهان کي اجازت ڏئي ٿو ويب سائيٽ ٺاهي ذريعن کان سڌو سنئون مخزن ۾ (مان پنهنجي پسند سان ورجائيندس).

جنريٽر جو منهنجو انتخاب پهرين نقطي تي ٻڌل آهي. پيليڪن جيڪو پٿون ۾ لکيل آهي آساني سان Jekyll کي تبديل ڪيو ويو، جيڪو مون لاء غير ملڪي آهي (تقريبن هڪ سال تائين استعمال ڪيو). نتيجي طور، آرٽيڪل ٺاهڻ ۽ ايڊٽ ڪرڻ ۽ ويب سائيٽ تي ڪم ڪرڻ هڪ ٻولي ۾ اضافي تجربو ڏئي ٿو جيڪا مون لاءِ دلچسپ آهي.

__

مسئلو جي ترتيب

مکيه ڪم هڪ رسم الخط لکڻ هوندو (اصل ۾ هڪ ترتيب واري فائيل) جيڪو خودڪار طور تي هڪ خانگي مخزن مان جامد صفحا ٺاهيندو. حل ۾ هڪ مجازي ماحول جي ڪارڪردگي شامل هوندي. اسڪرپٽ خود تيار ڪيل صفحا شامل ڪندو عوامي مخزن ۾.

حل لاءِ اوزار

اوزار جيڪي اسان استعمال ڪنداسين مسئلو حل ڪرڻ لاء:

  • GitHub عمل؛
  • پٿون 3.7؛
  • پيليڪن؛
  • گيت؛
  • GitHub صفحا.

مسئلا حل ڪرڻ

تنهن ڪري، دستاويزن کان ٿورو واقف ٿيڻ کان پوء ۽ سمجھڻ کان پوء ڪئين اسڪرپٽ لکندا آهن ڪارناما، اهو واضح ٿي ويو ته هي ميکانيزم مڪمل طور تي اهو مسئلو حل ڪندو. لکڻ جي وقت، توهان کي هن فنڪشنلٽي کي استعمال ڪرڻ لاء رڪنيت حاصل ڪرڻ گهرجي. بيٽا ٽيسٽ لاءِ!

جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل
Github پاران نئين ڪارڪردگي جو تفصيل

ايڪشن اسڪرپٽ لکڻ شروع ٿئي ٿو فولڊر ۾ نالي واري فائل ٺاهي .github ۽ ان جو ذيلي فولڊر workflows. اهو يا ته دستي طور تي ٿي سگهي ٿو يا مخزن واري صفحي تي ايڪشن ٽيب ۾ ايڊيٽر کان.

جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل
خالي اسڪرپٽ فارم جو مثال

مان مختصر طور تي فارم تي تبصرو ڪندس

name: CI    # название скрипта: будет отображаться во вкладке Actions

on: [push]  # действие, по которому запускается данный скрипт

jobs:       # роботы, которые будут выполняться
  build:    # сборка, которая..

    runs-on: ubuntu-latest      # ..будет запущена на основе этого образа

    steps:              # шаги которые будут проделаны после запуска образа
    - uses: actions/checkout@v1     # переход в самую актуальную ветку
    - name: Run a one-line script   # имя работы номер 1
      run: echo Hello, world!       # суть работы номер 1 (bash-команда записана в одну строку)
    - name: Run a multi-line script   # имя работы номер 2
      run: |                    # суть работы номер 2 (многострочная)
        echo Add other actions to build,
        echo test, and deploy your project.

اچو ته ٽيمپليٽ جي بنياد تي پنهنجو پاڻ لکون:

0) توھان پڻ نالو ڇڏي سگھو ٿا "CI". اها ذوق جي ڳالهه آهي.

1) اڳيون، توهان کي عمل / ٽرگر کي چونڊڻ جي ضرورت آهي جيڪا اسڪرپٽ لانچ ڪندي، اسان جي صورت ۾ هي مخزن ڏانهن نئين عزم جو معمولي ڌڪ آهي.

on:
  push

2) اسان تصوير کي به ڇڏينداسين جنهن جي بنياد تي اسڪرپٽ لانچ ڪيو ويندو مثال طور، ڇو ته Ubuntu ضروري ڪارڪردگي سان بلڪل مطمئن آهي. ڏسي رهيو آهي ڊريسٽيڪٽ اهو واضح ٿئي ٿو ته هي ڪنهن به ضروري يا آسان تصوير ٿي سگهي ٿو (يا هڪ ڊاکر ڪنٽينر ان جي بنياد تي).

  build:
    runs-on: ubuntu-latest

3) قدمن ۾، اسان پهريون ڀيرو ماحول کي ترتيب ڏينداسين بنيادي ڪم لاء تيار ڪرڻ.

3.1) اسان کي گهربل شاخ ڏانھن وڃو (معياري قدم checkout):

- uses: actions/checkout@v1

3.2) پٿون انسٽال ڪريو:

    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7

3.3) اسان جي جنريٽر جي انحصار کي انسٽال ڪريو:

    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

3.4) هڪ ڊاريڪٽري ٺاهيو جنهن ۾ سائيٽ جا صفحا ٺاهيا ويندا:

   - name: Make output folder
      run: mkdir output

4) سائيٽ تي ڪم جي تسلسل لاءِ، يعني اڳئين تبديلين کي حذف نه ڪرڻ ۽ بغير ڪنهن تڪرار جي سائيٽ جي مخزن ۾ تبديليون شامل ڪرڻ لاءِ، ايندڙ قدم هر دفعي سائيٽ جي مخزن کي ڪلون ڪرڻ هوندو:

   - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output

هي قدم سسٽم متغير سڏيندو آهي:

  • متغير GITHUB_ACTOR GitHub پاڻ کي انسٽال ڪري ٿو، ۽ هي اهو صارف نالو آهي جنهن جي غلطي ذريعي هي اسڪرپٽ شروع ڪيو ويو؛
  • ڪشش secrets.ACCESS_TOKEN هي ٺهيل آهي Github جي انتظام لاءِ ٽوڪن، اسان ان کي ٽيب ۾ سيٽ ڪندي ان کي ماحولياتي متغير طور پاس ڪري سگھون ٿا Secrets اسان جي مخزن سيٽنگون. مهرباني ڪري نوٽ ڪريو ته پيدا ٿيڻ دوران ٽوڪن اسان کي هڪ ڀيرو فراهم ڪيو ويندو، ان کي وڌيڪ رسائي نه هوندي. ان سان گڏو گڏ راز جي شين جي قيمت.

5) اچو ته اڳتي وڌون اسان جا صفحا ٺاهي:

   - name: Generate static pages
      run: pelican content -o output -s publishconf.py

جنريٽر ڏانهن منتقل ڪيل پيرا ميٽر ڊائريڪٽري جا ذميوار آهن جتي ٺاهيل فائلون موڪليا ويندا (-o output(-s publishconf.py; توھان پڙھي سگھوٿا مقامي ترتيب کي الڳ ڪرڻ جي طريقي ۽ اشاعت لاءِ ترتيب پيليڪن دستاويزن ۾).

اچو ته توهان کي ياد ڏياريان ته اسان جي فولڊر ۾ ڇا آهي output سائيٽ جي مخزن کي اڳ ۾ ئي ڪلون ڪيو ويو آهي.

6) اچو ته سيٽ اپ ڪريون گٽ ۽ انڊيڪس اسان جون تبديل ٿيل فائلون:

    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output

هن نقطي تي، اڳ ۾ ئي ڄاڻايل متغير استعمال ڪيو ويو آهي ۽ ڪم ڪندڙ ڊاريڪٽري اشارو ڪيو ويو آهي جنهن ۾ هن قدم کان حڪم شروع ڪيو ويندو. ڪم ڪندڙ ڊاريڪٽري ڏانهن وڃڻ جو حڪم ٻي صورت ۾ نظر ايندو - cd output.

7) اچو ته هڪ عزم پيغام ٺاهي، تبديلين کي انجام ڏيو ۽ انهن کي مخزن ۾ ڌڪيو. تنهن ڪري اهو ڪم بيڪار نه آهي ۽ تنهن ڪري بش ۾ غلطي پيدا نه ٿئي (آئوٽ پٽ نتيجو نه آهي 0) - پهرين، اچو ته چيڪ ڪريون ته ڇا اهو ضروري آهي ته ڪجهه ڪرڻ ۽ زور ڏيڻ لاءِ. ائين ڪرڻ لاءِ اسان ڪمانڊ استعمال ڪريون ٿا git diff-index --quiet --cached HEAD -- جيڪو ٽرمينل ڏانهن آئوٽ ڪندو 0 جيڪڏهن سائيٽ جي پوئين ورزن جي نسبت ڪا به تبديلي نه آهي، ۽ 1 اهڙيون تبديليون آهن. پوء اسان هن حڪم جي نتيجي تي عمل ڪريون ٿا. اهڙيءَ طرح، اسڪرپٽ جي عمل جي باري ۾ معلومات ۾، اسان هن اسٽيج تي سائيٽ جي حالت بابت مفيد معلومات رڪارڊ ڪنداسين، بجاءِ خودڪار طور تي حادثو ۽ اسان کي اسڪرپٽ حادثي بابت رپورٽ موڪلڻ.

اسان انهن ڪمن کي پنهنجي ڊاريڪٽري ۾ تيار ڪيل صفحن سان پڻ ڪندا آهيون.

   - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          # Only if repo have changes
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
      working-directory: ./output

نتيجي ۾

نتيجي طور، اهڙي اسڪرپٽ توهان کي جامد صفحا ٺاهڻ بابت سوچڻ جي اجازت ڏئي ٿي. تبديلين کي شامل ڪرڻ سان سڌو سنئون خانگي مخزن ۾، ڇا ڪنهن به سسٽم مان گٽ سان ڪم ڪندي يا GitHub ويب انٽرفيس ذريعي فائل ٺاهيندي، عمل پاڻ سڀ ڪجهه ڪندا. جيڪڏهن اسڪرپٽ اڻڄاتل طور تي خراب ٿي وئي، هڪ نوٽيفڪيشن توهان جي اي ميل ڏانهن موڪلي ويندي.

مڪمل ڪوڊ

مان ڇڏيندس پنهنجو ڪم ڪندڙ ورزن، جنهن ۾ آخري قدم شامل ڪري ٿو نوٽيفڪيشن موڪلڻ ته هڪ ڪمٽ ڪيو ويو آهي مکيه مخزن ڏانهن.

مٿي بيان ڪيل راز استعمال ڪيا ويا آهن، جتي بوٽ ٽوڪن ۽ صارف جي ID جنهن کي پيغام موڪلڻ جي ضرورت آهي شامل ڪيو ويو آهي.

name: Push content to the user's GitHub pages repository

on:
  push

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python
      uses: actions/setup-python@v1
      with:
        python-version: 3.7
    - name: Install dependencies
      run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
    - name: Make output folder
      run: mkdir output
    - name: Clone master branch
      run: git clone "https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git" --branch master --single-branch ./output
    - name: Generate static pages
      run: pelican content -o output -s publishconf.py
    - name: Set git config and add changes
      run: |
          git config --global user.email "${GITHUB_ACTOR}@https://users.noreply.github.com/"
          git config --global user.name "${GITHUB_ACTOR}"
          git add --all
      working-directory: ./output
    - name: Push and send notification
      run: |
          COMMIT_MESSAGE="Update pages on $(date +'%Y-%m-%d %H:%M:%S')"
          git diff-index --quiet --cached HEAD -- && echo "No changes!" && exit 0 || echo $COMMIT_MESSAGE
          git commit -m "${COMMIT_MESSAGE}"
          git push https://${{ secrets.ACCESS_TOKEN }}@github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io.git master
          curl "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage?text=$COMMIT_MESSAGE %0ALook at ${GITHUB_ACTOR}.github.io %0ARepository%3A github.com/${GITHUB_ACTOR}/${GITHUB_ACTOR}.github.io&chat_id=${{ secrets.ADMIN_ID }}"
      working-directory: ./output

اسڪرين شاٽ

جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل
ھڪڙي رن جو نتيجو ڏيکاريل آھي ايڪشن ٽئب ۾ ماخذ مخزن جي

جامد جنريٽر ۽ GitHub صفحن تي سائيٽ لاءِ CI/CD طور GitHub عمل
اسڪرپٽ جي مڪمل ٿيڻ بابت بوٽ مان پيغام

ڪارآمد لنڪ

سمجھڻ وارا عمل
عملن جي نحو
محرڪن جي فهرست
مجازي ماحول جا اختيار
Github صفحا
جامد جنريٽر لسٽ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو