Jawaban:
Anda tidak dapat menjalankan skrip Pipeline secara lokal, karena seluruh tujuannya adalah untuk skrip Jenkins. (Yang merupakan salah satu alasan mengapa yang terbaik adalah menjaga Jenkinsfile
kode singkat dan terbatas Anda yang benar-benar berhubungan dengan fitur Jenkins; logika build Anda yang sebenarnya harus ditangani dengan proses eksternal atau alat bangun yang Anda panggil melalui satu baris sh
atau bat
langkah.)
Jika Anda ingin menguji perubahan untuk Jenkinsfile
hidup tapi tanpa melakukan itu, gunakan yang Replay fitur ditambahkan dalam 1.14
JENKINS-33925 melacak yang diinginkan untuk kerangka kerja pengujian otomatis.
Saya punya solusi yang berfungsi baik untuk saya. Ini terdiri dari jenkins lokal yang berjalan di buruh pelabuhan dan kait web git untuk memicu pipa di jenkins lokal di setiap komit. Anda tidak perlu lagi mendorong repositori github atau bitbucket Anda untuk menguji pipa.
Ini hanya diuji di lingkungan linux.
Cukup mudah untuk membuatnya bekerja walaupun instruksi ini agak panjang. Sebagian besar langkah ada di sana.
Buat file bernama Dockerfile di tempat yang Anda pilih. Saya menempatkannya di /opt/docker/jenkins/Dockerfile
isinya dengan ini:
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins
Bangun gambar local_jenkins
Ini yang perlu Anda lakukan hanya sekali atau setelah Anda menambahkan sesuatu ke Dockerfile.
$ docker build -t local_jenkins /opt/docker/jenkins/
Mulai dan mulai ulang local_jenkins
Dari waktu ke waktu Anda ingin memulai dan memulai ulang jenkins dengan mudah. Misal setelah reboot mesin Anda. Untuk ini saya membuat alias yang saya masukkan ke .bash_aliases
dalam folder rumah saya.
$ 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
Pastikan /opt/docker/jenkins/jenkins_home
folder ada dan Anda memiliki hak pengguna untuk membaca dan menulis.
Untuk memulai atau memulai ulang jenkins Anda cukup ketik:
$ localjenkinsrestart
Semua yang Anda lakukan di jenkins lokal Anda akan disimpan di folder / opt / docker / jenkins / jenkins_home dan disimpan di antara restart.
Buat kunci akses ssh di jenkins buruh pelabuhan Anda
Ini adalah bagian yang sangat penting untuk bekerja. Pertama kita mulai wadah buruh pelabuhan dan membuat bash shell untuk itu:
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
Anda sekarang telah memasuki wadah buruh pelabuhan, ini bisa Anda lihat dengan sesuatu seperti jenkins@e7b23bad10aa:/$
di terminal Anda. Hash setelah @ pasti akan berbeda.
Buat kuncinya
jenkins@e7b23bad10aa:/$ ssh-keygen
Tekan enter pada semua pertanyaan sampai Anda mendapatkan konfirmasi kembali
Salin kunci ke komputer Anda. Dari dalam wadah buruh pelabuhan komputer Anda 172.17.0.1 jika Anda bertanya-tanya.
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
user = nama pengguna Anda dan 172.17.0.1 adalah alamat ip ke komputer Anda dari dalam wadah buruh pelabuhan.
Anda harus mengetikkan kata sandi pada saat ini.
Sekarang mari kita coba selesaikan loop dengan ssh-ing ke komputer Anda dari dalam wadah buruh pelabuhan.
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
Kali ini Anda tidak perlu memasukkan kata sandi. Jika ya, ada yang salah dan Anda harus mencoba lagi.
Anda sekarang akan berada di folder home komputer Anda. Coba ls
dan lihat.
Jangan berhenti di sini karena kami memiliki rantai kerang ssh yang harus dikeluarkan.
$ exit
jenkins@e7b23bad10aa:/$ exit
Baik! Sekarang kami kembali dan siap untuk melanjutkan.
Instal Jenkins Anda
Anda akan menemukan Jenkins lokal di peramban Anda di http: // localhost: 8787 .
Pertama kali Anda mengarahkan browser Anda ke Jenkins lokal Anda, Anda akan dimaafkan dengan Instalasi Wizard. Standarnya baik-baik saja, pastikan Anda menginstal plugin pipeline selama pengaturan.
Siapkan jenkins Anda
Sangat penting bahwa Anda mengaktifkan keamanan berbasis matriks di http: // localhost: 8787 / configureSecurity dan beri diri Anda semua hak dengan menambahkan diri Anda ke matriks dan centang semua kotak. (Ada ikon centang-semua-kotak di paling kanan)
Jenkins’ own user database
sebagai Wilayah KeamananMatrix-based security
di bagian OtorisasiUser/group to add:
dan klik [ Add ]
tombolPrevent Cross Site Request Forgery exploits
tidak dicentang. (Karena Jenkins ini hanya dapat dijangkau dari komputer Anda, ini bukan masalah besar)[ Save ]
dan logout dari Jenkins dan masuk lagi hanya untuk memastikan itu berhasil.
Jika tidak, Anda harus memulai dari awal dan mengosongkan /opt/docker/jenkins/jenkins_home
folder sebelum memulai kembaliTambahkan pengguna git
Kita perlu mengizinkan git hook kita untuk login ke Jenkins lokal kita dengan hak minimal. Hanya melihat dan membangun pekerjaan sudah cukup. Karena itu kami membuat pengguna yang dipanggil git
dengan kata sandi login
.
Arahkan browser Anda ke http: // localhost: 8787 / securityRealm / addUser dan tambahkan git
sebagai nama pengguna dan login
kata sandi. Klik pada [ Create User ]
.
Tambahkan hak kepada pengguna git
Buka halaman http: // localhost: 8787 / configureSecurity di browser Anda. Tambahkan pengguna git ke matriks:
git
di kolom User/group to add:
dan klik[ Add ]
Sekarang saatnya untuk mencentang kotak untuk hak minimal untuk pengguna git. Hanya ini yang dibutuhkan:
Pastikan Prevent Cross Site Request Forgery exploits
kotak centang tidak dicentang dan klik[ Save ]
Kami menganggap kami memiliki nama pengguna user
dan proyek yang diaktifkan git kami dengan Jenkinsfile
di dalamnya disebut project
dan terletak di/home/user/projects/project
Di http Anda : // localhost: 8787 Jenkins menambahkan proyek pipa baru. Saya menamainya hookpipeline untuk referensi.
New Item
di menu Jenkinshookpipeline
[ OK ]
Poll SCM
di bagian Build Triggers. Biarkan Jadwal kosong.Pipeline script from SCM
Repository URL
isian enteruser@172.17.0.1:projects/project/.git
Script Path
isian enterJenkinsfile
Buka /home/user/projects/project/.git/hooks
folder dan buat file bernama post-commit
yang berisi ini:
#!/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"
Jadikan file ini dapat dieksekusi:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
Uji kait pasca-komitmen:
$ /home/user/projects/project/.git/hooks/post-commit
Periksa di Jenkins jika proyek hookpipeline Anda dipicu.
Terakhir, buat beberapa perubahan sewenang-wenang untuk proyek Anda, tambahkan perubahan dan lakukan komit. Ini sekarang akan memicu pipa di Jenkins lokal Anda.
Hari hari menyenangkan!
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
dengan docker build -t local_jenkins /opt/docker/jenkins
karena Docker mengeluh tentang "tidak dapat menyiapkan konteks: konteks harus menjadi direktori".
$ docker inspect jenkins | grep Gateway
ssh user@docker.for.mac.localhost
menggunakan alamat IP. Pastikan juga Anda mengaktifkan fitur Remote Login dari System Preferences -> Menu Folder Bersama
TL; DR
Versi Panjang
Tes Jenkins Pipeline menjadi semakin menyakitkan. Berbeda dengan pendekatan konfigurasi pekerjaan deklaratif klasik di mana pengguna terbatas pada apa yang UI tampilkan, Jenkins Pipeline baru adalah bahasa pemrograman yang lengkap untuk proses pembangunan di mana Anda mencampur bagian deklaratif dengan kode Anda sendiri. Sebagai pengembang yang baik kami juga ingin memiliki beberapa unit test untuk kode semacam ini.
Ada tiga langkah yang harus Anda ikuti saat mengembangkan Jenkins Pipelines. The langkah 1. harus mencakup 80% dari kasus penggunaan.
Contohnya
The pipelineUnit GitHub repo berisi beberapa contoh Spock tentang cara menggunakan Jenkins Pipeline Satuan pengujian kerangka kerja
Jenkins memiliki fitur 'Putar Ulang', yang memungkinkan Anda memutar ulang pekerjaan dengan cepat tanpa memperbarui sumber:
Pada saat penulisan (akhir Juli 2017) dengan plugin Blue Ocean, Anda dapat memeriksa sintaksis pipa deklaratif langsung di editor pipa visual . Editor, berfungsi dari Blue Ocean UI ketika Anda mengklik "configure" hanya untuk proyek-proyek github (ini adalah masalah yang diketahui dan mereka bekerja untuk membuatnya berfungsi juga di git dll).
Namun, seperti yang dijelaskan dalam pertanyaan ini, Anda dapat membuka penjelajahan editor ke:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Kemudian klik di tengah halaman, dan tekan Ctrl+S
, ini akan membuka textarea di mana Anda dapat menempelkan skrip deklaratif pipeline. Ketika Anda mengklik Perbarui , jika ada kesalahan sintaks, editor akan memberi tahu Anda di mana kesalahan sintaks. Seperti di tangkapan layar ini:
Jika tidak ada kesalahan sintaks, textarea akan ditutup dan halaman akan memvisualisasikan pipa Anda. Jangan khawatir itu tidak akan menyelamatkan apa pun (jika ini adalah proyek github, itu akan melakukan perubahan Jenkinsfile).
Saya baru di Jenkins dan ini cukup membantu, tanpa ini saya harus melakukan Jenkinsfile berkali-kali, sampai berhasil (sangat menjengkelkan!). Semoga ini membantu. Bersulang.
Agak terlambat ke pesta, tapi itu sebabnya saya menulis jenny
, implementasi kecil dari beberapa langkah inti Jenkins. ( https://github.com/bmustiata/jenny )
Sejauh yang saya tahu Plugin Pipeline ini adalah "Mesin" dari mekanika Jenkinsfile baru, jadi saya cukup yakin Anda bisa menggunakan ini untuk menguji skrip Anda secara lokal.
Saya tidak yakin apakah ada langkah-langkah tambahan yang diperlukan ketika Anda menyalinnya ke Jenkinsfile, namun sintaks dll harus persis sama.
Sunting: Ditemukan referensi pada "mesin", periksa deskripsi fitur ini , paragraf terakhir, entri pertama.
Dalam pengaturan pengembangan saya - hilang editor Groovy yang tepat - banyak masalah Jenkinsfile berasal dari kesalahan sintaksis sederhana . Untuk mengatasi masalah ini, Anda dapat memvalidasi Jenkinsfile terhadap instance Jenkins Anda (berjalan pada $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
Perintah di atas adalah versi yang sedikit dimodifikasi dari https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line
Selain dari fitur Putar Ulang yang telah disebutkan orang lain (selain kegunaannya!), Saya juga menemukan yang berikut berguna:
Masukkan kunci SSH Anda ke profil Jenkins Anda, lalu gunakan linter deklaratif sebagai berikut:
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
Ini akan melakukan analisis statis pada Jenkinsfile Anda. Di editor pilihan Anda, tentukan pintasan keyboard yang menjalankan perintah itu secara otomatis. Dalam Visual Studio Code, yang merupakan apa yang saya gunakan, pergi ke Tugas> Konfigurasikan Tugas, kemudian gunakan JSON berikut untuk membuat perintah Validasi Jenkinsfile :
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}
saya menggunakan replay future, untuk melakukan beberapa pembaruan dan berjalan cepat.
Dengan beberapa keterbatasan dan untuk jaringan pipa scripted saya menggunakan solusi ini:
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()