我们有一个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
答案 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
"""