diff --git a/src/homework/09-ci/9.4/img/jenkins_job_declarative_success.png b/src/homework/09-ci/9.4/img/jenkins_job_declarative_success.png new file mode 100644 index 0000000..cd10afe Binary files /dev/null and b/src/homework/09-ci/9.4/img/jenkins_job_declarative_success.png differ diff --git a/src/homework/09-ci/9.4/img/jenkins_job_multibranch_success.png b/src/homework/09-ci/9.4/img/jenkins_job_multibranch_success.png new file mode 100644 index 0000000..0a0ed9b Binary files /dev/null and b/src/homework/09-ci/9.4/img/jenkins_job_multibranch_success.png differ diff --git a/src/homework/09-ci/9.4/img/jenkins_job_multibranck_scan.png b/src/homework/09-ci/9.4/img/jenkins_job_multibranck_scan.png new file mode 100644 index 0000000..50bb8c1 Binary files /dev/null and b/src/homework/09-ci/9.4/img/jenkins_job_multibranck_scan.png differ diff --git a/src/homework/09-ci/9.4/img/jenkins_job_scripted_success.png b/src/homework/09-ci/9.4/img/jenkins_job_scripted_success.png new file mode 100644 index 0000000..28b59ef Binary files /dev/null and b/src/homework/09-ci/9.4/img/jenkins_job_scripted_success.png differ diff --git a/src/homework/09-ci/9.4/pipeline/Jenkinsfile b/src/homework/09-ci/9.4/pipeline/Jenkinsfile new file mode 100644 index 0000000..896cec0 --- /dev/null +++ b/src/homework/09-ci/9.4/pipeline/Jenkinsfile @@ -0,0 +1,17 @@ +node("linux"){ + stage("Git checkout"){ + git credentialsId: '5ac0095d-0185-431b-94da-09a0ad9b0e2c', url: 'git@github.com:aragastmatb/example-playbook.git' + } + stage("Sample define secret_check"){ + secret_check=true + } + stage("Run playbook"){ + if (secret_check){ + sh 'ansible-playbook site.yml -i inventory/prod.yml' + } + else{ + echo 'need more action' + } + + } +} diff --git a/src/homework/09-ci/9.4/pipeline/JenkinsfileMultibranch b/src/homework/09-ci/9.4/pipeline/JenkinsfileMultibranch new file mode 100644 index 0000000..8c750d0 --- /dev/null +++ b/src/homework/09-ci/9.4/pipeline/JenkinsfileMultibranch @@ -0,0 +1,20 @@ +pipeline { + agent any + + stages { + stage('checkout') { + steps { + echo 'Hello World' + git credentialsId: '6659caf8-95a2-4201-b6e0-bfe65e71836d', + url: 'git@github.com:Dannecron/netology-devops-ansible-vector.git', + branch: 'main' + } + } + stage('test') { + steps { + echo 'Run molecule test' + sh 'molecule test' + } + } + } +} diff --git a/src/homework/09-ci/9.4/pipeline/JenkinsfileScripted b/src/homework/09-ci/9.4/pipeline/JenkinsfileScripted new file mode 100644 index 0000000..06c3f80 --- /dev/null +++ b/src/homework/09-ci/9.4/pipeline/JenkinsfileScripted @@ -0,0 +1,20 @@ +def base_command = 'ansible-playbook site.yml -i inventory/prod.yml' + +node("agent"){ + parameters { + string(name: 'prod_run', defaultValue: 'False', description: 'Run without --check and --diff') + } + + stage("Git checkout"){ + git credentialsId: '6659caf8-95a2-4201-b6e0-bfe65e71836d', + url: 'git@github.com:aragastmatb/example-playbook.git' + } + + stage("Run playbook") { + if (params.prod_run == 'True') { + sh(base_command) + } else { + sh("$base_command --check --diff") + } + } +} \ No newline at end of file diff --git a/src/homework/09-ci/9.4/readme.md b/src/homework/09-ci/9.4/readme.md index bdc965e..25f334f 100644 --- a/src/homework/09-ci/9.4/readme.md +++ b/src/homework/09-ci/9.4/readme.md @@ -60,7 +60,7 @@ jenkins-master-01 : ok=11 changed=9 unreachable=0 failed=0 s Создание нового job находится на странице `/view/all/newJob`. Основные конфигурации, которые необходимо проставить: - `Управление исходным кодом` - `Git`. Так же необходимо создать новый `Credential` с пользователем `git` и любым приватным ключом, -прописанным у пользователя `github`. Ещё очень важно, чтобы `github.com` был добавлен в `known_host` пользователя `jenkins` +прописанным у пользователя `github`. Дополнительно стоит задать осмысленное название в `ID`. Ещё очень важно, чтобы `github.com` был добавлен в `known_host` пользователя `jenkins` на всех машинах. - `Триггеры сборки` - можно активировать `Опрашивать SCM об изменениях` и выставить рекомендованное расписание `H * * * *` (раз в час). - `Сборка` - достаточно добавить только один шаг сборки `Выполнить команду shell` и добавить в неё `molecule test` @@ -69,9 +69,76 @@ jenkins-master-01 : ok=11 changed=9 unreachable=0 failed=0 s ![jenkins_job_freestyle_success](./img/jenkins_job_freestyle_success.png) > 2. Сделать Declarative Pipeline Job, который будет запускать `molecule test` из любого вашего репозитория с ролью. + +Для данного типа pipeline необходимо только добавить `Триггеры сборки`, как и для предыдущего типа, +а так же задать скрипт: + +```text +pipeline { + agent any + + stages { + stage('checkout') { + steps { + echo 'Hello World' + git credentialsId: '6659caf8-95a2-4201-b6e0-bfe65e71836d', + url: 'git@github.com:Dannecron/netology-devops-ansible-vector.git', + branch: 'main' + } + } + stage('test') { + steps { + echo 'Run molecule test' + sh 'molecule test' + } + } + } +} +``` + +Где значение для `credentialsId` нужно взять из `ID` credentials, созданных для git на предыдущем pipeline. + +Из данного скрипта можно создать [`JenkinsfileMultibranch`](pipeline/JenkinsfileMultibranch), который будет использоваться на следующем шаге. + +![jenkins_job_declarative_success](./img/jenkins_job_declarative_success.png) + > 3. Перенести Declarative Pipeline в репозиторий в файл `Jenkinsfile`. > 4. Создать Multibranch Pipeline на запуск `Jenkinsfile` из репозитория. + +[`JenkinsfileMultibranch`](pipeline/JenkinsfileMultibranch) перенесён в репозиторий [netology-devops-ansible-vector](https://github.com/Dannecron/netology-devops-ansible-vector). + +При создании необходимо заполнить следующие поля: +* `Branch Sources` - репозиторий с `Jenkinsfile`, в данном случае не будет отличий от тестируемого репозитория. + +После создания автоматически начнётся сканирование объектов репозитория, а после этого будет запущена сборка на +ветке по умолчанию. + +![jenkins_job_multibranck_scan](./img/jenkins_job_multibranck_scan.png) +![jenkins_job_multibranch_success](./img/jenkins_job_multibranch_success.png) + > 5. Создать Scripted Pipeline, наполнить его скриптом из [pipeline](./pipeline). -> 6. Внести необходимые изменения, чтобы Pipeline запускал `ansible-playbook` без флагов `--check --diff`, если не установлен параметр при запуске джобы (prod_run = True), по умолчанию параметр имеет значение False и запускает прогон с флагами `--check --diff`. + +Для создания `Scripted Pipeline` нужно создать `Declarative Pipeline`, как это было на шаге 2. +Дополнительно необходимо указать `This project is parameterized` и добавить параметр `prod_run`. +Для простоты этот параметр лучше задать строкой. + +> 6. Внести необходимые изменения, чтобы Pipeline запускал `ansible-playbook` без флагов `--check --diff`, +> если не установлен параметр при запуске джобы (prod_run = True), по умолчанию параметр имеет значение False +> и запускает прогон с флагами `--check --diff`. + +Необходимо внести следующие изменения: +* название `node` изменить, на то, что было указано при подключении агента +* заменить `credentialsId` + +Изменённый скрипт расположен в файле [JenkinsfileScripted](./pipeline/JenkinsfileScripted) + > 7. Проверить работоспособность, исправить ошибки, исправленный Pipeline вложить в репозиторий в файл `ScriptedJenkinsfile`. > 8. Отправить ссылку на репозиторий с ролью и Declarative Pipeline и Scripted Pipeline. + +Для работы данного playbook необходимо: +* добавить пользователя `jenkins` на машине `jenkins-agent-01` в `sudoers`, отключив проверку по паролю +* создать директорию `/opt/jdk/openjdk-11` + +В противном случае pipeline будет отрабатывать с ошибкой. + +![jenkins_job_scripted_success](./img/jenkins_job_scripted_success.png)