mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 23:32:37 +03:00
homework 9.4: complete
This commit is contained in:
BIN
src/homework/09-ci/9.4/img/jenkins_job_declarative_success.png
Normal file
BIN
src/homework/09-ci/9.4/img/jenkins_job_declarative_success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
src/homework/09-ci/9.4/img/jenkins_job_multibranch_success.png
Normal file
BIN
src/homework/09-ci/9.4/img/jenkins_job_multibranch_success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
BIN
src/homework/09-ci/9.4/img/jenkins_job_multibranck_scan.png
Normal file
BIN
src/homework/09-ci/9.4/img/jenkins_job_multibranck_scan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 106 KiB |
BIN
src/homework/09-ci/9.4/img/jenkins_job_scripted_success.png
Normal file
BIN
src/homework/09-ci/9.4/img/jenkins_job_scripted_success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
17
src/homework/09-ci/9.4/pipeline/Jenkinsfile
vendored
Normal file
17
src/homework/09-ci/9.4/pipeline/Jenkinsfile
vendored
Normal 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'
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
20
src/homework/09-ci/9.4/pipeline/JenkinsfileMultibranch
Normal file
20
src/homework/09-ci/9.4/pipeline/JenkinsfileMultibranch
Normal 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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
20
src/homework/09-ci/9.4/pipeline/JenkinsfileScripted
Normal file
20
src/homework/09-ci/9.4/pipeline/JenkinsfileScripted
Normal 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")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
|||||||

|

|
||||||
|
|
||||||
> 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), который будет использоваться на следующем шаге.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
> 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`, в данном случае не будет отличий от тестируемого репозитория.
|
||||||
|
|
||||||
|
После создания автоматически начнётся сканирование объектов репозитория, а после этого будет запущена сборка на
|
||||||
|
ветке по умолчанию.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
> 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 будет отрабатывать с ошибкой.
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
Reference in New Issue
Block a user