Jenkinsfiles'i çevrimiçi olarak doğrulamayı mümkün kılan bir araç var mı?


13

Şu anda bir Jenkinsfile dosyasını düzenliyorum ve Jenkins bir sorun bildirmedikçe çalışmasına izin veriyorum. Bu yaklaşım çok zaman alıyor. Jenkinsfile işlemine başlamadan önce sözdizimini doğrulamayı tercih ederim. Bu sorunu çözen bir araç var mı?

Gelen gitlab bir URI yani orada /ci/lintmümkün, bir gitlab dosya göndermek onay butonuna tıklayın ve sonra UI sözdizimi doğru olup olmadığını gösterecektir kolaylaştırır.

Yanıtlar:


13

Jenkins boru hattı linter ve komutları hakkında bazı belgeler. Taahhüt etmeden önce doğrulamanız gerekiyor mu? Değilse, boru hattı çalışmadan önce linting komutunu çalıştırmak gerçekten önemsizdir ve geçmezse başarısız olur.

Gönderen Komut satırı Boru Hattı Linter :

Jenkins, Beyansal Bir Boru Hattını gerçekte çalıştırmadan önce komut satırından doğrulayabilir veya " tüy bırakabilir" . Bu bir Jenkins CLI komutu kullanılarak veya uygun parametrelerle bir HTTP POST isteği yapılarak yapılabilir. Linter'i çalıştırmak için SSH arayüzünü kullanmanızı öneririz . Jenkins'in güvenli komut satırı erişimi için nasıl düzgün yapılandırılacağıyla ilgili ayrıntılar için Jenkins CLI belgelerine bakın .

SSH ile CLI üzerinden linting

# 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

HTTP POST ile bağlantı 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

Örnekler

Aşağıda, Boru Hattı Linter'in iki eylem örneği bulunmaktadır. Bu ilk örnek Jenkinsfile, agentbildirimin bir kısmı eksik olan geçersiz bir değer iletildiğinde linter çıktısını gösterir .

Jenkinsfile

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

Geçersiz Jenkinsfile için linter çıkışı

# 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;
   ^

Bu ikinci örnekte, Jenkinsfileeksik içerecek şekilde güncellenmiştir anyüzerinde agent. Linter şimdi Boru Hattı'nın geçerli olduğunu bildiriyor.

Jenkinsfile

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

Geçerli Jenkinsfile için linter çıkışı

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

İstemciyi yerel olarak nasıl kullanacağınızı açıklayabilir misiniz? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


Yanıt gönderdiğiniz için teşekkür ederiz. Çevrimiçi bir araç da var mı? Bir kullanıcının bir kullanıcı arayüzüne gidip bir jenkinsfile göndermesi ve sözdizimi sorunları olup olmadığını kontrol etmesi harika olurdu. Soruyu güncelledim.
030

@ 030 Çevrimiçi bir linter aracı olduğundan şüpheliyim, ancak üstlenilmesi eğlenceli bir proje gibi görünüyor :) Linter'i yerel olarak kullanmak için Jenkins sunucunuza kimlik bilgilerinizle giriş yapmanız ve ardından Jenkins'ten jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM

Bu bağlantıdan bu cevaba bazı parçacıklar ekleyebilir misiniz? Bağlantı reddedilirse, bilgi kaybolur.
030
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.