Merge pull request 'master' (#3) from tzietkiewicz/aitech-ium:master into master
Reviewed-on: AITech/aitech-ium#3
This commit is contained in:
commit
4ba3583063
@ -4,7 +4,14 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"# Ciągła integracja \n",
|
"# System ciągłej integracji na przykładzie Jenkins"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Ciągła integracja \n",
|
||||||
" - Jest to praktyka rozwoju projektów informatycznych polegająca na bardzo częstym włączaniu nowych zmian do głównej gałęzi (branch)\n",
|
" - Jest to praktyka rozwoju projektów informatycznych polegająca na bardzo częstym włączaniu nowych zmian do głównej gałęzi (branch)\n",
|
||||||
" - Dzięki jej stosowaniu nie dochodzi do konfliktów przy łączeniu (mergowaniu) gałęzi rozwojowej (feature branch) z główną (master)\n",
|
" - Dzięki jej stosowaniu nie dochodzi do konfliktów przy łączeniu (mergowaniu) gałęzi rozwojowej (feature branch) z główną (master)\n",
|
||||||
" - Żeby stosować tę technikę, zmiany muszą być za każdym razem przetestowane, we wspólnym środowisku, tak, żeby działały u innych deweloperów\n",
|
" - Żeby stosować tę technikę, zmiany muszą być za każdym razem przetestowane, we wspólnym środowisku, tak, żeby działały u innych deweloperów\n",
|
||||||
@ -66,7 +73,7 @@
|
|||||||
" - **Job, aka. Pipleine (Projekt)** - podstawowa jednostka organizacji pracy wykonywanej przez Jenkinsa. \n",
|
" - **Job, aka. Pipleine (Projekt)** - podstawowa jednostka organizacji pracy wykonywanej przez Jenkinsa. \n",
|
||||||
" - Posiada swoją konfigurację, która określa jakie polecenia będą wykonywane w jego ramach. \n",
|
" - Posiada swoją konfigurację, która określa jakie polecenia będą wykonywane w jego ramach. \n",
|
||||||
" - Jeden pipeline może być wykonany wiele razy, za każdym razem tworząc nowe *Zadanie* (*Build*). \n",
|
" - Jeden pipeline może być wykonany wiele razy, za każdym razem tworząc nowe *Zadanie* (*Build*). \n",
|
||||||
" Przykładowy pipeline: http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/\n",
|
" Przykładowy pipeline: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/\n",
|
||||||
"<img src=\"IUM_03/pipeline.jpg\"/>\n"
|
"<img src=\"IUM_03/pipeline.jpg\"/>\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -79,10 +86,10 @@
|
|||||||
" - Unstable <img style=\"height: 30px;\" src=\"IUM_03/yellow.png\"/>\n",
|
" - Unstable <img style=\"height: 30px;\" src=\"IUM_03/yellow.png\"/>\n",
|
||||||
" - Aborted <img style=\"height: 30px;\" src=\"IUM_03/aborted.png\"/>\n",
|
" - Aborted <img style=\"height: 30px;\" src=\"IUM_03/aborted.png\"/>\n",
|
||||||
" - Failed <img style=\"height: 30px;\" src=\"IUM_03/red.png\"/>\n",
|
" - Failed <img style=\"height: 30px;\" src=\"IUM_03/red.png\"/>\n",
|
||||||
" Np: http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/2/\n",
|
" Np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/2/\n",
|
||||||
" - Śledzenie wyników działania buildu jak i debugowanie ewentualnych problemów ułatwiają:\n",
|
" - Śledzenie wyników działania buildu jak i debugowanie ewentualnych problemów ułatwiają:\n",
|
||||||
" - Wyjście z konsoli [(Console Output)](http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/10/console) - tutaj widać logi wypisywane zarówno przez polecenia/funkcje Jenkinsowe jak i standardowe wyjście / wyjście błędów wykonywanych poleceń systemowych\n",
|
" - Wyjście z konsoli [(Console Output)](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/10/console) - tutaj widać logi wypisywane zarówno przez polecenia/funkcje Jenkinsowe jak i standardowe wyjście / wyjście błędów wykonywanych poleceń systemowych\n",
|
||||||
" - Workspace - to katalog roboczy, w którym uruchamiane są polecenia. Tutaj zostaje sklonowane repozytorium (jeśli je klonujemy), tu wywoływane będę polecenia systemowe. Można je przeglądać z poziomu przeglądarki, np. [tutaj](http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/execution/node/3/ws/)\n",
|
" - Workspace - to katalog roboczy, w którym uruchamiane są polecenia. Tutaj zostaje sklonowane repozytorium (jeśli je klonujemy), tu wywoływane będę polecenia systemowe. Można je przeglądać z poziomu przeglądarki, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/execution/node/3/ws/)\n",
|
||||||
" - Każdy uruchomiony build można zatrzymać (abort) co powoduje zaprzestanie jego wykonywania\n",
|
" - Każdy uruchomiony build można zatrzymać (abort) co powoduje zaprzestanie jego wykonywania\n",
|
||||||
" - Build zakończony można usunąć (np. jeśli przez przypadek wypisaliśmy na konsolę nasze hasło)"
|
" - Build zakończony można usunąć (np. jeśli przez przypadek wypisaliśmy na konsolę nasze hasło)"
|
||||||
]
|
]
|
||||||
@ -110,7 +117,8 @@
|
|||||||
"source": [
|
"source": [
|
||||||
"## Dokumentacja\n",
|
"## Dokumentacja\n",
|
||||||
"- https://www.jenkins.io/doc/book/pipeline/\n",
|
"- https://www.jenkins.io/doc/book/pipeline/\n",
|
||||||
"- \"Pipeline syntax\" na stronie każdego projektu, np: http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/"
|
"- \"Pipeline syntax\" na stronie każdego projektu, np: https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/\n",
|
||||||
|
"- Znaki zapytania <img style=\"height: 16px;\" src=\"IUM_03/help.png\"/> (W konfiguracji joba oraz w \"Pipeline Syntax\")"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -140,7 +148,7 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"#### 1. Zaloguj się\n",
|
"#### 1. Zaloguj się\n",
|
||||||
" - zaloguj się na http://tzietkiewicz.vm.wmi.amu.edu.pl:8080 za pomocą konta wydziałowego (jak w laboratoriach WMI)"
|
" - zaloguj się na https://tzietkiewicz.vm.wmi.amu.edu.pl:8080 za pomocą konta wydziałowego (jak w laboratoriach WMI)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -169,7 +177,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
" - Pierwszy z nich daje większe możliwości, drugi jest łatwiejszy, lepiej udokumentowany, ale ma mniejszą siłę ekpresji.\n",
|
" - Pierwszy z nich daje większe możliwości, drugi jest łatwiejszy, lepiej udokumentowany, ale ma mniejszą siłę ekpresji.\n",
|
||||||
"\n",
|
"\n",
|
||||||
" - Fragmenty kodu można również generować przy pomocy kreatora, dostępnego pod linkiem [Pipeline syntax](http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/) na stronie każdego projektu. Jest to bardzo przydatna funkcjonalność, nie tylko dla początkujących użytkowników\n",
|
" - Fragmenty kodu można również generować przy pomocy kreatora, dostępnego pod linkiem [Pipeline syntax](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/pipeline-syntax/) na stronie każdego projektu. Jest to bardzo przydatna funkcjonalność, nie tylko dla początkujących użytkowników\n",
|
||||||
"\n",
|
"\n",
|
||||||
" - Jenkinsfile może być wprowadzony bezpośrednio z poziomu przeglądarki, albo pobrany z repozytorium.\n",
|
" - Jenkinsfile może być wprowadzony bezpośrednio z poziomu przeglądarki, albo pobrany z repozytorium.\n",
|
||||||
"\n",
|
"\n",
|
||||||
@ -183,7 +191,7 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"Przykładowy declarative Pipeline (http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/):\n",
|
"Przykładowy declarative Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world/):\n",
|
||||||
"\n",
|
"\n",
|
||||||
"```groovy\n",
|
"```groovy\n",
|
||||||
"pipeline {\n",
|
"pipeline {\n",
|
||||||
@ -222,7 +230,7 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"Przykładowy scripted Pipeline (http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/):\n",
|
"Przykładowy scripted Pipeline (https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/):\n",
|
||||||
"\n",
|
"\n",
|
||||||
"```groovy\n",
|
"```groovy\n",
|
||||||
"node {\n",
|
"node {\n",
|
||||||
@ -305,12 +313,12 @@
|
|||||||
"export KAGGLE_USERNAME=datadinosaur\n",
|
"export KAGGLE_USERNAME=datadinosaur\n",
|
||||||
"export KAGGLE_KEY=xxxxxxxxxxxxxx\n",
|
"export KAGGLE_KEY=xxxxxxxxxxxxxx\n",
|
||||||
" ```\n",
|
" ```\n",
|
||||||
" - Jenkins natomiast umożliwia utworzenie parametru typu password, którego wartość nie jest nigdzie zapisywana (wartości pozostałych parametrów są zapisywane w zakładce \"Parameters\" każdego build-a, np. [tutaj](http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/parameters/)\n",
|
" - Jenkins natomiast umożliwia utworzenie parametru typu password, którego wartość nie jest nigdzie zapisywana (wartości pozostałych parametrów są zapisywane w zakładce \"Parameters\" każdego build-a, np. [tutaj](https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/hello-world-scripted/1/parameters/)\n",
|
||||||
" - konstukcja `withEnv` w Jenkinsfile, pozwala wywołać wszystkie otoczone nią polecenia z wyeksportowanymi wartościami zmiennych systemowych. Pozwala to np. przekazać wartości parametrów zadania Jenkinsowego do shella (poleceń wywoływanych z `sh`). \n",
|
" - konstukcja `withEnv` w Jenkinsfile, pozwala wywołać wszystkie otoczone nią polecenia z wyeksportowanymi wartościami zmiennych systemowych. Pozwala to np. przekazać wartości parametrów zadania Jenkinsowego do shella (poleceń wywoływanych z `sh`). \n",
|
||||||
" - ten sam rezultat co przy wykorzystaniu `withEnv` można by osiągnąć wywołując: `sh \"KAGGLE_USERNAME=${params.KAGGLE_USERNAME} KAGGLE_KEY=${params.KAGGLE_KEY} kaggle datasets list`, ale ten pierwszy wydahe się bardziej elegancki\n",
|
" - ten sam rezultat co przy wykorzystaniu `withEnv` można by osiągnąć wywołując: `sh \"KAGGLE_USERNAME=${params.KAGGLE_USERNAME} KAGGLE_KEY=${params.KAGGLE_KEY} kaggle datasets list`, ale ten pierwszy wydahe się bardziej elegancki\n",
|
||||||
" - Poniżej przykładowy projekt, który pokazuje jak wywołać Kaggle CLI używając hasła podanego w parametrach zadania:\n",
|
" - Poniżej przykładowy projekt, który pokazuje jak wywołać Kaggle CLI używając hasła podanego w parametrach zadania:\n",
|
||||||
" \n",
|
" \n",
|
||||||
"http://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/kaggle-CLI-example/\n",
|
"https://tzietkiewicz.vm.wmi.amu.edu.pl:8080/job/kaggle-CLI-example/\n",
|
||||||
"```groovy\n",
|
"```groovy\n",
|
||||||
"node {\n",
|
"node {\n",
|
||||||
" stage('Preparation') { \n",
|
" stage('Preparation') { \n",
|
||||||
@ -387,13 +395,6 @@
|
|||||||
" - Skrypt powinien zapisywać wyniki swojego działania do pliku\n",
|
" - Skrypt powinien zapisywać wyniki swojego działania do pliku\n",
|
||||||
" 4. Plik powstały w kroku 3. należy archiwizować (krok \"archiveArtifacts\")"
|
" 4. Plik powstały w kroku 3. należy archiwizować (krok \"archiveArtifacts\")"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": []
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
BIN
IUM_03/help.png
Normal file
BIN
IUM_03/help.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 763 B |
Loading…
Reference in New Issue
Block a user