Czy istnieje narzędzie umożliwiające sprawdzanie poprawności Jenkinsfiles online?


13

W tej chwili edytuję plik Jenkins, a następnie uruchamiam go, chyba że Jenkins zgłosi problem. Takie podejście kosztuje dużo czasu. Wolę sprawdzić poprawność składni przed zatwierdzeniem pliku Jenkins. Czy istnieje narzędzie, które rozwiązuje ten problem?

W gitlab znajduje się identyfikator URI, tzn. /ci/lintKtóry umożliwia przesłanie pliku gitlab, kliknij przycisk wyboru, a następnie interfejs wskaże, czy składnia jest poprawna, czy nie.

Odpowiedzi:


13

Oto dokumentacja na temat linijki rurociągu Jenkins i jej poleceń. Czy musisz sprawdzić przed zatwierdzeniem? Jeśli nie, uruchomienie polecenia linting przed uruchomieniem potoku byłoby naprawdę trywialne, a po prostu nie powiedzie się, jeśli nie przejdzie.

Z linii poleceń rurociągu :

Jenkins może potwierdzić, lub „ szarpie ”, deklaratywny Pipeline z linii poleceń, zanim faktycznie uruchomienie go. Można to zrobić za pomocą komendy CLI Jenkinsa lub przez wysłanie żądania HTTP POST z odpowiednimi parametrami. Zalecamy użycie interfejsu SSH do uruchomienia lintera. Zobacz dokumentację interfejsu CLI Jenkins, aby uzyskać szczegółowe informacje na temat prawidłowej konfiguracji Jenkins dla bezpiecznego dostępu z wiersza poleceń.

Linting przez CLI z SSH

# ssh (Jenkins CLI)
# JENKINS_SSHD_PORT=[sshd port on master]
# JENKINS_HOSTNAME=[Jenkins master hostname]
ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile

Linting przez HTTP POST przy użyciu curl

# curl (REST API)
# Assuming "anonymous read access" has been enabled on your Jenkins instance.
# JENKINS_URL=[root URL of Jenkins master]
# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should
JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`
curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

Przykłady

Poniżej znajdują się dwa przykłady działania rurociągu. Ten pierwszy przykład pokazuje wynik wkładki, gdy jest ona przekazywana nieprawidłowo Jenkinsfile, której brakuje części agentdeklaracji.

Jenkinsfile

pipeline {
  agent
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

Wyjście liniowej dla niepoprawnego pliku Jenkins

# pass a Jenkinsfile that does not contain an "agent" section
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 2: Not a valid section definition: "agent". Some extra configuration is required. @ line 2, column 3.
     agent
     ^

WorkflowScript: 1: Missing required section "agent" @ line 1, column 1.
   pipeline &#125;
   ^

W tym drugim przykładzie, Jenkinsfilezostał uzupełniony o brakujące anyna agent. Linter informuje teraz, że rurociąg jest prawidłowy.

Jenkinsfile

pipeline {
  agent any
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

Wyjście liniowe dla prawidłowego pliku Jenkins

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.

Czy możesz wyjaśnić, jak używać klienta lokalnie? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


Dziękujemy za opublikowanie odpowiedzi. Czy istnieje również narzędzie online? Byłoby wspaniale, gdyby można było przejść do interfejsu użytkownika, opublikować plik jenkins i sprawdzić, czy występują problemy ze składnią. Zaktualizowałem pytanie.
030

@ 030 Wątpię, czy istnieje narzędzie do linterów online, ale brzmi to jak fajny projekt do podjęcia :) Aby użyć lintera lokalnie, musisz zalogować się na serwerze Jenkins przy użyciu poświadczeń, a następnie „poprosić” Jenkinsa jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM

Czy możesz dodać fragmenty tego linku do tej odpowiedzi? Jeśli link jest przestarzały, informacje zniknęłyby.
030
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.