Если вы «должны» использовать регулярное выражение, пропустите проблему, проанализировав принятые перестановки.
«диапазон от -2055 до 2055» может быть выраженный как:
«Число от 0 до 2055» может быть одним из конечного числа конкретных перестановок:
Обратите внимание, что для этого регулярного выражения нет необходимости различать диапазон " 0-9 "и" 1-9 ", и только последние два диапазона имеют какие-либо ограничения на диапазон принятых цифр / символов (обозначенных звездочкой).
. Каждая из вышеуказанных составных частей легко индивидуально выразить как регулярное выражение:
. Соответствующим выражением для всего совпадения будет:
-?0*([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|1[0-9][0-9][0-9]|20[0-4][0-9]|205[0-5])
Или немного более сжато:
-?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])
Предполагая , вход содержит только «число» и ничего больше, поэтому последнее регулярное выражение :
^-?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$
Если необходимо разрешить знак ведущего плюса, это становится:
^[-+]?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$
Вот сценарий js , демонстрирующий, что проходит и что не удастся последнему регулярному выражению.
CMD DOCKER_GID=$(stat -c '%g' /var/run/docker.sock) && \
groupmod --gid ${DOCKER_GID} ${DOCKER_GROUP} && \
usermod -a -G ${DOCKER_GROUP} ${JENKINS_USER} && \
gosu jenkins sh
Важно отметить, что здесь я выбираю идентификатор группы базовой системы, которая запускает Docker. Поскольку я уже установил докер в свой контейнер и группа уже существует, я изменяю существующую группу, чтобы она соответствовала идентификатору группы системы. Наконец, я добавляю пользователя jenkins в группу Docker. Ваша / etc / group должна выглядеть примерно так в контейнере после его запуска:
docker: x: 999: jenkins
agent {
docker {
image 'storemanager-build'
args '-u root -v /var/run/docker.sock:/var/run/docker.sock'
}
}
Предоставляя флаг -u root
, вы переопределяете пользователя jenkins
, который jenkins навязывает вам при использовании декларативного конвейера. Вы должны использовать root для того, чтобы команда CMD работала и могла создавать группу.
Когда образ работает, команда переключится на пользователя jenkins, которому разрешен доступ к базовому сокету unix.
Вот отрывок из моего Jenkinsfile:
pipeline {
agent {
docker {
image 'build-image'
args '-u root -v /var/run/docker.sock:/var/run/docker.sock'
}
}
stages {
stage('Build jar') {
steps {
dir("${WORKING_DIRECTORY}") {
script {
if (isUnix()) {
sh './mvnw --batch-mode clean install'
} else {
bat 'mvnw.cmd --batch-mode clean install'
}
}
}
}
}
stage('Build and push image(s)') {
steps {
dir("${WORKING_DIRECTORY}") {
script {
amd64image = docker.build("${IMAGE_NAME}", "-f ./Dockerfile.amd64 .")
arm32v7image = docker.build("${IMAGE_NAME}", "-f ./Dockerfile.arm32v7 .")
}
script {
docker.withRegistry("${DOCKER_REGISTRY_URL}", "${STOREMANAGER_REPOSITORY_CREDENTIALS}") {
amd64image.push("${BUILD_NUMBER}-amd64")
arm32v7image.push("${BUILD_NUMBER}-arm32v7")
}
}
}
}
}
}
post {
always {
sh "chmod -R 777 ." // Jenkins can't clean built resources without this as we run the container as root
cleanWs()
}
}
}
И ресурсы, которые мне помогли:
https://jpetazzo.github.io/2015/09/03 / do-not-use-docker-in-docker-for-ci / https://github.com/jenkinsci/docker/issues/196
Надеюсь, это поможет .