Jenkins将参数作为环境传递给shell脚本,以将sh传递给kubernetes pod

时间:2020-09-25 11:39:09

标签: shell jenkins kubernetes jenkins-pipeline sh

我们有一个dockerized的Maven项目,我们通过Jenkins和Helm将其部署到kubernetes,所以我想做的是将shell脚本作为以下命令传递到deploy.yaml中以启动硒测试。当pod正在创建时。但是在以某种方式部署服务之前,我需要根据条件语句(jenkins参数)更新shell脚本中的变量,然后将其更新到kubernetes pod。

那么,是否有必要根据詹金斯参数添加if语句和更新变量,并传递给具有适当值的pod?

Shell脚本

#!/bin/sh
    
mvn --projects {$projectName} --also-make clean test -Dcucumber.filter.tags="@${servicename} or @${tag}" -Denvironment=test -Ddhc=true -Djavax.net.ssl.trustStore=/usr/java/openjdk-14/lib/security/cacerts

Deployment.yaml


  env:
    {{- range $key, $value := .Values.extraEnv }}
    - name: {{ $key }}
      value: {{ $value | quote }}
    {{- end }}
  command: ["/test-script.sh"]

Jenkinsfile


parameters {    
    string(name: 'projectName', defaultValue: "Xx", description: 'Which project do you want to test?')
    string(name: "service_name", defaultValue: 'Yy', description: 'Selenium tag for service name')
    string(name: "tag", defaultValue: 'must')
    //string(name:'branchName', defaultValue: "origin/development", description: 'Environment for selenium tests')}

    stage('Deploy to dev'){
        steps{
            script{
                   sh """ 
                       helm upgrade --install --debugtest-service --values values.${ENV}.yaml --namespace ${namespace} --set image.tag=${env.BUILD_NUMBER} .
                     """
                }
            }

EDIT-1

ı只是根据以下答案添加了我的问题。因此,在运行sed并更新脚本之后,如何添加if语句来检查服务名称参数的值?或者我可以使用类似的东西

if [ <PROJECTNAME> == "xx]

这是我想做的步骤。

    projectName=$1
    serviceName=$2
    tag=$3
    
    if [ "$serviceName" == "xx" ]
    then
        echo "Tests are running "..
        mvn --projects <PROJECTNAME> --also-make clean test -Dcucumber.filter.tags=""@<SERVICENAME> or @<TAG>"" 
    else 
    echo 'All test scenarios are running on stage environment'
    mvn --projects <PROJECTNAME> --also-make clean test -Dcucumber.filter.tags="@<SERVICENAME> or @<SERVICENAME>" -
    fi

1 个答案:

答案 0 :(得分:1)

您可以保留此类值的占位符,这些值需要在构建时动态更新。 我将使用占位符而不是变量将shell脚本保留如下:

#!/bin/sh
mvn --projects <PROJECTNAME> --also-make clean test -Dcucumber.filter.tags="@<SERVICENAME> or @<TAG>" -Denvironment=test -Ddhc=true -Djavax.net.ssl.trustStore=/usr/java/openjdk-14/lib/security/cacerts

然后在sed命令上方sh block内的helm upgrade ...行中,用构建时间值替换占位符,以便可以将其传递给下一组操作。

sh """
sed -i \"s/<PROJECTNAME>/${projectName}/g; s/<SERVICENAME>/${service_name}/g; s/<TAG>/${tag}/g\" /path/to/test-script.sh
helm upgrade . . . 
"""

EDIT-1:

Example: 
if (serviceName == 'xx') {
    env.TAG = serviceName
} 
sh """
.... other actions
"""