homework 9.4: complete

This commit is contained in:
2022-09-07 10:47:01 +07:00
parent f9f6fd45c5
commit fa0e7533ae
8 changed files with 126 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -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'
}
}
}

View File

@@ -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'
}
}
}
}

View File

@@ -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")
}
}
}

View File

@@ -60,7 +60,7 @@ jenkins-master-01 : ok=11 changed=9 unreachable=0 failed=0 s
Создание нового job находится на странице `/view/all/newJob`. Основные конфигурации, которые необходимо проставить: Создание нового job находится на странице `/view/all/newJob`. Основные конфигурации, которые необходимо проставить:
- `Управление исходным кодом` - `Git`. Так же необходимо создать новый `Credential` с пользователем `git` и любым приватным ключом, - `Управление исходным кодом` - `Git`. Так же необходимо создать новый `Credential` с пользователем `git` и любым приватным ключом,
прописанным у пользователя `github`. Ещё очень важно, чтобы `github.com` был добавлен в `known_host` пользователя `jenkins` прописанным у пользователя `github`. Дополнительно стоит задать осмысленное название в `ID`. Ещё очень важно, чтобы `github.com` был добавлен в `known_host` пользователя `jenkins`
на всех машинах. на всех машинах.
- `Триггеры сборки` - можно активировать `Опрашивать SCM об изменениях` и выставить рекомендованное расписание `H * * * *` (раз в час). - `Триггеры сборки` - можно активировать `Опрашивать SCM об изменениях` и выставить рекомендованное расписание `H * * * *` (раз в час).
- `Сборка` - достаточно добавить только один шаг сборки `Выполнить команду shell` и добавить в неё `molecule test` - `Сборка` - достаточно добавить только один шаг сборки `Выполнить команду 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) ![jenkins_job_freestyle_success](./img/jenkins_job_freestyle_success.png)
> 2. Сделать Declarative Pipeline Job, который будет запускать `molecule test` из любого вашего репозитория с ролью. > 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`. > 3. Перенести Declarative Pipeline в репозиторий в файл `Jenkinsfile`.
> 4. Создать Multibranch 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). > 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`. > 7. Проверить работоспособность, исправить ошибки, исправленный Pipeline вложить в репозиторий в файл `ScriptedJenkinsfile`.
> 8. Отправить ссылку на репозиторий с ролью и Declarative Pipeline и Scripted Pipeline. > 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)