commit 7c55b391f61a284a827b003c2d560bff976ce3f9 Author: spawn Date: Wed Apr 8 18:00:30 2026 +0300 Set up Jenkins jobs for web and mobile tests diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15d6286 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +target/ +build/ +.idea/ +*.iml +.DS_Store +jenkins_home/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..74fcdfd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM jenkins/jenkins:lts-jdk21 + +USER root +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + git \ + maven \ + docker.io \ + docker-compose \ + chromium \ + firefox-esr \ + && rm -rf /var/lib/apt/lists/* +COPY plugins.txt /usr/share/jenkins/ref/plugins.txt +RUN jenkins-plugin-cli --plugin-file /usr/share/jenkins/ref/plugins.txt + +COPY init.groovy.d/ /usr/share/jenkins/ref/init.groovy.d/ +COPY jobs/ /usr/share/jenkins/ref/job-xml/ + +USER jenkins diff --git a/README.md b/README.md new file mode 100644 index 0000000..c507c83 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# OTUS Homework 8: Jenkins Jobs + +Проект поднимает Jenkins в Docker и автоматически создает 2 job: +- `selenium-tests` для Selenium/Selenide тестов по Otus с выбором браузера; +- `mobile-appium-tests` для Appium тестов мобильного приложения с Allure-отчетом. + +## Что входит в проект +- `Dockerfile`, `docker-compose.yml` — Jenkins с предустановленными инструментами. +- `init.groovy.d/` — автосоздание пользователя `admin/admin`, job и Allure CLI. +- `jobs/selenium-tests.xml` — job для `https://git.kovbasa.ru/otus-autotests/homework_4.git`. +- `jobs/mobile-appium-tests.xml` — job для `https://git.kovbasa.ru/otus-autotests/homework_7.git`. + +## Требования +- Docker и Docker Compose. +- Доступ Jenkins-контейнера в интернет для клонирования репозиториев и загрузки Maven dependencies. +- Для Appium job: + - доступ к БД `jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist`; + - хост, на котором Docker может поднять `budtmo/docker-android`. + +## Запуск +1. Поднять Jenkins: +```bash +docker compose up -d --build +``` +2. Открыть `http://localhost:8081`. +3. Войти под `admin` / `admin`. +4. Убедиться, что автоматически созданы job: + - `selenium-tests` + - `mobile-appium-tests` + +## Запуск job + +### selenium-tests +Запускать через **Build with Parameters**. Рабочие значения по умолчанию: +- `REPO_URL=https://git.kovbasa.ru/otus-autotests/homework_4.git` +- `BRANCH=master` +- `BROWSER=chrome` +- `EXECUTION_MODE=local` +- `HEADLESS=true` + +### mobile-appium-tests +Запускать через **Build with Parameters**. Рабочие значения по умолчанию: +- `REPO_URL=https://git.kovbasa.ru/otus-autotests/homework_7.git` +- `BRANCH=master` +- `DB_URL=jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist` +- `DB_USER=student` + +Обязательно заполнить: +- `DB_PASSWORD` + +Опционально: +- `APP_URL` — если задан, APK будет скачан автоматически; если пусто, используется APK из репозитория `homework_7`. + +## Результат +- Allure-отчет публикуется в каждой job после завершения билда. +- XML job лежат в каталоге `jobs/` и могут быть выданы как результат домашнего задания. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..db51662 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +services: + jenkins: + build: . + ports: + - "8081:8080" + - "50000:50000" + environment: + - JAVA_OPTS=-Djenkins.install.runSetupWizard=false + user: root + volumes: + - ./jenkins_home:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock diff --git a/init.groovy.d/00-security.groovy b/init.groovy.d/00-security.groovy new file mode 100644 index 0000000..dd338af --- /dev/null +++ b/init.groovy.d/00-security.groovy @@ -0,0 +1,16 @@ +import jenkins.model.Jenkins +import hudson.security.HudsonPrivateSecurityRealm +import hudson.security.FullControlOnceLoggedInAuthorizationStrategy + +def jenkins = Jenkins.instance +def realm = new HudsonPrivateSecurityRealm(false) +if (realm.getAllUsers().isEmpty()) { + realm.createAccount("admin", "admin") +} +jenkins.setSecurityRealm(realm) + +def strategy = new FullControlOnceLoggedInAuthorizationStrategy() +strategy.setAllowAnonymousRead(true) +jenkins.setAuthorizationStrategy(strategy) + +jenkins.save() diff --git a/init.groovy.d/10-create-jobs.groovy b/init.groovy.d/10-create-jobs.groovy new file mode 100644 index 0000000..528d697 --- /dev/null +++ b/init.groovy.d/10-create-jobs.groovy @@ -0,0 +1,24 @@ +import jenkins.model.Jenkins + +def jenkins = Jenkins.instance +def xmlDir = new File(jenkins.root, "job-xml") +if (!xmlDir.exists()) { + return +} + +xmlDir.eachFileMatch(~/.*\.xml/) { file -> + def jobName = file.name.replaceFirst(/\.xml$/, "") + def existing = jenkins.getItem(jobName) + if (existing != null) { + return + } + def fis = new FileInputStream(file) + try { + jenkins.createProjectFromXML(jobName, fis) + println "Created job: ${jobName}" + } finally { + fis.close() + } +} + +jenkins.save() diff --git a/init.groovy.d/20-allure.groovy b/init.groovy.d/20-allure.groovy new file mode 100644 index 0000000..dab7302 --- /dev/null +++ b/init.groovy.d/20-allure.groovy @@ -0,0 +1,18 @@ +import jenkins.model.Jenkins +import ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation +import ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstaller +import hudson.tools.InstallSourceProperty + +def jenkins = Jenkins.instance +def desc = jenkins.getDescriptorByType(AllureCommandlineInstallation.DescriptorImpl) +def existing = desc.getInstallations() + +def alreadyConfigured = existing.any { it.name == "allure" } +if (!alreadyConfigured) { + def installer = new AllureCommandlineInstaller("2.29.0") + def prop = new InstallSourceProperty([installer]) + def installation = new AllureCommandlineInstallation("allure", "", [prop]) + desc.setInstallations(installation) + desc.save() +} + diff --git a/jobs/mobile-appium-tests.xml b/jobs/mobile-appium-tests.xml new file mode 100644 index 0000000..197f691 --- /dev/null +++ b/jobs/mobile-appium-tests.xml @@ -0,0 +1,133 @@ + + + Appium mobile tests with APK download and Allure report. + false + + + + + REPO_URL + Git repo with Appium tests (hw7) + https://git.kovbasa.ru/otus-autotests/homework_7.git + true + + + BRANCH + Git branch + master + true + + + APP_URL + APK URL (optional). If empty, repo APK will be used. + + true + + + DB_URL + JDBC url + jdbc:postgresql://sql.otus.kartushin.su:5432/wishlist + true + + + DB_USER + DB user + student + true + + + DB_PASSWORD + DB password + + + + + + + true + + + false + diff --git a/jobs/selenium-tests.xml b/jobs/selenium-tests.xml new file mode 100644 index 0000000..74e10b3 --- /dev/null +++ b/jobs/selenium-tests.xml @@ -0,0 +1,117 @@ + + + Selenium/Selenide tests with browser parameter and Allure report. + false + + + + + REPO_URL + Git repo with Selenium/Selenide tests + https://git.kovbasa.ru/otus-autotests/homework_4.git + true + + + BRANCH + Git branch + master + true + + + BROWSER + Browser to run tests + + + chrome + firefox + + + + + BROWSER_VERSION + Browser version (optional) + + true + + + EXECUTION_MODE + local or selenoid + local + true + + + SELENOID_URL + Selenoid URL (used when execution.mode=selenoid) + http://localhost/wd/hub + true + + + BASE_URL + Base URL for tests + https://otus.ru + true + + + HEADLESS + Run browsers in headless mode + + + true + false + + + + + + + + + true + + + false + diff --git a/plugins.txt b/plugins.txt new file mode 100644 index 0000000..42a2a73 --- /dev/null +++ b/plugins.txt @@ -0,0 +1,5 @@ +workflow-aggregator +git +allure-jenkins-plugin +docker-workflow +matrix-project