#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