2017-05-26 64 views
0

我使用ansible 1.9並想運行兩個命令。我嘗試了好幾種變化:用Ansible運行幾個命令

- name: npm build 
    command: npm run build 
    args: 
    chdir: "{{ app_dir }}" 

- name: clean up 
    shell: sed_index.sh 
    args: 
    chdir: "{{ app_dir }}" 

在運行,我得到以下錯誤:

"stderr": "/bin/sh: 1: npm: not found" 

然而

npm run build 

,當我登錄到服務器並在運行正常工作APP_DIR。

我也試過:

- name: npm install and clean 
    command: "{{ item }} chdir={{ app_dir }}" 
    with_items: 
     - npm run build 
     - sed_index.sh 

我再次得到錯誤未找到NPM。

如果我註釋掉npm run build命令,在下面的'cd dist'命令上運行sed_index腳本時發現錯誤,說'dist'找不到。

sed_index.sh

#!/usr/bin/env bash 
cd dist 
sed -i 's|=static/css/font-awesome.min.css rel=stylesheet>|=/app/static/css/font-awesome.min.css rel=stylesheet>|g' index.html 

任何想法?

回答

1

npm可執行文件可能不在像/ usr/bin/npm這樣的標準位置。可能是/ usr/local/bin/npm,但是你可以找到它的安裝位置並使用完全限定的路徑。從可以運行npm命令的登錄名執行'which npm'。輸出將是你想要使用的,而不僅僅是npm。

僅供參考 - 當我正在做一次性的或其他我不想花時間編寫劇本的小任務時,如果它在Ansible中不是一個簡單的班輪,我會寫一個小腳本給通過腳本模塊執行。如果我知道某些命令位於非標準位置,那麼這些腳本中的第一個命令就是設置PATH。

1

使用npm可執行文件的完整路徑。 Ansible在非交互式shell會話中運行命令,並且不會讀取在rc文件中設置的環境。

關於第二個問題:如果您收到「'dist'not found」錯誤,則表示dist目錄不存在,或者您從錯誤的目錄中調用該目錄。給出您提供的信息是不可能的。

+0

我添加了npm run build到服務器上的shell腳本,然後用命令「{{app_dir}}/npm_build.sh」運行它,但是我得到了一個npm:command not found錯誤。 npm全球安裝在服務器上,所以我不知道爲什麼這將是 – proximacentauri

+0

我已經回答了這個問題,閱讀答案。 – techraf

+0

@techrat,對不起,但我不明白你有回答我的問題? npm確實存在於服務器上,我希望我應該能夠從任何目錄運行它。關於sed_index。噓,dist目錄存在,但我可能需要運行其中的所有命令而不是服務器上的腳本,因爲我不知道如何讓腳本識別它當前在服務器上的目錄。 – proximacentauri

0

@techraf答案應該可以幫助你解決這個問題。

出於某種原因,如果你找一個替代方式,給像下面ansible命令一試:

ansible -m shell -a "/bin/bash -c 'cd {{app_dir}} && npm run build && ./sed_index.sh'" -e "app_dir=/path/to/app_dir" <host/group name> 

你應該能夠將其轉換回你的劇本一旦你得到它運行。