Yanıtlar:
Pipeline betiğini yerel olarak çalıştıramazsınız, çünkü tüm amacı Jenkins'i betiğe yazmaktır. (Bu, Jenkinsfile
kısa ve gerçekte Jenkins özellikleriyle ilgili kodla sınırlı kalmanın en iyi nedenlerinden biridir ; gerçek oluşturma mantığınız, bir satır sh
veya bat
adımla çağırdığınız harici süreçlerle veya oluşturma araçlarıyla ele alınmalıdır .)
Bir değişikliği Jenkinsfile
yaşamak için test etmeyi ancak taahhüt etmeden test etmek istiyorsanız , 1.14'te eklenen Tekrar Oynat özelliğini kullanın
JENKINS-33925 , otomatik test çerçevesi için istenenleri izler.
Benim için iyi çalışan bir çözümüm var. Docker'da çalışan bir yerel jenkinlerden ve her taahhütte yerel jenkinlerde boru hattını tetiklemek için bir git web kancasından oluşur. Boru hattını test etmek için artık github veya bitbucket deponuza itmeniz gerekmiyor.
Bu yalnızca linux ortamında test edilmiştir.
Bu talimat biraz uzun olsa da, bu işi yapmak oldukça basittir. Çoğu adım orada.
Seçtiğiniz yerine Dockerfile adlı bir dosya oluşturun. Bunu bununla /opt/docker/jenkins/Dockerfile
dolduruyorum:
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins
Local_jenkins resmini oluşturun
Bunu Dockerfile'a bir şey ekledikten sonra veya yalnızca bir kez yapmanız gerekir.
$ docker build -t local_jenkins /opt/docker/jenkins/
Local_jenkins'i başlatın ve yeniden başlatın
Zaman zaman jenkinleri kolayca başlatmak ve yeniden başlatmak istersiniz. Örneğin, makinenizi yeniden başlattıktan sonra. Bunun için .bash_aliases
ana klasöre koyduğum bir takma ad yaptım .
$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases
$ source .bash_aliases # To make it work
/opt/docker/jenkins/jenkins_home
Klasörün var olduğundan ve kullanıcının okuma ve yazma haklarına sahip olduğunuzdan emin olun .
Jenkinlerinizi başlatmak veya yeniden başlatmak için şunu yazın:
$ localjenkinsrestart
Yerel jenkinlerinizde yaptığınız her şey / opt / docker / jenkins / jenkins_home klasöründe saklanır ve yeniden başlatmalar arasında korunur.
Docker cenkins'inizde bir ssh erişim anahtarı oluşturun
Bunun çalışması için bu çok önemli bir parçadır. İlk olarak liman işçisi konteynerini başlatıyoruz ve ona bir bash kabuğu yaratıyoruz:
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
Artık docker konteynerine girdiniz, bu jenkins@e7b23bad10aa:/$
terminalinizdeki gibi bir şeyle görebilirsiniz . @ 'Den sonraki karma kesinlikle farklı olacaktır.
Anahtarı oluşturun
jenkins@e7b23bad10aa:/$ ssh-keygen
Soruyu geri alana kadar tüm sorularda enter tuşuna basın
Anahtarı bilgisayarınıza kopyalayın. Docker konteynerinin içinden merak ediyorsanız bilgisayarınız 172.17.0.1'dir.
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
user = kullanıcı adınız ve 172.17.0.1, docker konteyneri içinden bilgisayarınızın ip adresidir.
Bu noktada şifrenizi yazmanız gerekecektir.
Şimdi docker konteynerinden bilgisayarınıza ssh yaparak döngüyü tamamlamaya çalışalım.
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
Bu sefer şifrenizi girmeniz gerekmez. Bunu yaparsanız, bir şeyler ters gitti ve tekrar denemeniz gerekiyor.
Artık bilgisayarların giriş klasöründe olacaksınız. Deneyin ls
ve bir göz atın.
Dışarı çıkmamız gereken bir ssh kabuğu zincirimiz olduğu için burada durmayın.
$ exit
jenkins@e7b23bad10aa:/$ exit
Sağ! Şimdi geri döndük ve devam etmeye hazırız.
Jenkins'inizi kurun
Yerel Jenkins'inizi tarayıcınızda http: // localhost: 8787 adresinde bulabilirsiniz .
Tarayıcınızı yerel Jenkins'e ilk yönlendirdiğinizde, bir Kurulum Sihirbazı ile büyüleneceksiniz. Varsayılanlar iyi, kurulum sırasında boru hattı eklentisini yüklediğinizden emin olun.
Cenkins'inizi kurun
Öyle çok önemli üzerinde matris esaslı güvenlik aktive olduğunu // localhost: 8787 / configureSecurity http ve kendinizi tüm haklarını vermek matrise kendinizi ekleyerek ve tüm kutuları işaretleyin. (En sağda bir onay kutuları simgesi vardır)
Jenkins’ own user database
Güvenlik Bölgesi olarak seçinMatrix-based security
Yetkilendirme bölümünde seçinUser/group to add:
ve [ Add ]
düğmesini tıklayınPrevent Cross Site Request Forgery exploits
işaretli olmadığını doğrulayın . (Bu Jenkins sadece bilgisayarınızdan ulaşılabilir olduğu için bu çok önemli değil)[ Save ]
ve Jenkins'in çalıştığından emin olmak için tekrar oturum açın.
Yoksa, /opt/docker/jenkins/jenkins_home
yeniden başlatmadan önce baştan başlamanız ve klasörü boşaltmanız gerekir.Git kullanıcısını ekle
Git kancalarımızın yerel Jenkins'e minimum haklarla giriş yapmasına izin vermeliyiz. Sadece iş görmek ve inşa etmek yeterlidir. Bu nedenle git
şifre ile adlandırılan bir kullanıcı oluşturuyoruz login
.
Tarayıcınızı http: // localhost: 8787 / securityRealm / addUser adresine yönlendirin ve git
kullanıcı adı ve login
şifre olarak ekleyin . Tıklayın [ Create User ]
.
Git kullanıcısına hak ekleme
Git http: // localhost: 8787 / configureSecurity sayfasını tarayıcınızda. Git kullanıcısını matrise ekleyin:
git
Alana yazın User/group to add:
ve tıklayın[ Add ]
Şimdi git kullanıcısı için minimum haklar için kutuları işaretlemenin zamanı geldi. Sadece bunlar gereklidir:
Prevent Cross Site Request Forgery exploits
Onay kutusunun işaretli olmadığından emin olun ve tıklayın[ Save ]
Kullanıcı adının user
ve git etkin projemizin Jenkinsfile
içinde çağrıldığını project
ve/home/user/projects/project
Reklamlara http: // localhost: 8787 Jenkins yeni boru hattı projesi ekleyin. Referans için hookpipeline adını verdim.
New Item
Jenkins menüsünde tıklayınhookpipeline
[ OK ]
Poll SCM
Oluşturma Tetikleyicileri bölümündeki onay kutusunu işaretleyin . Programı boş bırakın.Pipeline script from SCM
Repository URL
alana girmekuser@172.17.0.1:projects/project/.git
Script Path
alana girmekJenkinsfile
/home/user/projects/project/.git/hooks
Klasöre gidin ve aşağıdakileri post-commit
içeren bir dosya oluşturun :
#!/bin/sh
BRANCHNAME=$(git rev-parse --abbrev-ref HEAD)
MASTERBRANCH='master'
curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build
echo "Build triggered successfully on branch: $BRANCHNAME"
Bu dosyayı yürütülebilir yap:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
İşlem sonrası kancasını test edin:
$ /home/user/projects/project/.git/hooks/post-commit
Hookpipeline projenizin tetiklenip tetiklenmediğini Jenkins'te kontrol edin.
Son olarak projenizde keyfi bir değişiklik yapın, değişiklikleri ekleyin ve bir taahhütte bulunun. Bu artık yerel Jenkins'teki boru hattını tetikleyecektir.
Mutlu günler!
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
olan docker build -t local_jenkins /opt/docker/jenkins
": bağlam bir dizin olmalıdır bağlamı hazırlamak mümkün" Docker şikayet çünkü.
$ docker inspect jenkins | grep Gateway
ssh user@docker.for.mac.localhost
, IP adresini kullanmak yerine. Ayrıca macOs Sistem Tercihleri -> Paylaşımlı Klasör menüsünden Uzaktan Giriş özelliğini etkinleştirdiğinizden emin olun
TL; DR
Uzun Versiyon
Jenkins Boru Hattı testi gittikçe daha fazla acı çekiyor. Kullanıcının, kullanıcı arayüzünün yeni kullanıcı arayüzüne maruz kaldığı şeylerle sınırlı olduğu klasik bildirim işi yapılandırma yaklaşımının aksine, bildirim parçasını kendi kodunuzla karıştırdığınız oluşturma işlemi için tam teşekküllü bir programlama dilidir. İyi geliştiriciler olarak biz de bu tür kodlar için bazı birim testleri yapmak istiyoruz.
Jenkins Boru Hatları geliştirirken izlemeniz gereken üç adım vardır. Adım 1. kullanımları vakaların% 80 kapsamalıdır.
Örnekler
PipelineUnit GitHub Repo nasıl kullanılacağına ilişkin bazı Spock örnekler içermektedir Jenkins Boru Hattı Ünitesi test çerçeve
Jenkins, bir işi kaynakları güncellemeden hızlı bir şekilde tekrar oynatmanızı sağlayan bir 'Tekrar Oynat' özelliğine sahiptir:
Blue Ocean eklentisi ile yazıldığınızda (Temmuz 2017 sonu) , açıklayıcı bir boru hattının sözdizimini doğrudan görsel boru hattı düzenleyicisinden kontrol edebilirsiniz . Editör, sadece github projeleri için "yapılandır" ı tıkladığınızda Blue Ocean UI'den çalışır (bu bilinen bir konudur ve git vb üzerinde de çalışmasını sağlamak için çalışmaktadır).
Ancak, bu soruda açıklandığı gibi, aşağıdakilere göz atarak düzenleyiciyi açabilirsiniz:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Ardından sayfanın ortasına tıklayın ve düğmesine basın Ctrl+S
, bu bir boru hattı bildirim komut dosyası yapıştırabileceğiniz bir metin alanı açar. Güncelle'yi tıkladığınızda , bir sözdizimi hatası varsa, editör sözdizimi hatasının nerede olduğunu size bildirir. Bu ekran görüntüsünde olduğu gibi:
Sözdizimi hatası yoksa, metin alanı kapanacak ve sayfa ardışık düzeninizi görselleştirecektir. Endişelenmeyin, hiçbir şey kurtaramaz (bir github projesi ise Jenkinsfile değişikliğini yapar).
Jenkins için yeniyim ve bu oldukça yararlı, bu olmadan bir Jenkinsfile işe yarayana kadar (çok can sıkıcı!). Bu yardımcı olur umarım. Şerefe.
Partiye biraz geç kaldım, ama bu yüzden yazdım jenny
, bazı temel Jenkinsfile adımlarının küçük bir yeniden uygulanması. ( https://github.com/bmustiata/jenny )
Bildiğim kadarıyla bu Boru Hattı Eklentisi yeni Jenkinsfile mekaniğinin "Motoru", bu yüzden komut dosyalarınızı yerel olarak test etmek için bunu kullanabileceğinizden oldukça olumluyum.
Bir Jenkinsfile içine kopyalarken gerekli herhangi bir ek adım olup olmadığından emin değilim, ancak sözdizimi vb tam olarak aynı olmalıdır.
Düzenleme: "Motor" referans bulundu, bu özellik açıklamasını, son paragraf, ilk giriş kontrol edin .
Geliştirme kurulumumda - uygun bir Groovy editörü eksik - büyük miktarda Jenkinsfile sorunları basit sözdizimi hatalarından kaynaklanıyor . Bu sorunu çözmek için Jenkinsfile dosyasını Jenkins örneğinize göre (adresinde çalışarak) doğrulayabilirsiniz $JENKINS_HTTP_URL
:
curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
Yukarıdaki komut https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line adresinden biraz değiştirilmiş bir sürümüdür.
Başkalarının daha önce bahsettiği Replay özelliğinin yanı sıra (yararlılığına da değinir!) Aşağıdakileri de yararlı buldum:
SSH anahtarınızı Jenkins profilinize yerleştirin, ardından bildirim amaçlı linter'i aşağıdaki gibi kullanın :
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
Bu Jenkinsfile üzerinde statik bir analiz yapacak. İstediğiniz düzenleyicide, bu komutu otomatik olarak çalıştıran bir klavye kısayolu tanımlayın. Kullandığım olan Visual Studio Code'da, Görevler> Görevleri Yapılandır'a gidin, ardından bir Doğrula Jenkinsfile komutu oluşturmak için aşağıdaki JSON'u kullanın:
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}
bazı güncelleme yapmak ve hızlı bir şekilde çalıştırmak için tekrar gelecek kullanıyorum.
Bazı sınırlamalarla ve kodlanmış boru hatları için bu çözümü kullanıyorum:
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()