Post on 14-Apr-2017
Tech Space #1DevOps
2004 1200 1 000 000
Start projektu Liczba pluginów Użytkowników naświecie
Tech Space #1 01/12/2016 2
Jenkins najważniejsze narzędzie w projekcie, które
ewoluuje razem z nimArtur Senk
Senior WebOps Engineer / Kainos Evolve14/11/2016
Jenkins
• Java -‐> cross-‐platform
• Automation server (budowanie, testowanie, CI/CD)
• Open source (MIT License)
• Fork Hudsona
Ogólne informacje
Tech Space #1 01/12/2016 4
JenkinsLiczba instalacji (ponad 130k miesięcznie)
01/12/2016 5Tech Space #1
Jenkins
• SSL (np. nginx z przodu jako reverse proxy)
•
Podstawy konfiguracji i zabezpieczeń
Tech Space #1 01/12/2016 6
JenkinsRole Strategy Plugin #1
Tech Space #1 01/12/2016 7
JenkinsRole Strategy Plugin #2
Tech Space #1 01/12/2016 8
Jenkins
• Role globalne nadpisują projektowe!
• https://wiki.jenkins-‐ci.org/display/JENKINS/Role+Strategy+Plugin
Role Strategy Plugin #3
Tech Space #1 01/12/2016 9
Jenkins
• IP/CIDR dla odziału firmy• IP/CIDR dla dostępu przez VPN• CIDR dla integracji z GitHubem: 192.30.252.0/22
• Port 443 albo 80 i 443 + wymuszenie przekierowania na nginx
Firewall (Security Groups) whitelisting
Tech Space #1 01/12/2016 10
JenkinsChecking the firewall logs
Tech Space #1 01/12/2016 11
http://devopsreactions.tumblr.com
Jenkins
• Warto (Pipeline as Code, Pipeline Stage View)
• Kompatybilność wsteczna (naprawdę działa)
• Najpierw backup lub obraz
Migracja 1.X -‐> 2.X
Tech Space #1 01/12/2016 12
JenkinsProces #1
01/12/2016 13Tech Space #1
JenkinsProces #2
01/12/2016 14Tech Space #1
Jenkins
• https://wiki.jenkins-‐ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
• Użytkownik GitHub z dostępem typu write do każdego repo, podany w głównejkonfiguracji Jenkinsa
• Projekt w Jenkinsie, mogący pobierać kod z GitHuba
• Refspec: +refs/pull/*:refs/remotes/origin/pr/*
• Branch specifier: ${sha1}
• Webhooki po stronie GitHuba
Integracja z GitHubem
Tech Space #1 01/12/2016 15
Jenkins
• Pozwolenie na kopiowanie artefaktów
• Wskazanie skąd pobrać artefakt
• Joby parametryzowane
• Warunkowe wyzwalanie kolejnych jobów
Integracja pomiędzy jobami
Tech Space #1 01/12/2016 16
Jenkins
• Skrypty Gradle
• JUnit
• Docker
Uruchamianie budowania, testów i innych tasków
Tech Space #1 01/12/2016 17
Jenkins
• Repozytorium YUM i Maven
• Skrypt Gradle podpisuje i wysyła zbudowane RPMki
• Na docelowych maszynach dodanie kolejnego repozytorium YUM oraz yum install
Sonatype Nexus
Tech Space #1 01/12/2016 18
Jenkins
• Narzędzie do zarządzania konfiguracją napisane w Pythonie, 2011
• Używa ZeroMQ do komunikacji mastera z agentami (TCP, C++, AES)
• Bardzo elastyczne: – Master + agenty– Tylko agent (masterless)– Tylko serwer (Salt SSH)– Podejście imperatywne i deklaratywne
Saltstack
Tech Space #1 01/12/2016 19
Jenkins
• SaltMaster: salt-‐master + salt-‐api + kilka linijek w configu + użytkownik na maszynie
• Miniony (agenty zainstalowane na docelowych serwerach)
• https://wiki.jenkins-‐ci.org/display/JENKINS/saltstack-‐plugin
Integracja z SaltMasterem
Tech Space #1 01/12/2016 20
Jenkins
• Joby mogące tworzyć i usuwać tenanty na konkretnych środowiskach
• Kontrola dostępu
• Wszystko jest w jednym miejscu
• Jeszcze więcej pipelinów (profit!)
Testowanie aplikacji multi-‐tenant
Tech Space #1 01/12/2016 21
Jenkins
• Sprawdzenie stanu aplikacji po deploy’u jednego komponentu
• Formuła Saltstack/skrypt bash
• Każdy zespół pracuje nad własnym smoke-‐testem:– Utwórz tenanta z odpowiednią konfiguracją– Zrób testy– Usuń tenanta
Smoke tests
Tech Space #1 01/12/2016 22
JenkinsEwolucja projektu
Tech Space #1 01/12/2016 23
• Od jednego Opsa do dziesięciu
• Wybrany dostawca chmury -‐ AWS
• Kilkukrotny wzrost liczby devów
• Nowe podejście do zarządzania serwerami – immutable
• Kod Saltstacka przepisany w nowej konwencji (podział na role)
• W trakcie pełnej adopcji Jenkinsa 2.0 (DSL, Groovy, użycie nowych pipeline’ów)
• Kilka Jenkinsów zamiast jednego
JenkinsEwolucja pipeline’ów
Tech Space #1 01/12/2016 24
• Znika Saltmaster
• Kod Saltowy używany tylko w czasie budowania obrazów (AMI) Packerem
• Terraform zarządzający całą infrastrukturą
• Blue/green deployment
JenkinsTip #1 – H jak Hash
Tech Space #1 01/12/2016 25
• */15 * * * * (co 15 minut: :00, :15, :30, :45)
• H/15 * * * * (co 15 minut, np: :07, :22, :37, :52)
Jenkins
• https://wiki.jenkins-‐ci.org/display/JENKINS/Parameterized+Remote+Trigger+Plugin
Tip #2 – Jenkins do Jenkinsa
Tech Space #1 01/12/2016 26
JenkinsTip #2 – Jenkins do Jenkinsa cd.
Tech Space #1 01/12/2016 27
JenkinsTip #3 – podgląd zmian w konfiguracjach
Tech Space #1 01/12/2016 28
• https://wiki.jenkins-‐ci.org/display/JENKINS/JobConfigHistory+Plugin
JenkinsTip #4 – Monitor na monitorze
Tech Space #1 01/12/2016 29
• https://wiki.jenkins-‐ci.org/display/JENKINS/Build+Monitor+Plugin
JenkinsTip #5 – Bruce i Chuck
Tech Space #1 01/12/2016 30
Jenkins
Tech Space #1 01/12/2016 31
CI running the automated tests
http://devopsreactions.tumblr.com
Pytania?
DZIĘKI!
Tech Space #1DevOps