Как выполнить пометку Git

#git #docker #jenkins #github

#git #docker #дженкинс #github

Вопрос:

У меня есть Jenkinsfile (многоотраслевой конвейер), который должен запускаться каждый раз, когда кто-то что-то передает в любую ветку в Jenkins.

Моя идея заключается в том, что он запускает сборку, и каждый раз, когда тесты проходят, он помечает репозиторий git и изображение docker новым тегом.

В настоящее время каждая сборка создает образ Docker под названием application: latest. Было бы неплохо реализовать некоторую систему тегов как в репозитории Git, так и в изображениях Docker.

Чтобы в моем репозитории Github были теги 0.0.1, 0.0.2, 0.0.3. И что изображение Docker также передается как application: 0.0.1 в Docker hub. Тогда также последняя помеченная сборка должна называться не просто application: 0.0.3, но и application: latest.

Есть идеи, как я могу реализовать такую систему с помощью Jenkins в Github?

Это мой текущий файл Jenkins:

 pipeline {
  agent any
  options {
    buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '10'))
  }
  environment {
    DOCKER_CREDS = credentials('dockeruser-dockerhub-password')
  }
  stages {
    stage('Git clone') {
      /*
      This is needed for local development, because Jenkins uses locally pasted pipeline code in a textarea box and doesn't know where the Git repo is.
      This also means we have no multibranch, but that's no problem for local development.
      */
      steps {
        git url: 'https://github.com/gituser/denpal', branch: 'feature/Jenkinsfile'
      }
    }
    stage('Docker login') {
      steps {
        sh """
        docker login --username dockeruser --password $DOCKER_CREDS
        """
      }
    }
    stage('Docker-compose') {
      steps {
        sh '''
        docker-compose config -q
        COMPOSE_PROJECT_NAME=denpal docker-compose down
        COMPOSE_PROJECT_NAME=denpal docker-compose up -d --build "$@"
        '''
      }
    }
    stage('Docker push images') {
      steps {
        sh """
        docker tag denpal:latest dockername/denpal:latest
        docker push dockername/denpal:latest
        docker tag denpal_nginx:latest dockername/denpal_nginx:latest
        docker push dockername/denpal_nginx:latest
        docker tag denpal_php:latest dockername/denpal_php:latest
        docker push dockername/denpal_php:latest
        """
      }
    }
    stage('Verification tests') {
      steps {
        sh """
        docker-compose exec -T cli drush status
        """
        /*
        make this work, syntax error, """-issue?
        if [ $? -eq 0 ]; then
          echo "OK!"
        else
          echo "FAIL"
        fi
        */
      }
    }
  }
}
  

Комментарии:

1. Почему бы просто не пометить изображение заново, а затем снова нажать с latest тегом? Кроме того, этот конвейер можно значительно очистить с помощью плагина Docker Pipeline.

Ответ №1:

вы используете maven или gradle? потому что у меня была такая же проблема, и я исправил версию uppgrad, добавив скрипт, который генерирует файл dockerfile из шаблона. вы можете проверить мой проект github на наличие скрипта groovy