簡體   English   中英

試圖將變量從 jenkins 傳遞給 ansible playbook

[英]Trying to pass a variable from jenkins to ansible playbook

我已經從 gitlab 設置了一個 webhook 來啟動一個基於標簽推送事件的 jenkins 工作。 可能是合並或提交,但開發人員想要使用標簽。 沒問題,它工作正常。 這項工作獲取標記提交的哈希值,我已經驗證它也有效。 然后,該作業啟動另一個運行 ansible playbook 的作業,並開始構建。

所以我試圖將 git commit hash 作為 ansible extra_var 傳遞,並在構建步驟中通過 execute shell 命令將散列寫入文件。 我正在使用后期構建操作來觸發下游作業,並且我正在使用此屬性文件中的參數。

控制台輸出驗證了這一點,我看到提交哈希回顯。 屬性文件包含:

GIT_KEY=3432134325e4323423    (fake sample hash provided)

問題出在下游作業中,當我嘗試將 GIT_KEY 作為額外變量傳遞時,ansible playbook 將獲取正確的 git 提交。 我收到以下錯誤:

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

我已經測試了這個靜態設置額外 vars 值,並且它有效,所以我知道劇本有效。 它只是沒有插入我正確傳遞給它的變量,或者正如我所期望的那樣。

有誰知道如何將 jenkins 參數作為 extra_var 傳遞給 ansible?

假設您正在傳遞GIT_KEY如下:

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

在您的劇本中,您使用{{ GIT_KEY }}{{ JENKINS_BUILD_NUMBER }}引用額外的變量

這是我正在使用的管道代碼並將變量傳遞給 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}}"

我無法讓它僅與參數化的構建插件一起工作。 但是我讓它使用了一種解決方法,我在下游作業中使用了 injectEnv 插件從文件中讀取了 KEY:Value,然后我可以將它作為額外的 var 傳遞,並且 ansible 可以看到該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM