Jenkins — Active Choice: Harbor — Images tag

 

Для параметризованной сборки с выбором тега образа, понадобится плагин 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 = 'harbor_credentials'
harborRepo = 'https://harbor.artem.services/api/repositories/artem/site'

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
  com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{
    it.id == credentialsId}

def addr = "${harborRepo}/tags"
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 slurper = new JsonSlurper()
def parsed = slurper.parseText(response_json)

def tags=[]

for (tag in parsed){
    tags.add(tag.name);
}

return tags

 

Где значение переменных, "credentialsId" - Jenkins Credentials ID с логином и паролем к Harbor'у;

"harborRepo" - полный путь к нужному репозиторию;

 

 

Тоже самое, но уже через Pipeline

Pipeline:

properties([
  parameters([
    [$class: 'CascadeChoiceParameter', 
      choiceType: 'PT_SINGLE_SELECT', 
      description: 'Select Image',
      filterLength: 1,
      filterable: false,
      name: 'ImageTag', 
      script: [
        $class: 'GroovyScript', 
        script: [
          classpath: [], 
          sandbox: false, 
          script: 
            '''
            import jenkins.model.*
            import groovy.json.JsonSlurper

            credentialsId = 'harbor_credentials'
            harborRepo = 'https://harbor.artem.services/api/repositories/artem/site'

            def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
              com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class, Jenkins.instance, null, null ).find{
                it.id == credentialsId}

            def addr = "${harborRepo}/tags"
            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 slurper = new JsonSlurper()
            def parsed = slurper.parseText(response_json)

            def tags=[]

            for (tag in parsed){
                tags.add(tag.name);
            }

            return tags
            '''
        ]
      ]
    ]
  ])
])
0 0 vote
Article Rating

Метки: Метки

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments