我正在尝试开发一个与salesforcedx
和bamboo
互动的脚本。我想编写一个简单的python脚本来运行每个cli命令并在每次调用后运行退出代码。例如
import os
path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
auth = "sfdx force:auth:jwt:grant --clientid clientidexample --jwtkeyfile /root/server.key --username username@example.org --setalias Alias --setdefaultdevhubusername; echo $?"
os.chdir(path)
os.system(auth)
我得到了这样的结果
Successfully authorized username@example.org with org ID 234582038957
0<< exit code 0 or could 1 or 100
我希望能够运行IF语句(如果可能),以便在弹出除0退出代码之外的任何数字时停止脚本。请记住,我的脚本将使用Saleforce cli命令进行多次调用,希望所有这些命令都会导致0,但是为了防止其中一次调用失败,我需要一些停止脚本的方法。非常感谢任何建议或帮助!
答案 0 :(得分:1)
import subprocess
path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
users = {
'username@example.org': 'Alias',
'other@example.org': 'Other Alias'
}
for username, alias in users.iteritems():
auth = ['sfdx', 'force:auth:jwt:grant',
'--clientid', 'clientidexample',
'--jwtkeyfile', '/root/server.key',
'--username', username,
'--setalias', alias,
'--setdefaultdevhubusername']
status = subprocess.call(auth, cwd=path)
if status != 0:
print("Argument list %r failed with exit status %r" % (auth, status))
...将自动停止任何非零退出代码。如果您不想自己进行比较,可以使用subprocess.check_call()
并依赖于抛出的CalledProcessError。
社区Wiki,因为这与许多关于该主题的许多问题重复。
答案 1 :(得分:0)
这是我的最终代码,基于此处的建议和其他一些文章。
#!/usr/bin/python3
import subprocess
import os
import sys
path = "/var/Atlassian/bamboo/bamboo-home/xml-data/build-dir/SAL-SC-JOB1"
sfdx = 'sfdx'
auth_key= (os.environ['AUTH_KEY']) ### environment variable
def auth():
username="username@example.org"
alias="somealias"
key="server.key"
command="force:auth:jwt:grant"
auth= [ sfdx, command,
'--clientid', auth_key,
'--jwtkeyfile', key,
'--username', username,
'--setalias', alias,
'--setdefaultdevhubusername']
status = subprocess.call(auth, cwd=path)
if status != 0:
raise ValueError("Argument list %r failed with exit status %r" % (auth, status))
elif status == 0:
print("auth passed with exit code %r" % (status))
auth ()