การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

ขอให้เป็นวันที่ดี, Habr!

วันนี้ผมอยากจะแบ่งปันวิธีการใช้งานวิธีหนึ่ง ปลั๊กอินตัวเลือกที่ใช้งานอยู่ ทำหน้าที่ใน เจนกิ้นส์ เป็นหนึ่งเดียวและใช้งานง่ายที่สุด

การแนะนำ

ตัวย่อเช่น DevOps ไม่ใช่สิ่งใหม่สำหรับชุมชนไอทีอีกต่อไป สำหรับหลายๆ คน วลี “do DevOps” มีความเชื่อมโยงกับปุ่มวิเศษบางประเภท เมื่อคลิกแล้ว โค้ดของแอปพลิเคชันจะเปลี่ยนเป็นแอปพลิเคชันที่ปรับใช้และทดสอบโดยอัตโนมัติ (จริงๆ แล้วทุกอย่างซับซ้อนกว่านั้น แต่เรากำลังแยกออกจากกระบวนการทั้งหมด)

ดังนั้นเราจึงได้รับคำสั่งให้สร้างปุ่มวิเศษเพื่อให้ผู้ดูแลระบบสามารถปรับใช้แอปพลิเคชันได้ด้วยคลิกเดียว การดำเนินงานนี้มีหลายประเภท: ตั้งแต่การเขียนบอทสำหรับโปรแกรมส่งข้อความด่วนใด ๆ ไปจนถึงการพัฒนาแอปพลิเคชันแยกต่างหาก อย่างไรก็ตาม ทั้งหมดนี้มีเป้าหมายเดียวกัน - เพื่อให้การเริ่มต้นการสร้างและการปรับใช้แอปพลิเคชันมีความโปร่งใสและสะดวกที่สุดเท่าที่จะเป็นไปได้

ในกรณีของเราเราจะใช้ เจนกิ้นส์.


การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

งาน

สร้างงาน Jenkins ที่สะดวกสบายซึ่งจะเปิดตัวบิลด์และ (หรือ) การใช้งานไมโครเซอร์วิสที่เลือกของเวอร์ชันใดเวอร์ชันหนึ่ง

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

ป้อนข้อมูล

เรามีแหล่งเก็บข้อมูลหลายแห่งที่มีซอร์สโค้ดของไมโครเซอร์วิสต่างๆ

การกำหนดพารามิเตอร์

ควรได้รับพารามิเตอร์ต่อไปนี้เป็นอินพุตสำหรับงานของเรา:

  1. URL ของพื้นที่เก็บข้อมูลที่มีโค้ดไมโครเซอร์วิสที่เราต้องการสร้างและปรับใช้เมื่อรันงาน
  2. ID ของคอมมิตที่ build จะเกิดขึ้น

อย่างที่เป็น

วิธีที่ง่ายที่สุดในการทำงานนี้ให้สำเร็จคือการสร้างพารามิเตอร์ประเภท String สองตัว

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

ในกรณีนี้ ผู้ใช้จะต้องป้อนเส้นทางไปยังที่เก็บด้วยตนเองและรหัสการคอมมิต ซึ่งคุณเห็นว่าไม่สะดวกเลย

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

เท่าที่จะเป็น

ทีนี้ลองพารามิเตอร์ประเภทอื่นเพื่อพิจารณาข้อดีทั้งหมดของมัน
เรามาสร้างพารามิเตอร์แรกด้วยประเภทพารามิเตอร์ตัวเลือก พารามิเตอร์ตัวที่สอง - พารามิเตอร์อ้างอิงปฏิกิริยาตัวเลือกที่ใช้งานอยู่ ในพารามิเตอร์ที่มีประเภทตัวเลือก เราจะเพิ่มชื่อของที่เก็บโค้ดของไมโครเซอร์วิสของเราลงในฟิลด์ตัวเลือกด้วยตนเอง

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

หากผู้ชมชอบบทความนี้ในบทความถัดไปฉันจะอธิบายกระบวนการกำหนดค่างานในเจนกินส์โดยใช้คำอธิบายผ่านโค้ด (การกำหนดค่าเป็นโค้ด) เช่น เราไม่จำเป็นต้องป้อนชื่อที่เก็บและสร้างพารามิเตอร์ด้วยตนเอง ทุกอย่างจะเกิดขึ้นโดยอัตโนมัติ (โค้ดของเราจะได้รับรายการที่เก็บจาก SCM และสร้างพารามิเตอร์ด้วยรายการนี้)

ค่าของพารามิเตอร์ตัวที่สองจะถูกเติมแบบไดนามิกขึ้นอยู่กับค่าที่พารามิเตอร์ตัวแรกใช้ (test1 หรือ test2) เนื่องจากแต่ละที่เก็บมีรายการคอมมิตของตัวเอง

พารามิเตอร์อ้างอิงปฏิกิริยาตัวเลือกที่ใช้งานอยู่ มีช่องที่ต้องกรอกดังนี้:

  1. Name – ชื่อพารามิเตอร์
  2. ต้นฉบับ – รหัสที่จะดำเนินการทุกครั้งที่ค่าของพารามิเตอร์จากฟิลด์พารามิเตอร์อ้างอิงมีการเปลี่ยนแปลง (ในกรณีของเรา เมื่อเราเลือกระหว่าง test1 และ test2)
  3. รายละเอียด – คำอธิบายโดยย่อของพารามิเตอร์
  4. ประเภทตัวเลือก – ประเภทของวัตถุที่ส่งคืนโดยสคริปต์ (ในกรณีของเราเราจะส่งคืนโค้ด html)
  5. พารามิเตอร์อ้างอิง – ชื่อของพารามิเตอร์ เมื่อค่ามีการเปลี่ยนแปลง โค้ดจากส่วนสคริปต์จะถูกดำเนินการ

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

ดำเนินการต่อโดยตรงเพื่อกรอกข้อมูลในฟิลด์ที่สำคัญที่สุดในพารามิเตอร์นี้ เรามีการใช้งานให้เลือกสองประเภท: การใช้ สคริปต์ 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:

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

หากคุณเลือกไมโครเซอร์วิส test2:

การสร้างพารามิเตอร์แบบไดนามิกในงาน Jenkins หรือวิธีทำให้งานของคุณเป็นมิตรต่อผู้ใช้

ยอมรับว่าจะสะดวกกว่ามากสำหรับผู้ใช้ในการโต้ตอบกับงานของคุณในลักษณะนี้มากกว่าการคัดลอก URL ทุกครั้งและค้นหารหัสการคอมมิตที่จำเป็น

PS บทความนี้ให้ตัวอย่างที่เรียบง่ายมาก ซึ่งอาจใช้ไม่ได้จริงในรูปแบบนี้ เนื่องจากแอสเซมบลีมีพารามิเตอร์ที่แตกต่างกันมากมาย แต่จุดประสงค์ของบทความนี้คือเพื่อแสดงวิธีการทำงานของเครื่องมือ ไม่ใช่เพื่อแสดงวิธีแก้ปัญหาการทำงาน

PSS อย่างที่ผมเขียนไปก่อนหน้านี้ว่าถ้าบทความนี้มีประโยชน์ บทความถัดไปก็จะเป็นเรื่องเกี่ยวกับ การกำหนดค่าแบบไดนามิกของงาน Jenkins ผ่านรหัส.

ที่มา: will.com

เพิ่มความคิดเห็น