繁体   English   中英

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 和 Helm 将它部署到 kubernetes。所以我想做的事情是,将 shell 脚本作为一个命令传递到 deploy.yaml 中,如下所示,在 pod 启动时启动 selenium 测试创造。 但不知何故,在部署服务之前,我需要根据条件语句(jenkins 参数)更新 shell 脚本中的变量,然后将更新 shell 脚本传递给 kubernetes pod。

那么,无论如何要添加 if 语句并根据 jenkins 参数更新变量并以适当的值传递给 pod 吗?

外壳脚本

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

部署.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=$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

您可以为这些需要在构建时动态更新的值保留占位符。 我将使用占位符而不是变量保留如下 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

然后在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
"""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM