mirror of
https://github.com/Dannecron/netology-devops.git
synced 2025-12-25 15:22: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`. Основные конфигурации, которые необходимо проставить:
|
||||
- `Управление исходным кодом` - `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
|
||||

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

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