Условный этап, основанный на том, существует ли сохраненный файл - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь создать конвейер в Дженкинсе, где первый этап может создавать или не создавать файлы для последующего хранения. Я хотел бы сделать следующие этапы условными в зависимости от того, существует ли сохраненный файл. Я не уверен, как это сделать, поскольку шаг unstash идет после выражений «когда».

Грубый набросок:

Этап 1: Запустите сценарий, который может генерировать где угодно из файлов 0-3 (для сохранения и использования в качестве файлов инвентаризации для Ansible)

Этап 2: Если файл1 существует, запустите playbook с файлом1 в качестве инвентаря

Этап 3: если файл2 существует, запустите playbook с файлом2

и т. Д.

Я пробовалустановка переменной в блоке среды с опцией fileExists, но это будет оценено перед выполнением любых этапов.

environment {
  FILE_EXISTS = fileExists './filename'
}
stages {
  stage ('Conditional Stage') {
    when {
      allOf {
        expression { params.FILE_EXISTS == true }
        expression { env.BRANCH_NAME != 'master' }
      }
    }
    steps {
      unstash 'files'
      sh 'ansible ... '
    }
  }
}

(пробовал оба params.FILE_EXISTS и env.FILE_EXISTS)

Аналогичным образом пробовал выражение 'when' внутри сцены.

stage ('Conditional Stage') {
  when {
    allOf {
      expression { fileExists './filename' }
      ...
    }
  }
  steps {
    unstash 'files'
    sh 'ansible ...'
}

Оба метода пропускают этап из-за условного.

Я бы хотел, по возможности, избежать архивирования файлов, поскольку они когда-либо понадобятся только для текущей сборки.

Есть кто-нибудьудалось это сделать, или я упустил что-то простое?

Еще одно замечание: файлы будут спрятаны на ведомом устройстве Windows, а затем спарены на ведомом устройстве Linux. Это не было проблемой с stash / unstash, но решил, что стоит упомянуть, что файлы всегда будут распаковываться на другом ведомом устройстве, а не на том, где они были спрятаны.

1 Ответ

1 голос
/ 05 ноября 2019

Вы можете определить глобальную переменную, например, def FILE_CREATED = 0 и изменить ее в середине вашего конвейера, как только определенное условие выполнено, в этом случае убедитесь, что файл существует, и обновите значениеFILE_CREATED от 0 до 1 (см. Код ниже).

Позже вы можете проверить с помощью директивы when значение этой переменной, используя expression.

СледующийКонвейер был протестирован и хорошо работает для этой демонстрационной цели, он запускает этап Запускать некоторые эхо-действия ТОЛЬКО, если конкретный файл существует , только если существует файл '/ tmp / demotime1'.

#!/usr/bin/env groovy

def FILE_CREATED = 0

pipeline {

    agent {
        label 'linux'
    }

    stages{

        stage('Show if file exists'){
            steps {
                echo "At first, var FILE_EXISTS value is: $FILE_CREATED"
                echo 'Now check if /tmp/demotime1 exists'
                echo '/tmp/demotime1 It should not exists on the very first execution'
                script {
                    def demofile = new File('/tmp/demotime1')
                    if (!demofile.exists()) {
                        println('That is expected, /tmp/demotime1 file has NOT been created yet')
                    }
                }
            }
        }

        stage('Force file creation and change env var'){
            steps {
                echo 'creating a file'
                sh """ echo 'Demo time file content here' > /tmp/demotime1 """
                echo 'At this time /tmp/demotime1 exists see:'
                sh """ cat /tmp/demotime1 """
                echo "Now let's change env var to true"
                script {
                    if (new File('/tmp/demotime1').exists()){
                        println('File exists and FILE_CREATED should be 1 now')
                    }
                    FILE_CREATED = 1
                }
                echo "Now FILE_EXISTS value is: $FILE_CREATED"
            }
        }

        stage('Run some echo actions ONLY if a specific file exists'){
            when {
                expression {
                    FILE_CREATED == 1
                }
            }
            steps {
                echo 'The file exists so I will do something original...'
                echo 'Hello World, the  $FILE_CREATED has been created'
            }
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...