【问题标题】:Jenkins job triggered twiceJenkins 工作触发了两次
【发布时间】:2018-10-28 01:28:38
【问题描述】:

1) 我正在使用 Jenkins API 来触发作业,因此当我的监控工具 sensu 发送请求 Jenkins API 以触发 jenkins JOb 时,构建开始。 2) 我什至通过点击 buildnow 而不是使用 API 调用来手动尝试以确保它不是 API 调用问题。

我的构建包含什么? 它在 Master 上运行并在 ansible 插件的帮助下运行 ansible 剧本

问题:一旦构建成功,它会自动触发另一个构建,没有任何理由再次运行构建。这是一个简单的作业配置,它在 master 上运行并在 Jenkins 提供的插件的帮助下运行 ansible-playbook

任何人都可以帮助我解决可能的问题吗? 詹金斯版本:2.89.3 Ansible 插件:0.8

我还可以看到由用户 xyz 发起的 jenkins 工作 由用户 xyz 发起 由用户 xyz 发起 由用户 xyz 发起 由用户 xyz 发起 由用户 xyz 发起 由用户 xyz 启动,用于单个构建

【问题讨论】:

  • 嗨!我正在检查 Ansible Plugin 0.8,发现它“不完整”。您对 Jenkins 中的其他选项持开放态度吗?
  • 对不起,我没有让你知道 Ansible 插件 0.8 不完整?我需要运行 jenkins 的剧本,这是我能想到的唯一方法
  • 我不想说它工作不正常。我可以给你一个没有插件的解决方案,但我想确定这是一个选项。
  • 我可以向他们推荐其他解决方案,请告诉我
  • 我还可以看到 jenkins 作业由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动单个构建跨度>

标签: jenkins ansible jenkins-plugins jenkins-job-builder


【解决方案1】:

我建议不要使用 Ansible 插件,而是使用 Jenkins 方式:

Jenkinsfile 创建一个管道,类似于:

pipeline {
    parameters {
        string(name: 'Parameter1', defaultValue: 'value1', description: 'Parameter1?')
        string(name: 'Parameter2', defaultValue: 'value2', description: 'Parameter2?')
        string(name: 'Parameter3', defaultValue: 'value3', description: 'Parameter3?')

    }

    agent any

    options {
        ansiColor('xterm')
        timestamps()
    }

    stages {
        stage('Run Ansible Playbook') {
            steps {
                script {
                    retry (1) {
                        try {

                            echo "Build ${params.Parameter1} on ${params.Parameter2}"

                            sh "export ANSIBLE_FORCE_COLOR=true && \
                                ansible-playbook -vv \
                                                -i inventories/hosts \
                                                -e \"var1=${Parameter1}\" \
                                                -e \"var2=${Parameter2}\" \
                                                -e \"var3=${Parameter3}\" \
                                                --vault-password-file ~/.ansible/vaultpass.txt \
                                                playbooks/main.yml"
                        }
                        catch (exception) {
                            throw exception
                        }

                        finally {
                            sh "export ANSIBLE_FORCE_COLOR=true && \
                                ansible-playbook -vv \
                                                -i inventories/hosts \
                                                -e \"var1=${Parameter1}\" \
                                                -e \"var2=${Parameter2}\" \
                                                -e \"var3=${Parameter3}\" \
                                                --vault-password-file ~/.ansible/vaultpass.txt \
                                                playbooks/clean.yml"
                        }
                    }
                }
            }
        }
    }
}

与使用 Ansible 插件相比,您可以以更简洁、更简单的方式控制管道。

【讨论】:

    【解决方案2】:

    当您手动构建它时也会发生此问题吗?如果是这种情况,那么我只会查看 Jenkins 构建的配置,并确保您没有在“构建后”部分选择“构建其他项目”选项并提到同一个项目:P

    已编辑

    jenkins job 由用户 xyz 启动 由用户 xyz 启动 由用户启动 xyz 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动,用于单个构建

    如果您遇到上述问题,那么它的发生是因为在我的情况下该项目被多次触发,我已经点击了两次该作业,因此您会看到两次由管理员启动,因为您会检查该选项
    不允许并发构建

    Jenkins 的问题是,当您单击构建项目时,看到构建发生的时间会稍有延迟,因此您必须再次单击它。

    【讨论】:

    • 是的,当我手动构建时会发生这种情况,但并非每次都如此。后期构建部分未配置,因此不应该是问题
    • 我还可以看到 jenkins 作业由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动 由用户 xyz 启动单个构建跨度>
    • 您能否添加 ansible 脚本,以便我可以给您一个可能导致问题的原因...同时确认您的项目没有被调用/试图被称为并行,它是multiJob 偶然??
    【解决方案3】:

    如果您看到即使手动触发作业也被触发了两次,则可能是 Jenkins 作业的配置方式。确保您禁用了并发构建。

    • 打开您的 Jenkins 作业
    • 点击配置
    • 取消选中必要时执行并发构建
    • 点击保存

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2013-02-16
      相关资源
      最近更新 更多