Я только начинаю использовать jenkins и у меня возникают проблемы с $ PATH, поэтому я решил написать свой собственный образ докера в качестве среды для использования в нем.Вот мой Jenkinsfile, который использовался для проверки работоспособности:
pipeline {
agent {
docker {
image: custom-alpine-nodejs:latest
-p 3000:3000
}
}
stages {
stage('build') {
steps {
// this return root instead of user which i created in my image
// the image i build, run locally and enter whoami output
// the user that i created in the image as expected, except inside jenkins
sh 'whoami'
// doing nvm install 8.11.2 result in nvm not found
// but running the image i build locally works just fine
sh 'nvm install 8.11.2' // not work
nvm install 8.11.2 // tested this also not work
}
}
}
}
Это мой nodejs.Dockerfile
FROM alpine:3.6
RUN adduser -D -g "" jenkins-runner && \
touch /home/jenkins-runner/.bashrc /home/jenkins-runner/.profile /home/jenkins-runner/.zshrc &&\
chown -R jenkins-runner:jenkins-runner /home/jenkins-runner && \
apk -q update && \
apk -q add git curl bash
USER jenkins-runner
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash && \
export NVM_DIR="$HOME/.nvm" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
CMD ["/bin/bash"]
Мой Dockerfile работает, как и ожидалось, когда он выполняется локально, я могу запуститьКонтейнер и do nvm install
и whoami
вернут jenkins-runner
, все просто работает, как и ожидалось, кроме jenkins.
Это только один из моих Dockerfile, я подготовил nodejs.Dockerfile, meteor.Dockerfile,flask.Dockerfile, elixir.Dockerfile, go.Dockerfile, который готовит их к моим будущим вещам, когда я делаю CI, когда они выглядят просто как.
Если нет решения, я также был бы признателен, если бы кто-то могскажите мне, как быть внутри jenkins, и я мог бы относиться к окружению точно так же, как и к моей машине с Linux, однако я хочу, а также не являюсь пользователем root с минимальным уровнем того, что мне нужно для запуска моего приложения для тестирования или ci / cd.
Кстати, я использую плагин Jenkins Blue Ocean.