Menjadualkan Pekerjaan di Jenkins

1. Pengenalan

Dalam artikel ini, kita akan membahas pelbagai cara menjadwalkan pekerjaan di Jenkins.

Kami akan memulakan dengan menjadualkan pekerjaan sederhana yang melakukan sesuatu yang semudah mencetak mesej teks biasa. Dan kami akan mengembangkan contohnya menjadi penjadualan pekerjaan yang secara automatik dipicu oleh perubahan dalam repositori SCM seperti GitHub, Bitbucket, dll.

2. Persediaan Awal

Kami menganggap bahawa JDK dan Maven telah dipasang dalam Konfigurasi Alat Global dengan nama masing-masing sebagai JDK9.0.1 dan Maven3.5.2 , pada pelayan Jenkins.

Ini juga mengandaikan bahawa kita mendapat akses ke repositori SCM seperti Bitbucket dengan projek Maven yang disiapkan dengan betul.

3. Menjadualkan Kerja Ringkas

Di halaman konfigurasi tugas, mari tatal ke bawah terus ke bahagian Build Triggers . Oleh kerana kami berhasrat untuk membuat pekerjaan langsung, mari pilih kotak pilihan bertanda Build secara berkala . Sebaik sahaja kami memilih kotak pilihan ini, Kotak Teks dipaparkan dengan label Jadual .

Kita harus memberikan nilai dalam format yang mematuhi Cron . Terdapat banyak maklumat yang terdapat di halaman ini jika kita mengklik tanda tanya di sebelah kotak.

Mari ketik * / 2 * * * * di sini, yang mewakili selang dua minit:

Setelah keluar dari kotak teks, kita dapat melihat maklumat tepat di bawah kotak. Ini memberitahu kita tentang kapan pekerjaan akan dijalankan seterusnya.

Mari selamatkan pekerjaan - dalam masa lebih kurang dua minit, kita akan melihat status pelaksanaan tugas pertama:

Oleh kerana kita telah mengkonfigurasi tugas untuk dijalankan setiap dua minit, kita akan melihat banyak nombor binaan ketika kita kembali ke papan pemuka kerja setelah menunggu beberapa waktu.

4. Membuat Pekerjaan yang Mengundi SCM

Mari maju selangkah ke depan dan buat pekerjaan yang menarik kod sumber dari repositori SCM seperti Bitbucket dan melakukan build.

Mari buat pekerjaan baru seperti yang dijelaskan di bahagian sebelumnya, dengan beberapa pengubahsuaian.

Di bahagian Build Triggers , bukannya memilih Build Secara Berkala , mari pilih Poll SCM . Sebaik sahaja kita melakukannya, kita akan melihat kotak teks dengan Jadual Label .

Mari taip * / 5 * * * * di kotak ini, yang bermaksud kami mahu menjadualkan tugas untuk dijalankan setiap 5 minit:

Mari tatal ke bahagian Pengurusan Kod Sumber . Setelah memilih butang radio di sebelah Git , bahagian baru muncul berlabel sebagai Repositori .

Di sinilah kita perlu mengkonfigurasi perincian repositori SCM kita . Mari taip URL repositori SCM di medan teks URL Repositori :

Kami juga perlu memberikan bukti kelayakan pengguna agar Jenkins dapat mengakses repositori.

Mari klik butang Tambah di sebelah Kredensial, yang akan memaparkan skrin pop timbul untuk membuat kelayakan pengguna.

Mari pilih Jenis sebagai Nama Pengguna dengan Kata Laluan . Kita mesti menaip nama pengguna dan kata laluan dalam bidang teks yang ditentukan:

Pada klik butang Tambah , kita dibawa kembali ke bahagian Pengurusan Kod Sumber .

Mari pilih kelayakan pengguna ini di drop-down di sebelah Kredensial :

Sekarang, perkara terakhir yang perlu kita lakukan ialah menyiapkan skrip binaan.

Mari tatal ke bawah ke bahagian Build , klik Add build step dan pilih Execute Shell . Oleh kerana kami sedang mengerjakan projek Maven di repositori SCM, kami perlu menaip mvn clean install , yang akan melakukan build Maven.

Mari cuba memahami apa yang telah kita lakukan di sini.

Kami telah membuat tugas yang dijadualkan dijalankan setiap 5 minit. Tugas tersebut telah dikonfigurasi untuk menarik kod sumber dari cabang induk repositori Bitbucket yang diberikan .

Ia akan menggunakan kelayakan pengguna yang disediakan untuk log masuk ke Bitbucket.

Setelah menarik kod sumber, pekerjaan akan menjalankan skrip yang berisi perintah Maven yang disediakan.

Sekarang, jika kita menyimpan dan menunggu kira-kira lima minit, kita akan melihat pelaksanaan build di bahagian Sejarah Build di papan pemuka tugas.

The Console Output hendaklah menunjukkan output bina Maven itu. Kita dapat melihat di output konsol bahawa kod sumber telah ditarik dari Bitbucket dan perintah mvn clean install telah dilaksanakan:

Oleh kerana ia adalah Maven build, output konsol mungkin sangat panjang bergantung pada jumlah pergantungan Maven yang dimuat turun .

Tetapi pada akhir output, kita akan melihat pesanan MEMBINA KEJAYAAN .

5. Membuat Pekerjaan yang Menggunakan Paip sebagai Skrip

Sejauh ini, kami telah melihat bagaimana membuat pekerjaan yang dilaksanakan pada waktu yang telah ditetapkan.

Sekarang, mari buat kerja yang tidak terikat dengan jadual tertentu. Sebaliknya, kami akan mengkonfigurasinya untuk mencetuskan secara automatik setiap kali ada komit baru di repositori SCM.

Kembali ke papan pemuka Jenkins, mari klik Item Baru . Kali ini, bukannya projek Freestyle , kami akan memilih Pipeline . Mari namakan pekerjaan ini PipelineAsScriptJob.

Setelah mengklik butang OK, kita akan dibawa ke halaman konfigurasi saluran paip. Halaman ini mempunyai beberapa bahagian seperti " Umum" , " Pencetus Binaan" , " Pilihan Projek Lanjutan" , dan " Paip" .

Mari tatal ke bawah ke bahagian " Build Triggers" dan pilih kotak pilihan di sebelah Build apabila perubahan didorong ke Bitbucket . Pilihan ini akan tersedia hanya jika kami memasang Bitbucket Plugin :

Mari tatal ke bawah ke bahagian Paip . Kita perlu memilih Skrip Paip di drop-down di sebelah Definisi .

Kotak Teks di bawah menu lungsur ini sedang menunggu skrip diletakkan. Terdapat dua cara untuk melakukan ini.

Kita boleh menaip keseluruhan skrip, atau menggunakan utiliti yang disediakan oleh Jenkins, yang dikenali sebagai Pipeline Syntax .

Mari pilih pilihan kedua:

Pada klik Sintaks Pipa , seperti yang disorot dalam rajah di atas, tab baru akan dibuka di penyemak imbas. Ini adalah utiliti yang berguna di mana kita dapat menentukan operasi yang ingin kita laksanakan, dan alat ini akan menghasilkan skrip di Groovy untuk kita. Kami kemudian dapat menyalin skrip dan menempelkannya ke konfigurasi saluran paip.

Mari pilih pembayaran: SCM Umum dalam menu lungsur Langkah Sampel . Setelah memberikan URL SCM Repo dan bukti kelayakan pengguna, kita perlu mengklik butang Hasilkan Skrip Paip .

Ini menghasilkan skrip di kotak teks:

Mari salin skrip ini dan simpan di suatu tempat untuk kegunaan kemudian.

Di halaman yang sama, mari kita tatal ke atas dan pilih denganMaven: Sediakan persekitaran Maven di menu lungsur Langkah Sampel . Harus diingat di sini, bahawa pilihan ini akan tersedia hanya jika Pipeline Maven Integration Plugin dipasang .

Kita perlu memilih nama pemasangan Maven dan JDK di sebelah drop-down yang sesuai. Kita perlu mengklik butang Generate Pipeline Script .

Ini menghasilkan skrip di kotak teks:

Mari simpan skripnya.

Masih ada beberapa lagi skrip yang perlu kita hasilkan. Mari pilih node: Alokasikan node dalam drop-down Contoh Langkah , taip master di medan teks Label dan klik Hasilkan Skrip Paip :

Mari simpan skripnya.

Dan yang terakhir.

Mari pilih tahap: Tahap dalam drop-down Langkah Sampel , ketik scm di medan teks Nama Peringkat dan klik Hasilkan Skrip Paip :

Mari simpan.

Sudah tiba masanya untuk mengumpulkan semua skrip yang dihasilkan setakat ini dan menyatukannya:

node('master') { stage('scm') { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'e50f564f-fbb7-4660-9c95-52dc93fa26f7', url: '//[email protected]/projects/springpocrepo.git']]]) } stage('build') { withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') { sh 'mvn clean install' } } }

The first statement, node(‘master') in the script above, indicates that the job will be executed on a node named master, which is the default node on the Jenkins server.

Let's copy the above script to the Text Box in Pipeline section:

Let's save this configuration.

Now, there's only one thing that's left out. We need to configure a Webhook in Bitbucket. The Webhook is responsible for sending out a push notification to Jenkins server, whenever a particular event takes place in Bitbucket.

Let's take a look at how to configure it.

Let's log in to Bitbucket and select a repository. We should see an option Settings on the left-hand side column. Let's click it, and we should see an option Webhooks in WORKFLOW section. Let's create a new Webhook.

We need to provide some name to this webhook in the Title field. We also need to provide a URL for the webhook in the URL field. This URL needs to point to one particular REST API Endpoint provided by Jenkins, and that endpoint is bitbucket-hook.

It must be noted that the URL MUST end with a trailing slash:

While configuring the Webhook above, we've selected option Repository push. This means Bitbucket will send a notification to Jenkins server whenever a push happens.

This behavior can be modified; there are several different options to choose from.

For now, let's go with the default option,i.e., Repository Push.

We can setup webhook in Github, too; here‘s some helpful information on how to configure that.

Long story short: we've created a pipeline script in Groovy language – that should pull the source code from the master branch of the provided SCM repository (using the provided user credentials), whenever there's a push in the repository and then execute mvn clean install command on the Jenkins server.

It must be noted that this job's not going to run at any particular time. Instead, it's going to wait till there's a push in the master branch of the SCM repository.

As soon as there's a new push event, we'll see a new execution in the “Build History” section on the Jenkins job dashboard.

We should see a new build being initiated with a pending status next to it.

In a few seconds, this build should start execution, and we'll be able to see the complete log in Console Output.

The first statement in the console output says “Started by Bitbucket push by..” – this means that the build was triggered automatically when a Push took place in Bitbucket:

If all goes well, the build should complete successfully.

6. Create a Job That Uses Jenkinsfile

It's possible NOT to write any script in the Jenkins pipeline and still achieve build execution being triggered by the Bitbucket Webhook.

To do so, we have to create a new file in Bitbucket and name it as Jenkinsfile. The pipeline script needs to be transferred to this Jenkinsfile with a slight modification. Let's see exacttly how to do that.

We'll create a new pipeline in Jenkins and name it PipelineWithJenkinsfile.

On the pipeline configuration page, we'll select Pipeline script from SCM next to Definition in the Pipeline section. We'll see a drop-down with different options next to SCM. Let's choose Git from the drop-down.

We then have to provide the URL of Bitbucket repository and user credentials. Let's ensure that the text field next to Script Path contains the default value,i.e., Jenkinsfile:

As far as Jenkins is concerned, that's all we need to configure.

However, we have to create the Jenkinsfile in the repository; so, let's create a new text file, name it as Jenkinsfile and use this simple groovy script:

node('master') { stage('scm') { checkout scm } stage('build') { withMaven(jdk: 'JDK9.0.1', maven: 'Maven3.5.2') { sh 'mvn clean install' } } }

This script is almost the same as the pipeline script that we created in the earlier section, with just one modification. The statement in stage(‘scm') doesn't need the URL and user credentials information. Instead, all it needs is checkout scm.

And that's it. The moment we commit this file into Bitbucket, it'll trigger the build in Jenkins – and we should see the build being triggered in the Build History.

The only difference between this section and the earlier one is that we defined the pipeline script in the Bitbucket repository.

Jadi, skrip binaan adalah sebahagian daripada kod sumber projek yang perlu dibina . Kami tidak mengekalkan skrip dalam Jenkins itu sendiri.

Sebaliknya, Jenkins mempunyai pengetahuan mengenai perincian repositori SCM dan fail skrip. Setiap kali terdapat desakan ke repositori ini, skrip di Jenkinsfile akan dilaksanakan di pelayan Jenkins .

7. Kesimpulannya

Dalam tutorial ini, kita telah melihat bagaimana pekerjaan dapat dikonfigurasi dan dijadwalkan di Jenkins menggunakan pelbagai strategi.

Kami juga telah melihat cara mengkonfigurasi pekerjaan di Jenkins sehingga secara automatik dipicu, berdasarkan tindakan tertentu yang dilakukan di repositori SCM seperti Bitbucket.