ืืื ืืื, ืืืืจ!
ืืืื ืื ื ืจืืฆื ืืืืืง ืืช ืืืช ืืืจืืื ืืฉืืืืฉ
ืืืื
ืงืืฆืืจ ืืื ืืื DevOps ืืื ืืืจ ืื ืืฉืื ืืืฉ ืขืืืจ ืงืืืืช ื-IT. ืขืืืจ ืื ืฉืื ืจืืื, ืืืืืื "ืืขืฉืืช DevOps" ืืฉืืื ืืืืืฉืื ืืคืชืืจ ืงืกื, ืืืฉืจ ืืืืฆืื ืขืืื, ืงืื ืืืคืืืงืฆืื ืืืคื ืืืืืืืืช ืืืคืืืงืฆืื ืคืจืืกื ืืืืืงื (ืืื ืืืขืฉื ืืืชืจ ืืกืืื, ืืื ืื ืื ื ืืืคืฉืืื ืืื ืืชืืืืืื).
ืื ืงืืืื ื ืืืจืื ืืืฆืืจ ืืคืชืืจ ืงืกื ืืื ืืื ืฉืื ืืื ืืขืจืืช ืืืืื ืืคืจืืก ืืช ืืืคืืืงืฆืื ืืืืืฆื ืืืช. ืืฉื ื ืกืืืื ืฉืื ืื ืฉื ืืืฉืื ืฉื ืืฉืืื ืื: ืืืชืืืช ืืื ืขืืืจ ืื ืืื ืืืืกืจืื ืืืืืืืื ืืขื ืืคืืชืื ืืคืืืงืฆืื ื ืคืจืืช. ืขื ืืืช, ืืื ืื ืืฉ ืืืชื ืืืจื - ืืืคืื ืืช ืืชืืืช ืืื ืืื ืืืคืจืืกื ืฉื ืืืคืืืงืฆืื ืืฉืงืืคื ืื ืืื ืืื ืืืคืฉืจ.
ืืืงืจื ืฉืื ื ื ืฉืชืืฉ ื'ื ืงืื ืก.
ืืฉืืื
ืฆืืจ ืขืืืื ื ืืื ืฉื ื'ื ืงืื ืก ืฉืชืคืขืื ืืช ืืื ืืื ื(ืื) ืืคืจืืกื ืฉื ืืืืงืจื-ืฉืืจืืช ืื ืืืจ ืฉื ืืจืกื ืืกืืืืช.
ืงืื ื ืชืื ืื
ืืฉ ืื ื ืืกืคืจ ืืืืจืื ืืืืืืื ืืช ืงืื ืืืงืืจ ืฉื ืืืงืจื-ืฉืืจืืชืื ืฉืื ืื.
ืืืืจืช ืคืจืืืจืื
ืืฉ ืืงืื ืืช ืืคืจืืืจืื ืืืืื ืืงืื ืืชืคืงืืื ื:
- ืืชืืืช ืืืชืจ ืฉื ืืืืืจ ืขื ืงืื ืืืืงืจื-ืฉืืจืืช ืฉืื ื ืจืืฆืื ืืื ืืช ืืืคืจืืก ืืขืช ืืคืขืืช ืืขืืืื.
- ืืืื ื-commit ืฉืืื ื ืืื ืืื ืชืชืืฆืข.
AS IS
ืืืจื ืืงืื ืืืืชืจ ืืืฆืข ืืฉืืื ืื ืืื ืืืฆืืจ ืฉื ื ืคืจืืืจืื ืืกืื String.
ืืืงืจื ืื, ืืืฉืชืืฉ ืืฆืืจื ืืืืื ืืื ืืช ืืช ืื ืชืื ืืืืืจ ืืืช ืืืื ื-commit, ืืื, ืืชื ืืืื, ืื ืืืืจื ื ืื.
AS TO BE
ืขืืฉืื ืืืื ื ื ืกื ืกืื ืืืจ ืฉื ืคืจืืืจืื ืืื ืืฉืงืื ืืช ืื ืืืชืจืื ืืช ืฉืื.
ืืื ื ืืฆืืจ ืืช ืืคืจืืืจ ืืจืืฉืื ืขื ืืกืื Choice Parameter, ืืฉื ื - Active Choices Reactive Reference Parameter. ืืคืจืืืจ ืขื ืกืื Choice, ื ืืกืืฃ ืืื ืืช ืืฉืื Choices ืืช ืฉืืืช ืืืืืจืื ืฉืืื ืืืืืกื ืืงืื ืฉื ืืืืงืจื-ืฉืืจืืชืื ืฉืื ื.
ืื ืืงืื ืืืื ืืช ืืืืืจ ืืื, ืื ืืืืืจ ืืื ืืชืืจ ืืช ืชืืืื ืืืืจืช ืืืฉืืืืช ืื'ื ืงืื ืก, ืืืืฆืขืืช ืชืืืืจ ืืจื ืงืื (Configuration as code), ืืืืืจ. ืื ื ืฆืืจื ืืืืื ืืื ืืช ืฉืืืช ืืืืจืื ืืืืฆืืจ ืคืจืืืจืื, ืืื ืืงืจื ืืืืืืืืช (ืืงืื ืฉืื ื ืืงืื ืจืฉืืื ืฉื ืืืืจืื ื-SCM ืืืฆืืจ ืคืจืืืจ ืขื ืืจืฉืืื ืืื).
ืืขืจืืื ืฉื ืืคืจืืืจ ืืฉื ื ืืชืืืื ืืืืคื ืืื ืื, ืืืชืื ืืขืจื ืฉืืคืจืืืจ ืืจืืฉืื ืืืงื (test1 ืื test2), ืืืืืื ืฉืืื ืืืืจ ืืฉ ืจืฉืืืช ืืืืืืืช ืืฉืื.
Active Choices ืคืจืืืจ ืืชืืืืกืืช ืชืืืืชื ืืฉ ืืืื ืืช ืืฉืืืช ืืืืื:
- ืฉื - ืฉื ืคืจืืืจ.
- ืชืกืจืื โ ืงืื ืฉืืืืฆืข ืืื ืคืขื ืฉืขืจื ืืคืจืืืจ ืืืฉืื Referenced parameter ืืฉืชื ื (ืืืงืจื ืฉืื ื, ืืืฉืจ ืื ื ืืืืจืื ืืื test1 ื-test2).
- ืชืืืืจ - ืชืืืืจ ืงืฆืจ ืฉื ืืคืจืืืจ.
- ืกืื ืืืืจื โ ืกืื ืืืืืืืงื ืืืืืืจ ืืืกืงืจืืคื (ืืืงืจื ืฉืื ื ื ืืืืจ ืงืื html).
- ืคืจืืืจ ืืืืืจ โ ืฉื ืืคืจืืืจ, ืืืฉืจ ืขืจืื ืืฉืชื ื, ืืงืื ืืงืืข ืืกืงืจืืคื ืืืืฆืข.
ืืื ื ืืฉืื ืืฉืืจืืช ืืืืืื ืืฉืื ืืืฉืื ืืืืชืจ ืืคืจืืืจ ืื. ืืืฆืขืื ืื ื ืฉื ื ืกืืื ืืืฉืื ืืืืืจื: ืฉืืืืฉ ืชืกืจืื ืืจืืื ืื Scriptler Script.
ืื ื ืืืืจืื ืืจืืฉืื, ืฉืื Scriptler ืืื ืจืง ืชืืกืฃ ืฉืฉืืืจ ืกืงืจืืคืืื ืฉืืชืืช ืืขืืจ ืืืืคืฉืจ ืื ืืืฉืชืืฉ ืืื ืืืฉืืืืช ืืืจืืช ืืืื ืืืขืชืืง ืฉืื.
ืงืื ืืจืืื ืืื ืืงืื ืืช ืื ืืืชืืืืืืืืช ืืืืืืจ ืื ืืืจ:
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) ืืงืื ืืฉืืื ืืงืฉื ืื ืกืืืืืช (ืฉืืื getCommitsForMicroservice) ืืืืฆืขืืช ื-API ืฉืื, ืืืงืื ืืช ืืืืขืช ืืืืื ืืืืชืืืืืืช ืฉื ืื ืืืชืืืืืืืืช ืขืืืจ ืืืงืจื-ืฉืืจืืช ื ืชืื.
ืืคื ืฉืืืืืจ ืงืืื ืืื, ืงืื ืื ืืืืจ ืืืืืืจ html ืฉืืืฆื ืืขืืื ืื ื ืขื ืคืจืืืจืื ืื'ื ืงืื ืก, ืื ืื ืื ื ืขืืืคืื ืืช ืื ืืขืจืืื ืฉืืชืงืืื ื-Bitbucket ืืจืฉืืื ืืืืกืืคืื ืืืชื ืืืืืจื.
ืืืืจ ืืฉืืืช ืื ืืฉืืืื, ืื ืื ื ืืืืจืื ืืงืื ืืฃ ืื ืื ืืคื ืื ื ืขื ืคืจืืืจืื.
ืื ืืืจืช ื-test1 microservice:
ืื ืืืจืช ื-test2 microservice:
ืืกืืื ืฉืืจืื ืืืชืจ ื ืื ืืืฉืชืืฉ ืืงืืื ืืื ืืจืืงืฆืื ืขื ืืืฉืืื ืฉืื ืืืจื ืื ืืืฉืจ ืืืขืชืืง ืืช ื-url ืืื ืคืขื ืืืืคืฉ ืืช ืืืื ื-commit ืื ืืจืฉ.
ื .ื. ืืืืจ ืื ืืกืคืง ืืืืื ืืืื ืคืฉืืื, ืฉืืืื ืื ืชืืขืื ืืฆืืจื ืืขืฉืืช ืืฆืืจื ืื, ืฉืื ืืืืืืืื ืืฉ ืขืื ืืจืื ืคืจืืืจืื ืฉืื ืื, ืืื ืืืจืช ืืืืืจ ืืื ืืืืชื ืืืจืืืช ืืื ืืืื ืขืืื, ืื ืืกืคืง ืคืชืจืื ืขืืื.
Pss ืืคื ืฉืืชืืชื ืงืืื ืืื, ืื ืืืืืจ ืืื ืฉืืืืฉื, ืื ืืืืืจ ืืื ืืขืกืืง ืชืฆืืจื ืืื ืืืช ืฉื ืืฉืืืืช ื'ื ืงืื ืก ืืืืฆืขืืช ืงืื.
ืืงืืจ: www.habr.com