Инструменты пользователя

Инструменты сайта


jenkins:pipelines

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
jenkins:pipelines [2024/07/26 03:00]
admin
jenkins:pipelines [2025/01/19 15:53] (текущий)
admin
Строка 1: Строка 1:
 ====== Pipelines ====== ====== Pipelines ======
- 
- 
 ===== Общее ===== ===== Общее =====
- 
 <code groovy> <code groovy>
 if (params.getOrDefault('BOOLEAN_PARAM_NAME', true)) if (params.getOrDefault('BOOLEAN_PARAM_NAME', true))
Строка 341: Строка 338:
  
  
-===== Примеры =====+===== Сохранение артефактов ===== 
 +<details> 
 +<summary>:!: Stash</summary> 
 +Сохраняет указанные файлы для дальнейшего использования в пайплайне, вне зависимости от агентов\\ 
 +Сохраняет в виде TAR архива, поэтому большие файлы не рекомендуется передавать т.к будет проседать ЦП\\ 
 +По умолчанию чистится после каждой сборки, но есть плагины позволяющие сохранить между запусками, "preserveStashes()"\\ 
 +Можно добавить исключения на добавляемые файлы. Сохраняет указанные файлы в текущем рабочем каталоге, распаковывает сохраняя относительные пути\\
  
 +<code groovy>
 +stage("first") {
 +  agent { slave1 }
 +  steps {
 +    (...)
 +    stash includes: 'terraform.tfstate, terraform.backup, .terraform/**', name: DYNAMIC_SLAVE
 +  }
 +}
 +
 +stage("second") {
 +  agent { master }
 +  steps {
 +    cleanWs()
 +    unstash name: DYNAMIC_SLAVE
 +  }
 +}
 +</code>
 +
 +Указывать нужно с маской, например **includes: "my_dir/*"**, при этом сохраняет всю папку
 +<code groovy>
 +        stage("first stage") {
 +            steps {
 +                script {
 +                    sh """
 +                        mkdir my_dir
 +                        touch my_dir/first_file_${BUILD_NUMBER}
 +                        touch my_dir/second_file_${BUILD_NUMBER}
 +                        touch my_dir/three_file_${BUILD_NUMBER}
 +                        ls -l 
 +                    """
 +                    stash includes: "my_dir/*", name: "dirr"
 +                }
 +            }
 +        }
 +        
 +        stage("second stage") {
 +            steps {
 +                script {
 +                    cleanWs()
 +                    sh "ls -l"
 +                }
 +            }
 +        }
 +        
 +        stage("three stage") {
 +            steps {
 +                script {
 +                    unstash name: "dirr"
 +                    sh "ls -l my_dir"
 +                }
 +            }
 +        }
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: archiveArtifacts</summary>
 +Архивирует артефакты сборки, затем они доступны на веб-странице джобы\\
 +По умолчанию Maven автоматически архивирует произведенные артефакты. Указанные здесь артефакты будут архивированы поверх\\
 +Файлы указываются так же маской\\
 +
 +<code groovy>
 +archiveArtifacts artifacts: 'target/*.jar'
 +archiveArtifacts artifacts: 'target/*.jar, target/*.war'
 +archiveArtifacts artifacts: '**/*.jar'
 +
 +# Из примера выше
 +archiveArtifacts artifacts: 'my_dir/*'
 +</code>
 +</details>
 +
 +
 +
 +
 +===== Примеры =====
 <details> <details>
 <summary>:!: Работа с grafana API</summary> <summary>:!: Работа с grafana API</summary>
Строка 727: Строка 806:
 </details> </details>
  
 +
 +
 +<details>
 +<summary>:!: Минимальный образец пайплайна</summary>
 +<code groovy>
 +pipeline {
 +    environment {
 +        MY_VAR = "123"
 +    }
 +
 +    agent {
 +        node {
 +            label 'my-super-agent'
 +        }
 +    }
 +
 +    parameters {
 +        string description: 'my param', name: 'MY_PARAM', defaultValue: ''
 +    }
 +
 +    stages {
 +        stage("First") {
 +            when {
 +                expression {
 +                    MY_VAR == "123"
 +                }
 +            }
 +            steps {
 +                cleanWs()
 +                script {
 +                    sh "echo 'this is first stage'"
 +                }
 +            }
 +        }
 +    
 +        stage("Second") {
 +            when {
 +                expression {
 +                    MY_VAR == "123"
 +                }
 +            }
 +            steps {
 +                script {
 +                    sh "echo 'this is second stage'"
 +                }
 +            }
 +        }
 +
 +    }
 +}
 +
 +</code>
 +</details>
  
  
  
 <details> <details>
-<summary>:!: </summary>+<summary>:!: When</summary> 
 +<code groovy> 
 +stage('first-stage') { 
 +    when { 
 +        branch 'master' 
 + branch 'feature/*' 
 +  
 +    } 
 +----- 
 +    when { 
 +        expression { 
 +            return env.BRANCH_NAME != 'master'; 
 +     inputOptimizer == "OpenCV DNN"  
 +        } 
 +    } 
 +----- 
 +    when {  
 +        environment name: 'NAME', value: 'this'  
 +    } 
 +----- 
 + 
 +    steps { 
 +        echo 'run this stage - ony if the branch = master branch' 
 +    // Так же внутри степа 
 +        script { 
 +            if (env.BRANCH_NAME == "myBranch") { 
 +                echo 'triggered by myBranch' 
 +            } else { 
 +                echo 'triggered by something else' 
 +            } 
 +        } 
 + 
 +    } 
 +
 +</code> 
 + 
 +Вариативность: "not", "allOf" и "anyOf"\\ 
 +<code groovy> 
 +when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } } 
 +--- 
 +when { anyOf { branch 'master'; branch 'staging' } } 
 +--- 
 +when { not { branch 'master' } } 
 +---- 
 + 
 +// Комбинировать тоже можно  
 +     when { 
 +                branch 'production' 
 +                anyOf { 
 +                    environment name: 'DEPLOY_TO', value: 'production' 
 +                    environment name: 'DEPLOY_TO', value: 'staging' 
 +                } 
 +            } 
 +--- 
 + 
 +    when { 
 +                expression { BRANCH_NAME ==~ /(production|staging)/
 +                anyOf { 
 +                    environment name: 'DEPLOY_TO', value: 'production' 
 +                    environment name: 'DEPLOY_TO', value: 'staging' 
 +                } 
 +            } 
 +--- 
 + 
 + 
 +</code> 
 + 
 + 
 +Еще можно задать параметры сравнения (comparator): "EQUALS", "REGEXP"\\ 
 +<code groovy> 
 +// Сравнивать по регулярке 
 +when { branch pattern: "release-\\d+", comparator: "REGEXP"
 + 
 +// Простое сравнение 
 +when { branch: "release", comparator: "EQUALS"
 +</code> 
 + 
 + 
 + 
 +:!: Строки могут плохо преобразовываться в логические значения, например "0" или "False" все равно оценится как True тк не пустая строка\\ 
 + 
 + 
 +Вариативность выполнения в зависимости от переменных и параметров\\ 
 +В т.ч подходит для инициализации джобы запуском без параметров\\ 
 +<code groovy> 
 +pipeline { 
 +    environment { 
 +        MY_VAR = "123" 
 +    } 
 + 
 +    agent any 
 + 
 +    parameters { 
 +        string description: 'my param', name: 'MY_PARAM', defaultValue: '' 
 +        string description: 'my param', name: 'MY_PARAM2', defaultValue: '' 
 +        string description: 'my param', name: 'MY_PARAM3', defaultValue: '' 
 +    } 
 + 
 +    stages { 
 +        stage("First") { 
 +            when { 
 +                expression { params.MY_VAR } 
 +                expression { params.MY_VAR2 != ""
 +                expression { !params.MY_VAR2 } 
 +                expression { params.MY_PARAM == "1"
 +            } 
 +            steps { 
 +                cleanWs() 
 +                script { 
 +                    sh "echo 'this is first stage'" 
 +                } 
 +            } 
 +        } 
 +    } 
 +
 +</code> 
 +</details> 
 + 
 + 
 + 
 +<details> 
 +<summary>:!: Использование config файла</summary> 
 +<code groovy> 
 +// Создание файла 
 +configFileProvider([configFile(fileId: 'kubeconf', targetLocation: 'kubeconf.сщта')]) { 
 +  script { 
 +  } 
 +
 + 
 +// Данные в переменной 
 +configFileProvider([configFile(fileId: 'kubeconf', variable: 'kubeconf')]) { 
 +  script { 
 +  } 
 +
 + 
 +</code> 
 +</details> 
 + 
 + 
 + 
 +<details> 
 +<summary>:!: Запись в файл. Декларативный метод</summary> 
 +<code groovy> 
 +writeFile file: "${MY_FILENAME}.txt", text: """ 
 +  text: ${var1} 
 +  test: ${var2} 
 +""".stripIndent() 
 +</code> 
 +</details> 
 + 
 + 
 + 
 +==== Запись результатов/Артефакты джобы ==== 
 + 
 +<details> 
 +<summary>:!: Примеры</summary> 
 + 
 +Запись резов текстом, сразу на странице джобы\\ 
 +Можно применять html\\
 <code bash> <code bash>
 +currentBuild.description = "Сборка BIN-артефакта - ${my-variable.getAbsoluteUrl()}"
 +</code>
  
 +Артефакты файлами\\
 +<code bash>
 +archiveArtifacts artifacts: 'result.html'
 +</code>
 +
 +
 +Публикация полноценного отчета, доступен слева в меню\\
 +<code bash>
 +publishHTML (target : [allowMissing: false, alwaysLinkToLastBuild: true,
 +keepAll: true, reportDir: '', reportFiles: 'result.html',
 +reportName: 'My Reports', reportTitles: 'The Report'])
 </code> </code>
 </details> </details>
Строка 740: Строка 1043:
  
  
-====== Use Gradle ====== 
  
 +
 +
 +
 +====== Use Gradle ======
 <details> <details>
 <summary>:!: Общее </summary> <summary>:!: Общее </summary>
Строка 791: Строка 1097:
 </code> </code>
 </details> </details>
 +
 +
 +
 +
 +
 +Прерывание
 +
 +
 +
 +if (!params.MY_VAR.contains("@")) {
 +    currentBuild.result = 'ABORTED'
 +    error("Параметр 'MY_VAR' указан неверно")
 +}
 +
 +
  
  
  
jenkins/pipelines.1721962852.txt.gz · Последнее изменение: 2024/07/26 03:00 — admin