Benutzer-Werkzeuge

Webseiten-Werkzeuge


programmieren:gitlab

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
programmieren:gitlab [2022/01/10 19:21]
root [Troubleshooting/Howto]
programmieren:gitlab [2022/03/15 14:24] (aktuell)
root [Troubleshooting/Howto]
Zeile 59: Zeile 59:
  
  
-<code>+<sxh yaml>
 variables: variables:
     GIT_DEPTH: 0              GIT_DEPTH: 0         
Zeile 69: Zeile 69:
   - static_analyses   - static_analyses
  
-pylint:+pylint_commit:
     stage: static_analyses     stage: static_analyses
     before_script:     before_script:
Zeile 76: Zeile 76:
     script:     script:
         - echo "$CI_COMMIT_SHA"         - echo "$CI_COMMIT_SHA"
 +        - echo "$CI_COMMIT_BEFORE_SHA"
 +        - last_ret=0
 +        - pythonfiles=$(git diff --name-only $CI_COMMIT_SHA $CI_COMMIT_BEFORE_SHA | grep -E '*.py$') || last_ret=$?
 +        - >
 +            if [[ $last_ret -eq 0 ]]; then echo "linting '$pythonfiles'"; pylint --max-line-length=120 --output-format=text
 +            --disable=import-error  --reports=n --ignore='sphinx_conf.py,common_types_pb2_grpc.py,common_types_pb.py,
 +            phone_system_service_pb2_grpc.py,phone_system_service_pb2.py,qa_service_pb2_grpc.py,qa_service_pb2.py,
 +            settings_service_pb2_grpc.py,settings_service_pb2.py' $pythonfiles; else echo "Skipped, no python 
 +            files to lint"; fi
 +    rules:
 +            - if: $CI_PIPELINE_SOURCE == "push"
 +
 +
 +pylint_merge:
 +    stage: static_analyses
 +    before_script:
 +        - echo "Installing pylint"
 +        - pip3 install pylint
 +    script:
 +        - echo "$CI_COMMIT_SHA"
 +        - echo "$CI_COMMIT_BEFORE_SHA"
         - last_ret=0         - last_ret=0
         - pythonfiles=$(git diff --name-only origin/$CI_DEFAULT_BRANCH... | grep -E '*.py$') || last_ret=$?         - pythonfiles=$(git diff --name-only origin/$CI_DEFAULT_BRANCH... | grep -E '*.py$') || last_ret=$?
Zeile 84: Zeile 105:
             settings_service_pb2_grpc.py,settings_service_pb2.py' $pythonfiles; else echo "Skipped, no python              settings_service_pb2_grpc.py,settings_service_pb2.py' $pythonfiles; else echo "Skipped, no python 
             files to lint"; fi             files to lint"; fi
-</code>+    rules: 
 +            - if: $CI_PIPELINE_SOURCE == "merge_request_event" 
 + 
 +</sxh>
  
   * Variables definiert globale Variablen   * Variables definiert globale Variablen
Zeile 100: Zeile 124:
       * bestehen aus mehreren Jobs       * bestehen aus mehreren Jobs
       * Jobs können parallel verarbeitet werden       * Jobs können parallel verarbeitet werden
-  * pylint -> Job+  * pylint_commit -> Job
       * Jobs können beliebige Namen haben       * Jobs können beliebige Namen haben
       * stage: Besagt von welchem Stage der Job ist       * stage: Besagt von welchem Stage der Job ist
Zeile 109: Zeile 133:
           * Liste           * Liste
           * jeder Eintrag ist ein Shell-Befehl           * jeder Eintrag ist ein Shell-Befehl
 +              * Variablen vorhergehender Befehle stehen in nachfolgenden Befehlen zur Verfügung
               * wenn ein Befehl fehlschlägt (Return-Code != 0) schlägt der ganze Job fehl               * wenn ein Befehl fehlschlägt (Return-Code != 0) schlägt der ganze Job fehl
                   * es werden keine weiteren Stages ausgeführt                   * es werden keine weiteren Stages ausgeführt
                   * es werden keine weiteren Befehle ausgeführt                   * es werden keine weiteren Befehle ausgeführt
 +      * rules -> Bedingungen unter denen der Job überhaupt ausgeführt wird
 +          * if -> Definiert eine Bedingung
 +              * Die Variable CI_PIPELINE_SOURCE definiert was die Pipeline ausgelöst hat
 +                  * u.a. relevant wenn Jobs für Merges ausgeführt werden sollen -> das ist normalerweise nicht der Fall, sondern nur bei Commits
 +                  * "push" -> ein Commit
 +                  * "merge_request_event" -> ein Merge-Request
 +  * pylint_merge -> ein weiterer Job
 +      * dieser wird nur für Merge-Requests ausgeführt -> siehe rules-Sektion
 +      * ansonsten ist es weitestgehend gleich zur vorhergehenden Job-Sektion
  
  
Zeile 157: Zeile 191:
   * eigentlich alles wie in vorhergehendem Beispiel   * eigentlich alles wie in vorhergehendem Beispiel
   * $CI_DEFAULT_BRANCH -> Variable die den Namen des Default-Branches enthält (aber ohne "origin" -> das muss ggf. fix vorangestellt werden)   * $CI_DEFAULT_BRANCH -> Variable die den Namen des Default-Branches enthält (aber ohne "origin" -> das muss ggf. fix vorangestellt werden)
 +</WRAP> |
 +|Job nur ausführen wenn es ein merge-Request ist|Per Default laufen Jobs nur bei Commits, nicht vor Merge-Requests. \\ <sxh YAML>
 +pylint_commit:
 +   …some stuff
 +   rules:
 +            - if: $CI_PIPELINE_SOURCE == "push"
 +
 +pylint_merge:
 +   …some stuff
 +   rules:
 +            - if: $CI_PIPELINE_SOURCE == "merge_request_event"
 +</sxh> <WRAP>
 +  * In obigem Beispiel sind 2 Jobs definiert
 +      * pylint_commit läuft nur für Commits ("pushs")
 +      * pylint_merge läuft nur wenn es sich um einen  Merge-Request handelt
 +  * rules -> definieren Regeln die definieren wann ein Job ausgeführt wird
 +      * if -> definiert eine Regel
 +      * "$CI_PIPELINE_SOURCE" -> Variable enthält was die Pipeline angestoßen hat (welches Event)
 +          * "push" -> Commit
 +          * "merge_request_event" -> Merge Request
 +
 +</WRAP> |
 +|pylint integrieren| <sxh YAML>
 + - pylint --rcfile=.pylintrc $pythonfiles;
 +</sxh> <WRAP>
 +  * das Kommando wird im Root des Projektes (des git-Projektes) ausgeführt ".pylintrc" ist damit im Root des Repositories
 +      * man kann die .pylintrc also einfach ein- und auschecken wie jede andere Datei auch
 +  * $pythonfiles ist die Liste von Dateien die gelinted werden sollen
 </WRAP> | </WRAP> |
 ===== Auto DevOps ===== ===== Auto DevOps =====
programmieren/gitlab.1641838860.txt.gz · Zuletzt geändert: 2022/01/10 19:21 von root