Співбесіда
Частина реальної співбесіди для позиції QA зі знанням Jenkins та Docker
Інтерв’юер: ….. Почнемо з Jenkins. Що таке Jenkins і як він використовується у CI/CD?
Кандидат: Jenkins – це інструмент автоматизації з відкритим вихідним кодом, який підтримує створення, розгортання та автоматизацію будь-яких проектів. Він використовується для безперервної інтеграції (CI) та безперервного розгортання (CD), що дозволяє розробникам та тестувальникам швидко інтегрувати та тестувати зміни в коді.
Інтерв’юер: Як настроїти Jenkins Pipeline?
Кандидат: У Jenkins є два типи пайплайнів: декларативний та скриптовий. Декларативний пайплайн простіший і використовується частіше. Для налаштування пайплайну створюється файл Jenkinsfile, у якому прописані етапи збирання. Приклад:
pipeline {
agent any
stages {
stage(‘Build’) {
steps {
echo ‘Building…’
}}
stage(‘Test’) {
steps {
echo ‘Testing…’
}}
stage(‘Deploy’) {
steps {
echo ‘Deploying…’
}}}}
Інтерв’юер: Переходимо до Docker. Що таке Docker та навіщо він використовується?
Кандидат: Docker — це платформа для розробки, розгортання та запуску програм у контейнерах. Контейнери дозволяють запакувати додаток з його залежностями в єдиний образ, що забезпечує переносимість та консистентність середовища виконання.
Інтерв’юер: Як створити контейнер Docker?
Кандидат: Для створення контейнера Docker необхідно написати Dockerfile, який містить інструкції зі створення образу. Приклад простого Dockerfile для веб-програми на Node.js:
FROM node:14
WORKDIR /app
COPY package.json ./
RUN npm install
COPY. .
EXPOSE 3000
CMD [«node», «app.js»]
Після написання Dockerfile можна створити образ і запустити контейнер за допомогою команд:
docker build -t my-node-app.
docker run -p 3000:3000 my-node-app
Інтерв’юер: Давайте перейдемо до практичного завдання. Налаштуйте Jenkins Pipeline для простого проекту, який виконуватиме наступні кроки: клонування репозиторію, складання проекту, запуск тестів та розгортання на тестовий сервер.
Кандидат: Звісно. Ось приклад Jenkinsfile для цього завдання:
pipeline {
agent any
stages {
stage(‘Clone’) {
steps {
git ‘https://github.com……git’
}
}
stage(‘Build’) {
steps {
sh ‘npm install’
}
}
stage(‘Test’) {
steps {
sh ‘npm test’
}
}
stage(‘Deploy’) {
steps {
sh ‘scp -r ./dist user@server:/…..’
}}}}






