Результат Saltstack терпит неудачу, но Дженкинс закончил: УСПЕХ - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь вызвать приведенный ниже сценарий соли с помощью Jenkins:

   create_script:
    file.managed:
    - name: /tmp/broc/import_props.sh
    - source: salt://projects/broc/jboss/files/import.sh.jinja
    - template: jinja

Import_properties:
cmd.script:
- name: /tmp/broc/import.sh
- cwd: /tmp/broc`

Вывод консоли Jenkins:

`ID: create_script
Function: file.managed
Name: /tmp/broc/import.sh
  Result: True
 Comment: File /tmp/broc/import.sh updated
 Started: 11:31:13.736928
Duration: 166.319 ms
 Changes:   
          ----------
          diff:
              New file
          mode:
              0644

      ID: Import_properties
 Function: cmd.script
    Name: /tmp/broc/import.sh
  Result: False
 Comment: Command '/tmp/broc/import.sh' run
 Started: 11:31:13.903378
 Duration: 399.825 ms
 Changes:   
          ----------
          pid:
              8292
          retcode:
              1`   

И сборка Jenkins завершена успешно:

`Succeeded: 21 (changed=22)
Failed:     1

Total states run:     22
Total run time:   30.338 s"}}]
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS`

У меня вопрос с идентификатором задания для подделки. Import_properties Результат - False.Таким образом, сборка Jenkins также должна заканчиваться как FAILURE.В вышеприведенном случае результат подсолки игнорируется и получается готовый УСПЕХ.Есть ли способ сделать сборку jenkins FAILURE на основе результата salttack?

Я вижу следующий конвейер Jenkins: `try {saltCmd =" ​​\ "salt -E \" ($ target) \ "\ state.apply projects.alip.process-server \ pillar = \ '{\ "region \": \ "$ {Region} \", \ "siteid \": \ "$ {SiteID} \", \ "dbuser \":\ "$ {DBUSER} \", \ "dbpass \": \ "$ {DBPASS} \"} \ '\ ""

        result = salt authtype: 'pam', 
            clientInterface: local(
                arguments: saltCmd, 
                blockbuild: true, 
                function: 'cmd.run', 
                target: "$my_salttarget",
                saveFile: true,
                targettype: 'glob'),
            credentialsId: "$my_saltcred", 
            servername: "$my_saltserver"
        }
    }catch(e){
        result = e.toString()
        currentBuild.result = 'FAILURE'
    }finally{
        echo result.replace("\\n",'\n')
    }
}`

Я новичок в конвейерном скрипте Jenkins, можете ли вы предложитьвходные данные для добавления шагов посткомпоновки в разделе finally для анализа выходных данных консоли Jenkins, определения строки и, если она соответствует, помечают сбой сборки.Это похоже на плагин для поиска текста, за исключением того, что мы пишем конвейерный скрипт.

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Ваша проблема здесь (как сказали другие) из-за того, что Дженкинс использовал код возврата, если сама команда соли, а НЕ код возврата действия, предпринятого государством, которое вы применили.

Мои 2 цента здесьэто опция

--retcode-passthrough

, которую вы можете передать своей команде соли.

Эта опция позволяет коду возврата команды соли соответствовать действию, выполненному государством.

Проще говоря, если что-то не так в состоянии, то команда соли вернет код возврата ошибки.

Официальный документ здесь

0 голосов
/ 16 мая 2019

Даже если ваше состояние провалилось, Дженкинс полагает, что вызванная им солевая команда по-прежнему выполняется успешно.

Дженкинс не может обнаружить ошибки внутри самой соли. Он может только определить, успешно ли проходит соль.

Это то же самое, что и при запуске командной строки соли. Даже если состояние завершится ошибкой, команда оболочки salt по-прежнему возвращает 0.

...