Я настроил конвейер, его единственная цель - создать образ и затем выполнить в нем простую команду.
Я могу собрать контейнер, однако я не могу выполнить какие-либо команды внутри него.Когда я выполняю шаг 'sh', он просто зависает на неопределенное время.
Если я запускаю метод container.run()
или container.withRun
, этот шаг выполняется, но фактически не внутри контейнера.
Очевидно, что я делаю что-то не так - кто-нибудь может посоветовать правильный способ сделать это?Я просто хочу иметь возможность выполнять шаги внутри контейнера или, альтернативно, выполнить команду внутри контейнера и затем прочитать результаты этой операции обратно в Jenkins.
node {
String baseName = "salimfadhley/python_hello_world_server"
String buildTag = "${baseName}:${env.BUILD_ID}".toString()
def customImage
stage('Build') {
checkout scm
customImage = docker.build(buildTag)
}
stage('Test') {
customImage.inside('--entrypoint=/bin/bash') {
sh "pwd"
}
}
}
Вывод журнала Jenkins заканчивается следующим образомэто:
[Pipeline] withDockerContainer
Jenkins seems to be running inside container ded46c77c61f36b31ea0cd8a067b20ebf97c71daa36c9c18a0c83d784f5791c5
$ docker run -t -d -u 0:0 --entrypoint=/bin/bash -w /var/jenkins_home/jobs/python-hello-world-server/branches/master/workspace --volumes-from ded46c77c61f36b31ea0cd8a067b20ebf97c71daa36c9c18a0c83d784f5791c5 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** salimfadhley/python_hello_world_server:88 cat
$ docker top f5cd987963e5ea7c89cd70ddc6b2025d2bdab0ae1705c0b7a560fadc9aba0728 -eo pid,comm
ERROR: The container started but didn't run the expected command. Please double check your ENTRYPOINT does execute the command passed as docker run argument, as required by official docker images (see https://github.com/docker-library/official-images#consistency for entrypoint consistency requirements).
Alternatively you can force image entrypoint to be disabled by adding option `--entrypoint=''`.
[Pipeline] {
[Pipeline] echo
Hello Inside!
[Pipeline] sh
process apparently never started in /var/jenkins_home/jobs/python-hello-world-server/branches/master/workspace@tmp/durable-50fcbb38
[Pipeline] }
$ docker stop --time=1 f5cd987963e5ea7c89cd70ddc6b2025d2bdab0ae1705c0b7a560fadc9aba0728
$ docker rm -f f5cd987963e5ea7c89cd70ddc6b2025d2bdab0ae1705c0b7a560fadc9aba0728
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code -2
Finished: FAILURE
Файл Docker выглядит следующим образом:
FROM salimfadhley/testpython:latest
COPY . /project
COPY src /src
RUN python -m pip install --upgrade pip setuptools
RUN python -m pip install -e /project/src
WORKDIR /project
#ENTRYPOINT ["/bin/bash"]
ENTRYPOINT ["uvicorn", "--port=80", "--host=0.0.0.0", "helloworld.main:app"]
EXPOSE 8080
Итак, подведем итог: могу ли я исправить этот конвейер так, чтобы он фактически позволял мне запускать процессы внутри контейнера?