试图将变量从jenkins传递到ansible playbook

时间:2017-07-20 20:05:05

标签: git jenkins tags ansible

我已经从gitlab设置了一个webhook来启动基于标签推送事件的jenkins工作。可能是合并或提交,但开发人员想要使用标记。没问题,它运作正常。这个工作得到了标记提交的哈希值,我已经验证了它也有效。这项工作然后开始另一个运行ansible playbook的工作,并开始构建。

所以我试图将git commit hash作为ansible extra_var传递,并通过execute shell命令将hash写入构建步骤中的文件。我正在使用后期构建操作来触发下游作业,我正在使用此属性文件中的参数。

控制台输出验证了这一点,我看到提交哈希回显了。 属性文件包含:

GIT_KEY=3432134325e4323423    (fake sample hash provided)

问题在于下游作业,当我尝试将GIT_KEY作为额外的var传递时,所以ansible playbook将获取正确的git commit。我收到以下错误:

/usr/bin/git checkout --force ${GIT_KEY}", "failed": true, "msg": "Failed to checkout ${GIT_KEY}"

我已经测试了这个静态设置额外的变量值,并且它有效,所以我知道该剧本有效。它只是没有插入我正确传递给它的变量,或者正如我所期望的那样。

有谁知道如何将jenkins参数作为extra_var传递给ansible?

3 个答案:

答案 0 :(得分:1)

这是我正在使用的管道代码,并将变量传递给 ansible playbook。

詹金斯管道

stage('Deploy to Dev Server'){
  steps{
         ansiblePlaybook credentialsId: 'Dev-Server', 
         disableHostKeyChecking: true, 
         extras: "-e DOCKER_TAG=${COMMIT_HASH} -e user=adminuser", 
         installation: 'Ansible Jenkins', 
         inventory: 'dev.inv', 
         playbook: 'deploy-ansible.yml'
     }
}

Ansible Playbook (deploy-ansible.yml)

- hosts: dev
  become: True
  tasks:
    - name: Start the container
      docker_container:
        name: backend_img
        image: "dockerhub_username/backend_img:{{COMMIT_HASH}}"
        state: started      
        published_ports:
          - 0.0.0.0:9090:9090
        env:
          ENV_MONGO_USER="{{user}}"

答案 1 :(得分:0)

假设您正在传递GIT_KEY,如下所示:

ansible-playbook my_playbook.yml -e GIT_KEY=$GIT_KEY -e JENKINS_BUILD_NUMBER=$BUILD_NUMBER

在您的剧本中,您使用{{ GIT_KEY }}{{ JENKINS_BUILD_NUMBER }}

来引用额外的变量

答案 2 :(得分:0)

我无法使用paramterized构建插件来使用它。 但我得到了解决方法,我使用下游作业中的injectEnv插件来读取文件中的KEY:Value,然后我能够将其作为额外的var传递,并且ansible看到了该值。