cd existing_repo git remote rename origin old-origin git remote add origin https://gitlab.com/n1843/test1.git git push -u origin --all git push -u origin --tags
git push --set-upstream origin <Branchname>
variables: GIT_DEPTH: 0 default: image: snom/sina-portal:2 stages: - static_analyses pylint_commit: stage: static_analyses before_script: - echo "Installing pylint" - pip3 install pylint script: - 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 - pythonfiles=$(git diff --name-only origin/$CI_DEFAULT_BRANCH... | 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 == "merge_request_event"
Problem/Howto | Beschreibung |
---|---|
git --diff schlägt fehl | gitlab macht eine „shallow copy“, das heißt es checkt nicht die gesamte git-History aus, sondern nur die letzten x Commits. Man kann in der globalen Sektion „Variables“ die Variable „GIT_DEPTH“ auf 0 setzen |
Befehl soll fehlschlagen dürfen ohne das der Job fehlschlägt | Es muss nur vermieden werden das der gesamte Befehl (also ein Listeneintrag) etwas anderes als 0 zurück gibt. pythonfiles=$(git diff --name-only $CI_COMMIT_SHA $CI_COMMIT_BEFORE_SHA | grep -E '*.py$') || last_ret=$? In obigem Beispiel wird ein git –diff gemacht, wenn das nicht mit 0 zurückkommt wird der Teil hinter „||“ ausgeführt - der Return-Wert in einer Variablen gespeichert. Da der zweite Befehl (das Speichern in einer Variable) immer erfolgreich ist wird immer 0 zurückgegeben für diesen Befehl. Code 1 || Code 2
|
Befehl der mehrere Zeilen umfasst | Yaml interpretiert jeden Zeilenumbruch per Default als neues Element (zum Beispiel als neuen Listeneintrag). liste: - > Zeile1 Zeile2 Zeile3 Alle Zeilen werden als eine Zeile betrachtet, die Zeilenumbrüche werden als Leerzeichen interpretiert.
|
Verifiziere nur Dateien die sich zum vorhergehenden Commit/zum Master-Branch geändert haben | Für statische Analyse macht es in der Regel nur Sinn die Dateien zu prüfen die sich gegenüber dem vorhergehenden Commit oder wenn es sich um einen Merge handelt gegenüber Master geändert haben und nicht alle Dateien. script: - pythonfiles=$(git diff --name-only $CI_COMMIT_SHA $CI_COMMIT_BEFORE_SHA | grep -E '*.py$') || last_ret=$?
git diff --name-only $CI_COMMIT_SHA $CI_COMMIT_BEFORE_SHA
script: - pythonfiles=$(git diff --name-only origin/$CI_DEFAULT_BRANCH... | grep -E '*.py$') || last_ret=$?
|
Job nur ausführen wenn es ein merge-Request ist | Per Default laufen Jobs nur bei Commits, nicht vor Merge-Requests. pylint_commit: …some stuff rules: - if: $CI_PIPELINE_SOURCE == "push" pylint_merge: …some stuff rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
pylint integrieren | - pylint --rcfile=.pylintrc $pythonfiles;
|
Abkürzung | Begriff | Beschreibung |
---|---|---|
CI | Continous Integration | Jedes Commit wird automatisch (mit Hilfe von Scripten und Tools) gebaut (oder teilweise gebaut) und getestet |
CD | Continous Delivery | Automatisches Ausrollen der Software, allerdings wird es manuell ausgelöst |
CD | Continous Deployment | Es wird automatisch ausgerollt auf Produktivsysteme |