Для параметризованной сборки с выбором тега образа, понадобится плагин Active Choices
Переходим в настройки Jenkins'а
Раздел "Управление плагинами"
Переходим к вкладке "Доступные" и в поиске указываем "Active Choices"
Устанавливаем его. Так же необходим плагин Amazon Web Services SDK
Создаем "New Item" — "Pipeline", указываем, что это будет параметризованной сборка, и добавляем параметр "Active Choices Reactive Parameter"
Указываем, что это "Groovy Script" и вставляем туда следующее:
import jenkins.model.* import groovy.json.JsonSlurper credentialsId = 'artem-github' gitUri = '[email protected]:artem-gatchenko/ansible-openvpn-centos-7.git' def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{ it.id == credentialsId} def slurper = new JsonSlurper() def account = gitUri.split(":")[-1].split("/")[0] def repo = gitUri.split(":")[-1].split("/")[-1].split("\\.")[0] def addr = "https://api.github.com/repos/${account}/${repo}/commits" def authString = "${creds.username}:${creds.password}".getBytes().encodeBase64().toString() def conn = addr.toURL().openConnection() conn.setRequestProperty( "Authorization", "Basic ${authString}" ) def response_json = "${conn.content.text}" def parsed = slurper.parseText(response_json) def commit = [] commit.add("Latest") for (int i = 0; i < parsed.size(); i++) { commit.add(parsed.get(i).sha) } return commit
Где значение переменных, "credentialsId" — Jenkins Credentials ID с токеном к GitHub'у;
"gitUri" — полный путь к нужному репозиторию;
Тоже самое, но уже через Pipeline
Pipeline:
properties([ parameters([ [$class: 'StringParameterDefinition', defaultValue: '[email protected]:artem-gatchenko/ansible-openvpn-centos-7.git', description: 'Git repository URI', name: 'gitUri', trim: true ], [$class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', description: 'Select Image', filterLength: 1, filterable: false, referencedParameters: 'GIT_URI', name: 'GIT_COMMIT_ID', script: [ $class: 'GroovyScript', script: [ classpath: [], sandbox: false, script: ''' import jenkins.model.* import groovy.json.JsonSlurper credentialsId = 'artem-github' def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{ it.id == credentialsId} def slurper = new JsonSlurper() def account = gitUri.split(":")[-1].split("/")[0] def repo = gitUri.split(":")[-1].split("/")[-1].split("\\\\.")[0] def addr = "https://api.github.com/repos/${account}/${repo}/commits" def authString = "${creds.username}:${creds.password}".getBytes().encodeBase64().toString() def conn = addr.toURL().openConnection() conn.setRequestProperty( "Authorization", "Basic ${authString}" ) def response_json = "${conn.content.text}" def parsed = slurper.parseText(response_json) def commit = [] commit.add("Latest") for (int i = 0; i < parsed.size(); i++) { commit.add(parsed.get(i).sha) } return commit ''' ] ] ] ]) ])