స్టాటిక్ జనరేటర్ మరియు 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 పేజీల కార్యాచరణ యొక్క పనిలో ప్రారంభ ఇమ్మర్షన్ కోసం, మీరు మొదట ఇన్‌స్టాల్ చేయాలి జెకిల్. అదృష్టవశాత్తూ, ఇది నేరుగా రిపోజిటరీలో మూలాల నుండి వెబ్‌సైట్‌ను రూపొందించడానికి మిమ్మల్ని అనుమతిస్తుంది (నేను దీన్ని నా ఎంపికతో పునరావృతం చేస్తాను).

జెనరేటర్ యొక్క నా ఎంపిక మొదటి పాయింట్ మీద ఆధారపడి ఉంటుంది. పెలికాన్ పైథాన్‌లో వ్రాయబడినది జెకిల్‌ను సులభంగా భర్తీ చేసింది, ఇది నాకు విదేశీయమైనది (దాదాపు ఒక సంవత్సరం పాటు ఉపయోగించారు). ఫలితంగా, కథనాలను సృష్టించడం మరియు సవరించడం మరియు వెబ్‌సైట్‌లో పని చేయడం కూడా నాకు ఆసక్తికరమైన భాషలో అదనపు అనుభవాన్ని ఇస్తుంది.

__

సమస్య యొక్క ప్రకటన

ప్రైవేట్ రిపోజిటరీ నుండి స్టాటిక్ పేజీలను స్వయంచాలకంగా రూపొందించే స్క్రిప్ట్‌ను (వాస్తవానికి కాన్ఫిగరేషన్ ఫైల్) వ్రాయడం ప్రధాన పని. పరిష్కారం వర్చువల్ పర్యావరణం యొక్క కార్యాచరణను కలిగి ఉంటుంది. స్క్రిప్ట్ పబ్లిక్ రిపోజిటరీకి రెడీమేడ్ పేజీలను జోడిస్తుంది.

పరిష్కారం కోసం సాధనాలు

సమస్యను పరిష్కరించడానికి మేము ఉపయోగించే సాధనాలు:

  • GitHub చర్యలు;
  • పైథాన్ 3.7;
  • పెలికాన్;
  • Git;
  • 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) ఉబుంటు అవసరమైన కార్యాచరణతో చాలా సంతృప్తి చెందినందున, స్క్రిప్ట్‌ని ఉదాహరణగా ప్రారంభించే చిత్రాన్ని కూడా మేము వదిలివేస్తాము. చూస్తున్నారు ఉపకరణాలు ఇది ఏదైనా అవసరమైన లేదా అనుకూలమైన చిత్రం (లేదా దాని ఆధారంగా ఒక డాకర్ కంటైనర్) అని స్పష్టమవుతుంది.

  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) మనం మార్చిన ఫైల్‌లను git మరియు ఇండెక్స్ సెటప్ చేద్దాం:

    - 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

ఫలితంగా

ఫలితంగా, అటువంటి స్క్రిప్ట్ స్టాటిక్ పేజీలను సృష్టించడం గురించి ఆలోచించకుండా మిమ్మల్ని అనుమతిస్తుంది. ప్రైవేట్ రిపోజిటరీకి నేరుగా మార్పులను జోడించడం ద్వారా, ఏదైనా సిస్టమ్‌లో నుండి gitతో పని చేయడం ద్వారా లేదా 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 చర్యలు
స్క్రిప్ట్ పూర్తయినట్లు బోట్ నుండి సందేశం

ఉపయోగకరమైన లింకులు

అవగాహన చర్యలు
చర్యల సింటాక్స్
ట్రిగ్గర్‌ల జాబితా
వర్చువల్ పరిసరాల కోసం ఎంపికలు
గితుబ్ పేజీలు
స్టాటిక్ జనరేటర్ జాబితా

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి