如何在Jenkins中使用用户输入来运行Ansible剧本?

时间:2018-07-18 14:04:12

标签: jenkins ansible jenkins-pipeline

我有一本剧本,其中有“暂停”部分和提示。如果我在Jenkins中使用Pipeline插件创建作业并运行该作业,我将得到

[WARNING]: Not waiting from prompt as stdin is not interactive

,作业失败。问题是如何在交互模式下运行作业,或者如何在确切的任务中暂停剧本并按Ctrl + c + c组合键(因为可疑模块'pause'仅如此工作)?我已经搜索了一段时间,并尝试使用

def userInput = input(
    id: 'Password', message: 'input your input: ', ok: 'ok',
    parameters: [string(defaultValue: '', description: '.....', name: 'INPUT_TEST')])

但是我无法按组合键,也无法理解如何在剧本中暂停詹金斯的工作。

管道示例:

pipeline {
agent { label 'master' }
  environment {
  WORKDIR = '/home/jenkins/'
  }
  stages {

  stage('Checkout') {
    agent { label 'master' }
    steps {
      sh '''cd $WORKDIR
      ansible-playbook -vvvv manual_playbooks/test.yml'''
      }
    }  

  stage ('Echo') {
     agent { label 'master' }
     steps {
        sh 'echo something' 
     }
  }
  }
}

剧本示例:

---
- name: test
  hosts: localhost
  tasks:

    - name: Echo start
      shell: echo 'start playbook'

    - pause:
        prompt: "do you want to continue?"
        echo: yes
        private: no
      register: prompt_status

    - name: Continue tasks
      shell: echo 'Continue full flow'
      register: reset_account_response
      when: prompt_status.user_input is defined and 
            prompt_status.user_input == "yes"

    - fail:
        msg: "Unexpected user input while prompting approval"
      when: prompt_status.user_input is defined and 
            prompt_status.user_input != "yes"

非常感谢。

1 个答案:

答案 0 :(得分:0)

在通过Jenkins运行剧本时,为什么不在暂停任务上放置when子句以检查是否存在其他变量,然后在使用Ansible的-e选项时将其传递给我们。