2021-04-09 08:42:54 +0200 +0200

Prskavčí blog

Dec 20, 2016

Jenkins Declarative Pipelines

Dnes Jenkins zveřejnil betu nového formátu pro popis Continues Delivery Pipelines.

Pipeline se serie kroků, které vám dovolí orchestovat práci, kterou potřebujete k buildu, testovaní a nasazení aplikace. Pipelines jsou definovány v souboru Jenkinsfile a je uložen v kořenovém adresáři repozitáře projektu.

Stávájící formát pipelines je psaný v Groovy DSL a vypadá takto:

node {
   stage('Preparation') {
      git 'https://github.com/abtris/bee.git'
      poll: true

   }
   stage('Deps') {
       env.PACKAGE="github.com/abtris/bee"
       env.GOPATH="/Users/abtris/go"
       env.GOROOT="/usr/local/opt/go/libexec"
       sh 'glide --no-color install'
       sh 'mkdir -p release'
   }
   stage('Test') {
       sh 'make xunit'
   }
   stage('Build') {
         parallel (
            linux64: { sh "GOOS=linux GOARCH=amd64 go build -o release/bee-linux-amd64 ${PACKAGE}" },
            linux32: { sh "GOOS=linux GOARCH=386 go build -o release/bee-linux-386 ${PACKAGE}" },
            mac64: { sh "GOOS=darwin GOARCH=amd64 go build -o release/bee-darwin-amd64 ${PACKAGE}" },
            win64: { sh "GOOS=windows GOARCH=amd64 go build -o release/bee-windows-amd64 ${PACKAGE}" }
          )
   }
   stage('Results') {
      archive 'release/*'
      junit 'tests.xml'
   }
}

a nový formát zjednodušuje tento zápis i pro ty kteří Groovy nevládnou a je více deklarativní s podporou pro editor, který Jenkins Blue Ocean tým vyvíjí.

Tady je přepsaný příklad ze shora do nového formátu.

pipeline {
  agent any
  environment {
    PACKAGE="github.com/abtris/bee"
    GOPATH="/Users/abtris/go"
    GOROOT="/usr/local/opt/go/libexec"
  }
  stages {
     stage('Preparation') {
        steps {
          git 'https://github.com/abtris/bee.git'
        }
     }
     stage('Deps') {
        steps {
           sh 'glide --no-color install'
           sh 'mkdir -p release'
       }
     }
     stage('Test') {
        steps {
         sh 'make xunit'
        }
     }
     stage('Build') {
        steps {
           parallel (
              linux64: { sh "GOOS=linux GOARCH=amd64 go build -o release/bee-linux-amd64 ${PACKAGE}" },
              linux32: { sh "GOOS=linux GOARCH=386 go build -o release/bee-linux-386 ${PACKAGE}" },
              mac64: { sh "GOOS=darwin GOARCH=amd64 go build -o release/bee-darwin-amd64 ${PACKAGE}" },
              win64: { sh "GOOS=windows GOARCH=amd64 go build -o release/bee-windows-amd64 ${PACKAGE}" }
            )
        }
     }
     stage('Results') {
        steps {
          archive 'release/*'
          junit 'tests.xml'
        }
     }
  }
}

Celou syntaxi si můžete prohlédnout v dokumentaci.

Hlavní rozdíl je v tom, že přidali další bloky jako je hlavní pipelines a je potřeba deklarovat vždy agenta, který může být v různém formátu. Vyměnilo nazvosloví a z node je agent.

Build můžete pustit jednoduše například v Dockeru pomocí: agent docker:'node:6.3' nebo pokud nechcete to řešit tak můžete dát agent any jako v příkladu, to se hodí například pro lokální testování a není to rozhodně vhodné pro nějaké větší nasazení, kdy potřebujete orchestrovat jednotlivé agenty.

Deklarace environment na začátku zpřehledňuje celý zápis a každá stage má teď steps, které jsou nové. Přidali sekci post, která má kroky always, success a failure pro ošetření konce buildu a poslání notifikací. Nechybí ani options, parameters a triggers, kde nastavíte co potřebujete.

I když celý tento projekt v beta fázi, přijde mi to jako krok správným směrem a spolu s čím dál lepším Blue Ocean to bude příští rok hlavní novinka v Jenkinsu.