Собеседование
Часть реального собеседования для позиции 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:/…..’
}}}}






