selamat hari, Habr!
Hari ini saya ingin berkongsi salah satu cara untuk digunakan
Pengenalan
Singkatan seperti DevOps bukan lagi sesuatu yang baru untuk komuniti IT. Bagi kebanyakan orang, frasa "do DevOps" dikaitkan dengan beberapa jenis butang ajaib, apabila diklik, kod aplikasi secara automatik bertukar menjadi aplikasi yang digunakan dan diuji (semuanya sebenarnya lebih rumit, tetapi kami mengabstraksikan semua proses).
Jadi, kami menerima pesanan untuk membuat butang ajaib sedemikian supaya pentadbir boleh menggunakan aplikasi dengan satu klik. Terdapat pelbagai jenis pelaksanaan tugas ini: daripada menulis bot untuk mana-mana utusan segera kepada membangunkan aplikasi berasingan. Namun begitu, semua ini mempunyai matlamat yang sama - untuk menjadikan permulaan binaan dan penggunaan aplikasi setelus dan mudah yang mungkin.
Dalam kes kami, kami akan menggunakan Jenkins.
Petugas
Cipta kerja Jenkins yang mudah yang akan melancarkan binaan dan (atau) penggunaan perkhidmatan mikro yang dipilih bagi versi tertentu.
Input data
Kami mempunyai beberapa repositori yang mengandungi kod sumber pelbagai perkhidmatan mikro.
Menentukan parameter
Parameter berikut harus diterima sebagai input kepada tugas kami:
- URL repositori dengan kod perkhidmatan mikro yang kami mahu bina dan gunakan semasa menjalankan tugas.
- ID komit dari mana binaan akan berlaku.
SEBAGAIMANA ADANYA
Cara paling mudah untuk menyelesaikan tugas ini ialah mencipta dua parameter jenis String.
Dalam kes ini, pengguna perlu memasukkan laluan ke repositori secara manual dan id komit, yang anda lihat, tidak sepenuhnya mudah.
SEPERTI MENJADI
Sekarang mari cuba jenis parameter lain untuk mempertimbangkan semua kelebihannya.
Mari buat parameter pertama dengan jenis Parameter Pilihan, yang kedua - Parameter Rujukan Reaktif Pilihan Aktif. Dalam parameter dengan jenis Pilihan, kami akan menambah secara manual dalam medan Pilihan nama repositori tempat kod perkhidmatan mikro kami disimpan.
Sekiranya penonton menyukai artikel ini, maka dalam artikel seterusnya saya akan menerangkan proses mengkonfigurasi tugas dalam Jenkins, menggunakan penerangan melalui kod (Configuration as code), i.e. kami tidak perlu memasukkan nama repositori dan mencipta parameter secara manual, semuanya akan berlaku secara automatik (kod kami akan menerima senarai repositori daripada SCM dan mencipta parameter dengan senarai ini).
Nilai parameter kedua akan diisi secara dinamik, bergantung pada nilai yang diambil oleh parameter pertama (test1 atau test2), kerana setiap repositori mempunyai senarai komitnya sendiri.
Parameter Rujukan Reaktif Pilihan Aktif mempunyai medan berikut untuk diisi:
- Nama β nama parameter.
- skrip β kod yang akan dilaksanakan setiap kali nilai parameter daripada medan Parameter yang dirujuk ditukar (dalam kes kami, apabila kami memilih antara test1 dan test2).
- Penerangan Produk β penerangan ringkas tentang parameter.
- Jenis Pilihan β jenis objek yang dikembalikan oleh skrip (dalam kes kami, kami akan mengembalikan kod html).
- Parameter yang dirujuk β nama parameter, apabila nilainya ditukar, kod dari bahagian Skrip akan dilaksanakan.
Mari teruskan mengisi medan yang paling penting dalam parameter ini. Kami ditawarkan dua jenis pelaksanaan untuk dipilih: menggunakan Skrip Groovy atau Skrip Scriptler.
Kami memilih yang pertama, kerana Scriptler hanyalah pemalam yang menyimpan skrip yang telah anda tulis sebelum ini dan membolehkan anda menggunakannya dalam tugas lain tanpa menyalin-tampal lagi.
Kod Groovy untuk mendapatkan semua komit dari repositori yang dipilih:
AUTH = "Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π² Base64"
GIT_URL = "url Π΄ΠΎ Π²Π°ΡΠ΅ΠΉ SCM (https://bitbucket.org/)"
PROJECT_NAME = "ΠΈΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, Π³Π΄Π΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ"
def htmlBuild() {
html = """
<html>
<head>
<meta charset="windows-1251">
<style type="text/css">
div.grayTable {
text-align: left;
border-collapse: collapse;
}
.divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead {
padding: 0px 3px;
}
.divTable.grayTable .divTableBody .divTableCell {
font-size: 13px;
}
</style>
</head>
<body>
"""
def commitOptions = ""
getCommitsForMicroservice(MICROSERVICE_NAME).each {
commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>"
}
html += """<p style="display: inline-block;">
<select id="commit_id" size="1" name="value">
${commitOptions}
</select></p></div>"""
html += """
</div>
</div>
</div>
</body>
</html>
"""
return html
}
def getCommitsForMicroservice(microserviceRepo) {
def commits = [:]
def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits"
def conn = new URL(endpoint).openConnection()
conn.setRequestProperty("Authorization", "Basic ${AUTH}")
def response = new groovy.json.JsonSlurper().parseText(conn.content.text)
response.values.each {
commits.put(it.displayId, it.message)
}
return commits
}
return htmlBuild()
Tanpa pergi ke butiran, kod ini menerima nama perkhidmatan mikro (MICROSERVICE_NAME) sebagai input dan menghantar permintaan kepada Bitbucket (kaedah getCommitsForMicroservice) menggunakan APInya, dan mendapat id dan mesej komit semua komit untuk perkhidmatan mikro tertentu.
Seperti yang dinyatakan sebelum ini, kod ini harus mengembalikan html yang akan dipaparkan pada halaman Bina dengan Parameter dalam Jenkins, jadi kami membungkus semua nilai yang diterima daripada Bitbucket dalam senarai dan menambahkannya untuk dipilih.
Selepas melengkapkan semua langkah, kita sepatutnya mendapat halaman yang begitu indah Bina dengan Parameter.
Jika anda memilih perkhidmatan mikro ujian1:
Jika anda memilih perkhidmatan mikro ujian2:
Setuju bahawa adalah lebih mudah bagi pengguna untuk berinteraksi dengan tugas anda dengan cara ini daripada menyalin url setiap kali dan mencari id komit yang diperlukan.
PS Artikel ini memberikan contoh yang sangat mudah, yang mungkin tidak boleh digunakan secara praktikal dalam bentuk ini, kerana pemasangan mempunyai lebih banyak parameter yang berbeza, tetapi tujuan artikel ini adalah untuk menunjukkan cara alat berfungsi, bukan untuk menyediakan penyelesaian yang berfungsi.
PSS Seperti yang saya tulis sebelum ini, jika artikel ini berguna, maka artikel seterusnya akan mengenai konfigurasi dinamik tugas Jenkins melalui kod.
Sumber: www.habr.com