如何在Jenkins Declarative Pipeline中的steps.sh脚本中声明新变量?

时间:2019-08-21 21:07:13

标签: jenkins groovy jenkins-groovy

在groovy课堂上,我走了一步:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException

browser = webdriver.Chrome("/ProgramData/chocolatey/bin/chromedriver.exe") 

browser.get("https://rotogrinders.com/projected-stats/mlb-hitter?site=fanduel")

# Wait 20 seconds for page to load
timeout = 20
try:
    WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, 'player-popup')))
except TimeoutException:
    print("Timed out waiting for page to load")
    browser.quit()

# find_elements_by_xpath returns an array of selenium objects.

players_info = []

players = browser.find_elements_by_css_selector('div.player')

for player in players:
    link = player.find_element_by_class_name('player-popup')
    players_info.append(link.get_attribute('href'))

但是,每次我在管道上运行此命令时,都会收到一条错误消息:

def mergedBranch = steps.sh label:"Get the latest merged branch", script: """
            declare branch
            for branch in ${all_merged_branches}; 
            do
                merged_branch=$branch;
                echo $merged_branch
                break;
            done
      """, returnStdout: true

如果我更改脚本以使用三重单引号,则不会出现此错误,但是我不能使用Groovy的字符串插值,插值仅在双引号字符串内发生。我该怎么办?

1 个答案:

答案 0 :(得分:0)

问题在于,所有变量在双引号中都由jenkins求值。如果未在环境中定义所有变量,则只需转义branch和merged_branch变量,即\$branch和'\ $ merged_branch`

如果环境变量中存在all_merged_branches,则只需将步骤重写为

def mergedBranch = steps.sh label:"Get the latest merged branch", script: '''
            declare branch
            for branch in ${all_merged_branches}; 
            do
                merged_branch=$branch;
                echo $merged_branch
                break;
            done
      ''', returnStdout: true