ขอให้เป็นวันที่ดี, Habr!
วันนี้ผมอยากจะแบ่งปันวิธีการใช้งานวิธีหนึ่ง
การแนะนำ
ตัวย่อเช่น DevOps ไม่ใช่สิ่งใหม่สำหรับชุมชนไอทีอีกต่อไป สำหรับหลายๆ คน วลี “do DevOps” มีความเชื่อมโยงกับปุ่มวิเศษบางประเภท เมื่อคลิกแล้ว โค้ดของแอปพลิเคชันจะเปลี่ยนเป็นแอปพลิเคชันที่ปรับใช้และทดสอบโดยอัตโนมัติ (จริงๆ แล้วทุกอย่างซับซ้อนกว่านั้น แต่เรากำลังแยกออกจากกระบวนการทั้งหมด)
ดังนั้นเราจึงได้รับคำสั่งให้สร้างปุ่มวิเศษเพื่อให้ผู้ดูแลระบบสามารถปรับใช้แอปพลิเคชันได้ด้วยคลิกเดียว การดำเนินงานนี้มีหลายประเภท: ตั้งแต่การเขียนบอทสำหรับโปรแกรมส่งข้อความด่วนใด ๆ ไปจนถึงการพัฒนาแอปพลิเคชันแยกต่างหาก อย่างไรก็ตาม ทั้งหมดนี้มีเป้าหมายเดียวกัน - เพื่อให้การเริ่มต้นการสร้างและการปรับใช้แอปพลิเคชันมีความโปร่งใสและสะดวกที่สุดเท่าที่จะเป็นไปได้
ในกรณีของเราเราจะใช้ เจนกิ้นส์.
งาน
สร้างงาน Jenkins ที่สะดวกสบายซึ่งจะเปิดตัวบิลด์และ (หรือ) การใช้งานไมโครเซอร์วิสที่เลือกของเวอร์ชันใดเวอร์ชันหนึ่ง
ป้อนข้อมูล
เรามีแหล่งเก็บข้อมูลหลายแห่งที่มีซอร์สโค้ดของไมโครเซอร์วิสต่างๆ
การกำหนดพารามิเตอร์
ควรได้รับพารามิเตอร์ต่อไปนี้เป็นอินพุตสำหรับงานของเรา:
- URL ของพื้นที่เก็บข้อมูลที่มีโค้ดไมโครเซอร์วิสที่เราต้องการสร้างและปรับใช้เมื่อรันงาน
- ID ของคอมมิตที่ build จะเกิดขึ้น
อย่างที่เป็น
วิธีที่ง่ายที่สุดในการทำงานนี้ให้สำเร็จคือการสร้างพารามิเตอร์ประเภท String สองตัว
ในกรณีนี้ ผู้ใช้จะต้องป้อนเส้นทางไปยังที่เก็บด้วยตนเองและรหัสการคอมมิต ซึ่งคุณเห็นว่าไม่สะดวกเลย
เท่าที่จะเป็น
ทีนี้ลองพารามิเตอร์ประเภทอื่นเพื่อพิจารณาข้อดีทั้งหมดของมัน
เรามาสร้างพารามิเตอร์แรกด้วยประเภทพารามิเตอร์ตัวเลือก พารามิเตอร์ตัวที่สอง - พารามิเตอร์อ้างอิงปฏิกิริยาตัวเลือกที่ใช้งานอยู่ ในพารามิเตอร์ที่มีประเภทตัวเลือก เราจะเพิ่มชื่อของที่เก็บโค้ดของไมโครเซอร์วิสของเราลงในฟิลด์ตัวเลือกด้วยตนเอง
หากผู้ชมชอบบทความนี้ในบทความถัดไปฉันจะอธิบายกระบวนการกำหนดค่างานในเจนกินส์โดยใช้คำอธิบายผ่านโค้ด (การกำหนดค่าเป็นโค้ด) เช่น เราไม่จำเป็นต้องป้อนชื่อที่เก็บและสร้างพารามิเตอร์ด้วยตนเอง ทุกอย่างจะเกิดขึ้นโดยอัตโนมัติ (โค้ดของเราจะได้รับรายการที่เก็บจาก SCM และสร้างพารามิเตอร์ด้วยรายการนี้)
ค่าของพารามิเตอร์ตัวที่สองจะถูกเติมแบบไดนามิกขึ้นอยู่กับค่าที่พารามิเตอร์ตัวแรกใช้ (test1 หรือ test2) เนื่องจากแต่ละที่เก็บมีรายการคอมมิตของตัวเอง
พารามิเตอร์อ้างอิงปฏิกิริยาตัวเลือกที่ใช้งานอยู่ มีช่องที่ต้องกรอกดังนี้:
- Name – ชื่อพารามิเตอร์
- ต้นฉบับ – รหัสที่จะดำเนินการทุกครั้งที่ค่าของพารามิเตอร์จากฟิลด์พารามิเตอร์อ้างอิงมีการเปลี่ยนแปลง (ในกรณีของเรา เมื่อเราเลือกระหว่าง test1 และ test2)
- รายละเอียด – คำอธิบายโดยย่อของพารามิเตอร์
- ประเภทตัวเลือก – ประเภทของวัตถุที่ส่งคืนโดยสคริปต์ (ในกรณีของเราเราจะส่งคืนโค้ด html)
- พารามิเตอร์อ้างอิง – ชื่อของพารามิเตอร์ เมื่อค่ามีการเปลี่ยนแปลง โค้ดจากส่วนสคริปต์จะถูกดำเนินการ
ดำเนินการต่อโดยตรงเพื่อกรอกข้อมูลในฟิลด์ที่สำคัญที่สุดในพารามิเตอร์นี้ เรามีการใช้งานให้เลือกสองประเภท: การใช้ สคริปต์ Groovy หรือ สคริปต์เลอร์.
เราเลือกอันแรก เนื่องจาก Scriptler เป็นเพียงปลั๊กอินที่บันทึกสคริปต์ที่คุณเขียนไว้ก่อนหน้านี้ และอนุญาตให้คุณใช้สคริปต์เหล่านั้นในงานอื่นโดยไม่ต้องคัดลอกและวางอีกครั้ง
รหัส Groovy เพื่อรับคอมมิตทั้งหมดจากพื้นที่เก็บข้อมูลที่เลือก:
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()
โค้ดนี้จะได้รับชื่อไมโครเซอร์วิส (MICROSERVICE_NAME) เป็นอินพุตโดยไม่ต้องลงรายละเอียด และส่งคำขอไปยัง Bitbucket (วิธี getCommitsForMicroservice) โดยใช้ API และรับรหัสและข้อความคอมมิตของคอมมิตทั้งหมดสำหรับไมโครเซอร์วิสที่กำหนด
ตามที่กล่าวไว้ข้างต้น โค้ดนี้ควรส่งคืน html ที่จะแสดงบนเพจ สร้างด้วยพารามิเตอร์ ใน Jenkins เราจึงรวมค่าที่ได้รับทั้งหมดจาก Bitbucket ไว้ในรายการและเพิ่มเพื่อเลือก
ทำตามขั้นตอนครบแล้วเราก็จะได้หน้าสวยๆ แบบนี้ สร้างด้วยพารามิเตอร์.
หากคุณเลือกไมโครเซอร์วิส test1:
หากคุณเลือกไมโครเซอร์วิส test2:
ยอมรับว่าจะสะดวกกว่ามากสำหรับผู้ใช้ในการโต้ตอบกับงานของคุณในลักษณะนี้มากกว่าการคัดลอก URL ทุกครั้งและค้นหารหัสการคอมมิตที่จำเป็น
PS บทความนี้ให้ตัวอย่างที่เรียบง่ายมาก ซึ่งอาจใช้ไม่ได้จริงในรูปแบบนี้ เนื่องจากแอสเซมบลีมีพารามิเตอร์ที่แตกต่างกันมากมาย แต่จุดประสงค์ของบทความนี้คือเพื่อแสดงวิธีการทำงานของเครื่องมือ ไม่ใช่เพื่อแสดงวิธีแก้ปัญหาการทำงาน
PSS อย่างที่ผมเขียนไปก่อนหน้านี้ว่าถ้าบทความนี้มีประโยชน์ บทความถัดไปก็จะเป็นเรื่องเกี่ยวกับ การกำหนดค่าแบบไดนามิกของงาน Jenkins ผ่านรหัส.
ที่มา: will.com