首页 > 解决方案 > 替代变量脚本不起作用

问题描述

我正在尝试用脚本替换变量,我确认变量包含有效值。该脚本在 Octopus“运行脚本”步骤中运行,没有显示错误,但文件没有被修改。

我尝试直接从终端运行 sed 并且它可以工作,但是当包含在从章鱼对目标运行的 bash 脚本中时,不会发生替换。我验证权限设置正确。

# This script is for the 'Substitute Application Variables' step in Octopus Deploy 

tokens_key=$(get_octopusvariable "Tokens-Key")
tokens_issuer=$(get_octopusvariable "Tokens-Issuer")
tokens_expiration=$(get_octopusvariable "Tokens-Expiration")
tokens_domain=$(get_octopusvariable "Tokens-Domain")

environment=$(get_octopusvariable "Octopus.Environment.Name")
application=$(get_octopusvariable "ApplicationName")
version=$(get_octopusvariable "Octopus.Release.Number")
deployment_user=$(get_octopusvariable "DeploymentUser")
source_dir="/home/$deployment_user/.octopus/Applications/OctopusServer/$environment/$application/$version"

class_folder="WEB-INF/classes"

cd $source_dir
echo pwd

#extract the classes folder of the archive
echo "unzip $source_dir/$application.war"
unzip "$source_dir/$application".war

echo $tokens_key
echo $tokens_issuer
echo $tokens_expiration
echo $tokens_domain

echo "$class_folder/application.yml"

echo "running sed in $class_folder"
cd $class_folder

#manully replace all the variables
sed -i "s/#{Tokens-Key}/$tokens_key/g" "application.yml"
sed -i "s/#{Tokens-Issuer}/$tokens_issuer/g" "application.yml"
sed -i "s/#{Tokens-Expiration}/$tokens_expiration/g" "application.yml"
sed -i "s/#{Tokens-Domain}/$tokens_domain/g" "application.yml"

在 application.yml 中,#{Tokens-Key} 应该替换为变量 $tokens_key 的值,而不是占位符。所有其他占位符也是如此。

应用程序.yml

security:
  type: cas
  jwt:
    tokens:
      key: #{Tokens-Key}
      issuer: https://#{Tokens-Issuer}
      max-age: #{Tokens-Expiration} # 15min
      cookie-domain: #{Tokens-Domain}

标签: bashsedoctopus-deploy

解决方案


推荐阅读