【发布时间】:2021-01-11 17:56:03
【问题描述】:
我们有一个 dockerized maven 项目,我们通过 Jenkins 和 Helm 将它部署到 kubernetes。所以我想做的事情是,将下面的 shell 脚本作为命令传递到 deployment.yaml 中,如下所示以启动 selenium 测试pod 正在创建时。但不知何故,在我部署服务之前,我需要根据条件语句(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"]
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
【问题讨论】:
标签: shell jenkins kubernetes jenkins-pipeline sh