ื™ืฆื™ืจืช ืคืจืžื˜ืจื™ื ื“ื™ื ืžื™ื™ื ื‘ืขื‘ื•ื“ืช ื’'ื ืงื™ื ืก, ืื• ืื™ืš ืœื”ืคื•ืš ืืช ื”ืžืฉื™ืžื” ืฉืœืš ืœื™ื“ื™ื“ื•ืชื™ืช ืœืžืฉืชืžืฉ

ื™ื•ื ื˜ื•ื‘, ื”ืื‘ืจ!

ื”ื™ื•ื ืื ื™ ืจื•ืฆื” ืœื—ืœื•ืง ืืช ืื—ืช ื”ื“ืจื›ื™ื ืœืฉื™ืžื•ืฉ ืชื•ืกืฃ Active Choices ืœืขืฉื•ืช ืืช ื”ืžืฉื™ืžื” ื‘ ื’'ื ืงื™ื ืก ื”ืžืื•ื—ื“ ื•ื”ื™ื“ื™ื“ื•ืชื™ ื‘ื™ื•ืชืจ ืœืžืฉืชืžืฉ.

ืžื‘ื•ื

ืงื™ืฆื•ืจ ื›ื–ื” ื›ืžื• DevOps ื”ื•ื ื›ื‘ืจ ืœื ืžืฉื”ื• ื—ื“ืฉ ืขื‘ื•ืจ ืงื”ื™ืœืช ื”-IT. ืขื‘ื•ืจ ืื ืฉื™ื ืจื‘ื™ื, ื”ื‘ื™ื˜ื•ื™ "ืœืขืฉื•ืช DevOps" ืžืฉื•ื™ืš ืœืื™ื–ืฉื”ื• ื›ืคืชื•ืจ ืงืกื, ื›ืืฉืจ ืœื•ื—ืฆื™ื ืขืœื™ื•, ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื” ื”ื•ืคืš ืื•ื˜ื•ืžื˜ื™ืช ืœืืคืœื™ืงืฆื™ื” ืคืจื•ืกื” ื•ื‘ื“ื•ืงื” (ื”ื›ืœ ืœืžืขืฉื” ื™ื•ืชืจ ืžืกื•ื‘ืš, ืื‘ืœ ืื ื—ื ื• ืžื•ืคืฉื˜ื™ื ืžื›ืœ ื”ืชื”ืœื™ื›ื™ื).

ืื– ืงื™ื‘ืœื ื• ื”ื•ืจืื” ืœื™ืฆื•ืจ ื›ืคืชื•ืจ ืงืกื ื›ื–ื” ื›ื“ื™ ืฉืžื ื”ืœื™ ืžืขืจื›ืช ื™ื•ื›ืœื• ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืœื—ื™ืฆื” ืื—ืช. ื™ืฉื ื ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ื™ื™ืฉื•ื ืฉืœ ืžืฉื™ืžื” ื–ื•: ืžื›ืชื™ื‘ืช ื‘ื•ื˜ ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ืžืกืจื™ื ื”ืžื™ื™ื“ื™ื™ื ื•ืขื“ ืœืคื™ืชื•ื— ืืคืœื™ืงืฆื™ื” ื ืคืจื“ืช. ืขื ื–ืืช, ืœื›ืœ ื–ื” ื™ืฉ ืื•ืชื” ืžื˜ืจื” - ืœื”ืคื•ืš ืืช ื”ืชื—ืœืช ื”ื‘ื ื™ื™ื” ื•ื”ืคืจื™ืกื” ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืœืฉืงื•ืคื” ื•ื ื•ื—ื” ื›ื›ืœ ื”ืืคืฉืจ.

ื‘ืžืงืจื” ืฉืœื ื• ื ืฉืชืžืฉ ื’'ื ืงื™ื ืก.


ื™ืฆื™ืจืช ืคืจืžื˜ืจื™ื ื“ื™ื ืžื™ื™ื ื‘ืขื‘ื•ื“ืช ื’'ื ืงื™ื ืก, ืื• ืื™ืš ืœื”ืคื•ืš ืืช ื”ืžืฉื™ืžื” ืฉืœืš ืœื™ื“ื™ื“ื•ืชื™ืช ืœืžืฉืชืžืฉ

ืžืฉื™ืžื”

ืฆื•ืจ ืขื‘ื•ื“ื” ื ื•ื—ื” ืฉืœ ื’'ื ืงื™ื ืก ืฉืชืคืขื™ืœ ืืช ื”ื‘ื ื™ื™ื” ื•(ืื•) ื”ืคืจื™ืกื” ืฉืœ ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช ื”ื ื‘ื—ืจ ืฉืœ ื’ืจืกื” ืžืกื•ื™ืžืช.

ื™ืฆื™ืจืช ืคืจืžื˜ืจื™ื ื“ื™ื ืžื™ื™ื ื‘ืขื‘ื•ื“ืช ื’'ื ืงื™ื ืก, ืื• ืื™ืš ืœื”ืคื•ืš ืืช ื”ืžืฉื™ืžื” ืฉืœืš ืœื™ื“ื™ื“ื•ืชื™ืช ืœืžืฉืชืžืฉ

ืงืœื˜ ื ืชื•ื ื™ื

ื™ืฉ ืœื ื• ืžืกืคืจ ืžืื’ืจื™ื ื”ืžื›ื™ืœื™ื ืืช ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื.

ื”ื’ื“ืจืช ืคืจืžื˜ืจื™ื

ื™ืฉ ืœืงื‘ืœ ืืช ื”ืคืจืžื˜ืจื™ื ื”ื‘ืื™ื ื›ืงืœื˜ ืœืชืคืงื™ื“ื ื•:

  1. ื›ืชื•ื‘ืช ื”ืืชืจ ืฉืœ ื”ืžืื’ืจ ืขื ืงื•ื“ ื”ืžื™ืงืจื•-ืฉื™ืจื•ืช ืฉืื ื• ืจื•ืฆื™ื ืœื‘ื ื•ืช ื•ืœืคืจื•ืก ื‘ืขืช ื”ืคืขืœืช ื”ืขื‘ื•ื“ื”.
  2. ืžื–ื”ื” ื”-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 ืคืจืžื˜ืจ ื”ืชื™ื™ื—ืกื•ืช ืชื’ื•ื‘ืชื™ ื™ืฉ ืœืžืœื ืืช ื”ืฉื“ื•ืช ื”ื‘ืื™ื:

  1. ืฉื - ืฉื ืคืจืžื˜ืจ.
  2. ืชืกืจื™ื˜ โ€“ ืงื•ื“ ืฉื™ื‘ื•ืฆืข ื‘ื›ืœ ืคืขื ืฉืขืจืš ื”ืคืจืžื˜ืจ ืžื”ืฉื“ื” Referenced parameter ื™ืฉืชื ื” (ื‘ืžืงืจื” ืฉืœื ื•, ื›ืืฉืจ ืื ื• ื‘ื•ื—ืจื™ื ื‘ื™ืŸ test1 ืœ-test2).
  3. ืชื™ืื•ืจ - ืชื™ืื•ืจ ืงืฆืจ ืฉืœ ื”ืคืจืžื˜ืจ.
  4. ืกื•ื’ ื‘ื—ื™ืจื” โ€“ ืกื•ื’ ื”ืื•ื‘ื™ื™ืงื˜ ื”ืžื•ื—ื–ืจ ืžื”ืกืงืจื™ืคื˜ (ื‘ืžืงืจื” ืฉืœื ื• ื ื—ื–ื™ืจ ืงื•ื“ html).
  5. ืคืจืžื˜ืจ ืžื•ื–ื›ืจ โ€“ ืฉื ื”ืคืจืžื˜ืจ, ื›ืืฉืจ ืขืจื›ื• ื™ืฉืชื ื”, ื”ืงื•ื“ ืžืงื˜ืข ื”ืกืงืจื™ืคื˜ ื™ื‘ื•ืฆืข.

ื™ืฆื™ืจืช ืคืจืžื˜ืจื™ื ื“ื™ื ืžื™ื™ื ื‘ืขื‘ื•ื“ืช ื’'ื ืงื™ื ืก, ืื• ืื™ืš ืœื”ืคื•ืš ืืช ื”ืžืฉื™ืžื” ืฉืœืš ืœื™ื“ื™ื“ื•ืชื™ืช ืœืžืฉืชืžืฉ

ื”ื‘ื” ื ืžืฉื™ืš ื™ืฉื™ืจื•ืช ืœืžื™ืœื•ื™ ื”ืฉื“ื” ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ ื‘ืคืจืžื˜ืจ ื–ื”. ืžื•ืฆืขื™ื ืœื ื• ืฉื ื™ ืกื•ื’ื™ ื™ื™ืฉื•ื ืœื‘ื—ื™ืจื”: ืฉื™ืžื•ืฉ ืชืกืจื™ื˜ ื’ืจื•ื‘ื™ ืื• 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”