Jenkins 将参数作为 env 传递给 shell 脚本,用于将 sh 传递给 kubernetes pod

Jenkins pass paramater as an env to the shell script for passing sh to kubernetes pod

我们有一个 dockerized maven 项目,我们通过 Jenkins 将它部署到 kubernetes,Helm.So 我想做的是,在 shell 脚本下面作为命令传递 deployment.yaml 像下面这样在 pod 创建时启动 selenium 测试。但是不知何故,在部署服务之前,我需要根据条件语句(jenkins 参数)更新 shell 脚本中的变量,然后将更新 shell 脚本传递给 kubernetes pod。

那么,是否有根据 jenkins 参数添加 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"]

詹金斯文件


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} .
                     """
                }
            }

编辑-1

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

if [ <PROJECTNAME> == "xx]

这是我想要执行的步骤。

    projectName=
    serviceName=
    tag=
    
    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

您可以为需要在构建时动态更新的此类值保留占位符。 我会使用占位符而不是变量来保留 shell-script 如下所示:

#!/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

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

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

编辑-1:

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