Jenkins - wprowadzenie

Piotr Woszczyk @ 2019

Spis treści

  • Ogólne informacje i podstawowe pojęcia
  • Zastosowania
  • Sposoby definicji projektów
  • Sposoby uruchamiania projektów
  • Użyteczne rozszerzenia

Ogólne informacje

  • Darmowe (open-source) narzędzie do automatyzacji procesów
  • Napisany w Java i udostępniony w 2011
  • Rozszerzalny za pomocą pluginów
  • Udostępnia GUI za pomocą przeglądarek internetowych

Podstawowe pojęcia

  • Project / Job - opis czynności jakie mają być wykonywane przez Jenkins'a
  • Build - pojedyńcze wykonanie Project
  • Artifact - trwały efekt działania Build'a, np. skompilowana aplikacja
  • Workspace - folder wydzielony przez instancje Jenkinsa na potrzeby Build'a

Zastosowania

  • Testowanie apikacji
  • Budowanie aplikacji
  • Wykonywanie czynności serwisowych
  • Audytowanie aplikacji
  • Wysyłanie powiadomień
  • Analizowanie logów
  • inne

Rodzaje projektów

Rodzaje projektów: Ogólny

Rodzaje projektów: Pipeline

pipeline {
    agent {
        dockerfile {
            filename 'environment/local/php-fpm/Dockerfile'
            dir '.'
            args '-v $HOME/.composer:/tmp/.composer'
        }
    }

    environment {
        MYSQL_HOST = 'localhost'
        MYSQL_DATABASE = 'app'
        MYSQL_USER = 'root'
        MYSQL_PASSWORD = '***'
        REDIS_HOST = 'localhost'
        REDIS_PORT = '6379'
        COMPOSER_HOME = '/tmp/.composer'
    }

    stages {
        stage('Notify Stash') {
            steps {
                step([$class: 'StashNotifier'])
            }
        }
        stage('Preparation') {
            steps {
                dir('code') {
                    sh 'composer install --no-scripts --no-progress --no-suggest'
                }
            }
        }
        stage('Tests') {
            steps {
                dir('code') {
                    sh 'bin/linter --lint src'
                    sh 'bin/console lint:yaml config --parse-tags'
                    sh 'bin/console lint:twig templates'
                    sh 'vendor/bin/php-cs-fixer fix --dry-run'
                    sh 'vendor/bin/phpmd src --exclude src/Entity,src/Migrations,src/DataFixtures --suffixes php text cleancode,codesize,controversial,design,unusedcode'
                    sh 'bin/console doctrine:schema:validate --skip-sync'
                }
            }
        }
    }
    post {
        always {
            step([$class: 'StashNotifier'])
            step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])])
            deleteDir()
        }
    }
}

Sposoby uruchamiania

  • Po zakończeniu innego job'a
  • Cyklicznie
  • Na podstawie repozytorium
  • Poprzez webhook

Rozszerzenia

  • Bitbucket Server Notifier
  • Email Extension Plugin
  • Publish Over FTP

  • Publish Over SSH

  • Workspace Cleanup Plugin

Jenkins - wprowadzenie

By Piotr Woszczyk

Jenkins - wprowadzenie

  • 42