మంచి రోజు, హబ్ర్!
ఈ రోజు నేను ఉపయోగించే మార్గాలలో ఒకదానిని భాగస్వామ్యం చేయాలనుకుంటున్నాను
పరిచయం
DevOps వంటి సంక్షిప్తీకరణ IT కమ్యూనిటీకి కొత్తది కాదు. చాలా మంది వ్యక్తుల కోసం, “DevOps” అనే పదబంధం ఒక రకమైన మ్యాజిక్ బటన్తో అనుబంధించబడింది, క్లిక్ చేసినప్పుడు, అప్లికేషన్ కోడ్ స్వయంచాలకంగా అమలు చేయబడిన మరియు పరీక్షించిన అప్లికేషన్గా మారుతుంది (అంతా వాస్తవానికి మరింత క్లిష్టంగా ఉంటుంది, కానీ మేము అన్ని ప్రక్రియల నుండి సంగ్రహిస్తున్నాము).
కాబట్టి, నిర్వాహకులు ఒక క్లిక్తో అప్లికేషన్ను అమలు చేయడానికి వీలుగా, అటువంటి మ్యాజిక్ బటన్ను తయారు చేయడానికి మేము ఆర్డర్ని అందుకున్నాము. ఈ విధిని అమలు చేయడంలో వివిధ రకాలు ఉన్నాయి: ఏదైనా తక్షణ మెసెంజర్ల కోసం బోట్ను వ్రాయడం నుండి ప్రత్యేక అప్లికేషన్ను అభివృద్ధి చేయడం వరకు. అయినప్పటికీ, వీటన్నింటికీ ఒకే లక్ష్యం ఉంది - అప్లికేషన్ యొక్క బిల్డ్ మరియు విస్తరణను వీలైనంత పారదర్శకంగా మరియు సౌకర్యవంతంగా చేయడానికి ప్రారంభించడం.
మా విషయంలో మేము ఉపయోగిస్తాము జెంకిన్స్.
పని
అనుకూలమైన జెంకిన్స్ ఉద్యోగాన్ని సృష్టించండి, అది నిర్దిష్ట వెర్షన్ యొక్క ఎంచుకున్న మైక్రోసర్వీస్ యొక్క బిల్డ్ మరియు (లేదా) విస్తరణను ప్రారంభించవచ్చు.
ఇన్పుట్ డేటా
మేము వివిధ మైక్రోసర్వీస్ల సోర్స్ కోడ్ను కలిగి ఉన్న అనేక రిపోజిటరీలను కలిగి ఉన్నాము.
పారామితులను నిర్వచించడం
కింది పారామీటర్లను మా ఉద్యోగానికి ఇన్పుట్గా స్వీకరించాలి:
- మైక్రోసర్వీస్ కోడ్తో కూడిన రిపోజిటరీ యొక్క URL, మేము జాబ్ను అమలు చేస్తున్నప్పుడు నిర్మించాలనుకుంటున్నాము మరియు అమలు చేయాలనుకుంటున్నాము.
- బిల్డ్ జరిగే కమిట్ యొక్క ID.
అలాగే
ఈ పనిని పూర్తి చేయడానికి సులభమైన మార్గం స్ట్రింగ్ రకం యొక్క రెండు పారామితులను సృష్టించడం.
ఈ సందర్భంలో, వినియోగదారు రిపోజిటరీకి మరియు కమిట్ ఐడికి మార్గాన్ని మాన్యువల్గా నమోదు చేయాలి, ఇది పూర్తిగా అనుకూలమైనది కాదు.
AS TO BE
ఇప్పుడు దాని అన్ని ప్రయోజనాలను పరిగణనలోకి తీసుకోవడానికి మరొక రకమైన పారామితులను ప్రయత్నిద్దాం.
రకం ఎంపిక పరామితితో మొదటి పరామితిని సృష్టిద్దాం, రెండవది - యాక్టివ్ ఎంపికలు రియాక్టివ్ రిఫరెన్స్ పరామితి. ఛాయిస్ రకంతో ఉన్న పారామీటర్లో, మన మైక్రోసర్వీస్ల కోడ్ నిల్వ చేయబడిన రిపోజిటరీల పేర్లను ఎంపికల ఫీల్డ్లో మాన్యువల్గా జోడిస్తాము.
ప్రేక్షకులు ఈ కథనాన్ని ఇష్టపడితే, తరువాతి వ్యాసంలో నేను జెంకిన్స్లో విధులను కాన్ఫిగర్ చేసే ప్రక్రియను వివరిస్తాను, కోడ్ ద్వారా వివరణను ఉపయోగించి (కోడ్గా కాన్ఫిగరేషన్), అనగా. మేము రిపోజిటరీ పేర్లను మాన్యువల్గా నమోదు చేసి, పారామితులను సృష్టించాల్సిన అవసరం లేదు, ప్రతిదీ స్వయంచాలకంగా జరుగుతుంది (మా కోడ్ SCM నుండి రిపోజిటరీల జాబితాను అందుకుంటుంది మరియు ఈ జాబితాతో పరామితిని సృష్టిస్తుంది).
ప్రతి రిపోజిటరీ దాని స్వంత కమిట్ల జాబితాను కలిగి ఉన్నందున, మొదటి పరామితి (test1 లేదా test2) తీసుకునే విలువను బట్టి రెండవ పరామితి యొక్క విలువలు డైనమిక్గా పూరించబడతాయి.
సక్రియ ఎంపికలు రియాక్టివ్ సూచన పరామితి పూరించడానికి క్రింది ఫీల్డ్లు ఉన్నాయి:
- పేరు - పరామితి పేరు.
- స్క్రిప్ట్ - సూచించబడిన పరామితి ఫీల్డ్ నుండి పరామితి యొక్క విలువ మార్చబడిన ప్రతిసారీ అమలు చేయబడే కోడ్ (మన విషయంలో, మేము test1 మరియు test2 మధ్య ఎంచుకున్నప్పుడు).
- <span style="font-family: Mandali; "> టెండర్ వివరణ</span> - పరామితి యొక్క సంక్షిప్త వివరణ.
- ఎంపిక రకం - స్క్రిప్ట్ ద్వారా అందించబడిన వస్తువు రకం (మా విషయంలో మేము html కోడ్ని తిరిగి ఇస్తాము).
- సూచించిన పరామితి - పరామితి పేరు, దాని విలువ మార్చబడినప్పుడు, స్క్రిప్ట్ విభాగం నుండి కోడ్ అమలు చేయబడుతుంది.
ఈ పరామితిలో అత్యంత ముఖ్యమైన ఫీల్డ్ను పూరించడానికి నేరుగా ముందుకు వెళ్దాం. మేము ఎంచుకోవడానికి రెండు రకాల అమలును అందిస్తున్నాము: ఉపయోగించడం గ్రూవీ స్క్రిప్ట్ లేదా స్క్రిప్ట్లర్ స్క్రిప్ట్.
మేము మొదటిదాన్ని ఎంచుకుంటాము, ఎందుకంటే స్క్రిప్ట్లర్ మీరు ఇంతకు ముందు వ్రాసిన స్క్రిప్ట్లను సేవ్ చేసే ప్లగ్ఇన్ మరియు మళ్లీ కాపీ-పేస్ట్ చేయకుండా ఇతర పనులలో వాటిని ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది.
ఎంచుకున్న రిపోజిటరీ నుండి అన్ని కమిట్లను పొందడానికి గ్రూవీ కోడ్:
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 (పద్ధతి మైక్రోసర్వీస్ కోసం కమిట్లను పొందండి) దాని APIని ఉపయోగిస్తుంది మరియు ఇచ్చిన మైక్రోసర్వీస్ కోసం అన్ని కమిట్ల యొక్క id మరియు కమిట్ సందేశాన్ని పొందుతుంది.
ముందుగా చెప్పినట్లుగా, ఈ కోడ్ htmlని తిరిగి అందించాలి, అది పేజీలో ప్రదర్శించబడుతుంది పారామితులతో నిర్మించండి జెంకిన్స్లో, కాబట్టి మేము బిట్బకెట్ నుండి అందుకున్న అన్ని విలువలను జాబితాలో చుట్టి, వాటిని ఎంచుకోవడానికి జోడిస్తాము.
అన్ని దశలను పూర్తి చేసిన తర్వాత, అటువంటి అందమైన పేజీని మనం పొందాలి పారామితులతో నిర్మించండి.
మీరు test1 మైక్రోసర్వీస్ని ఎంచుకుంటే:
మీరు test2 మైక్రోసర్వీస్ని ఎంచుకుంటే:
ప్రతిసారీ urlని కాపీ చేయడం మరియు అవసరమైన కమిట్ ఐడి కోసం వెతకడం కంటే ఈ విధంగా మీ టాస్క్తో పరస్పర చర్య చేయడం వినియోగదారుకు చాలా సౌకర్యవంతంగా ఉంటుందని అంగీకరిస్తున్నారు.
PS ఈ కథనం చాలా సరళమైన ఉదాహరణను అందిస్తుంది, ఇది ఈ రూపంలో ఆచరణాత్మకంగా ఉపయోగించబడకపోవచ్చు, ఎందుకంటే అసెంబ్లీలు అనేక విభిన్న పారామితులను కలిగి ఉంటాయి, అయితే ఈ వ్యాసం యొక్క ఉద్దేశ్యం సాధనం ఎలా పనిచేస్తుందో చూపడం, పని చేసే పరిష్కారాన్ని అందించడం కాదు.
PSS నేను ఇంతకు ముందు వ్రాసినట్లుగా, ఈ వ్యాసం ఉపయోగకరంగా ఉంటే, తదుపరిది గురించి ఉంటుంది కోడ్ ద్వారా జెంకిన్స్ టాస్క్ల యొక్క డైనమిక్ కాన్ఫిగరేషన్.
మూలం: www.habr.com