Jenkins重新加载配置删除更改

时间:2017-10-25 00:49:45

标签: bash jenkins

目前在我的公司使用Jenkins,我为所有工程师设置了一个服务器插件,这样做我做了一些服务器管理工​​作,让我的生活更轻松一点。其中一个是配置编辑器,用于编辑$JENKINS_HOME/config.xml文件并触发配置重新加载以反映新的更改。

然而今天,当我去使用那份工作时,我们不再生效的更改,当ssh进入服务器并cat - 在config.xml文件中时,它们也没有显示。< / p>

做了一些调试,确保文件内容被正确替换,甚至将检查放入构建执行器,以确保在运行reload-configuration命令之前通过双重检查md5总和来确定一切正确因为整个内容在我的脚本中被替换。我甚至在重新加载之前sleep 15 - d,所以我可以捕获config.xml文件并确保我的更改存在,并且它们始终是。

但是,只要运行reload命令,我的所有更改都会替换为我在进行更改之前的配置内容(我在调试时也从文件的md5总和中确认了这一点)

如果这有帮助的话,这里是我工作的执行者:

$CONFIG_FILE始终为$JENKINS_HOME/config.xml

#!/bin/bash

set -o pipefail -e -u -x

cp "$CONFIG_FILE" "$WORKSPACE/config_backup.xml"

printf "Creating an AMI profile with these parameters: \n\n\
  Config File:       | $CONFIG_FILE \n\
  AMI ID:            | $AMI_ID \n\
  Description:       | $DESCRIPTION \n\
  Instance Type:     | $INSTANCE_TYPE \n\
  Security Groups:   | $SECURITY_GROUPS \n\
  Remote Workspace:  | $REMOTE_WORKSPACE \n\
  Label(s):          | $LABELS \n\
  Subnet ID:         | $SUBNET_ID \n\
  IAM Profile:       | $IAM_INSTANCE_PROFILE \n\
  Instance Tags:     | $TAGS \n\
  Executors:         | $EXECUTORS \
  \n\n\
"

new_xml="$(python "$WORKSPACE/<scriptname removed for security reasons>" \
  --file $CONFIG_FILE \
  --ami $AMI_ID \
  --description $DESCRIPTION \
  --type $INSTANCE_TYPE \
  --security-groups $SECURITY_GROUPS \
  --remote-workspace $REMOTE_WORKSPACE \
  --labels $LABELS \
  --iam-instance-profile $IAM_INSTANCE_PROFILE \
  --subnet-id $SUBNET_ID \
  --tags $TAGS \
  --executors $EXECUTORS)" || true

if [ -z "$new_xml" ]; then
  echo "Ran into an error..."
  cat "xml_ami_profile_parser.log"
  exit 1
fi

echo "setting new config file content..."
echo "$new_xml" > "$CONFIG_FILE"
echo "config file set!"

CONFIG_MD5="$(md5sum "$CONFIG_FILE" | awk '{print $1}')"
NEW_MD5="$(echo "$new_xml" | md5sum | awk '{print $1}')"

printf "comparing MD5 Sums: \n\
[ $CONFIG_MD5 ] \n\
[ $NEW_MD5 ]\n\n"

if [[ "$CONFIG_MD5" != "$NEW_MD5" ]]; then
  echo "Config File ($CONFIG_FILE) was not overwritten successfully. Restoring backup..."
  cp "$WORKSPACE/config_backup.xml" "$CONFIG_FILE"
  exit 1
fi

# use jenkins api user info
USERNAME="$(cat <scriptname removed for security reasons> | awk '{print $8}')"
PASSWORD="$(cat <scriptname removed for security reasons> | awk '{print $9}')"

curl -X POST -u "$USERNAME:$PASSWORD" "<url removed for security reasons>"

sleep 10

NEW_MD5="$(md5sum "$CONFIG_FILE" | awk '{print $1}')"

printf "comparing MD5 Sums: \n\
[ $CONFIG_MD5 ] \n\
[ $NEW_MD5 ]\n\n"

if [[ "$CONFIG_MD5" != "$NEW_MD5" ]]; then
  echo "Config file reverted after reload, marking build as error."
  exit 1
fi

非常感谢任何帮助!

编辑:

现在这里是常见的输出,无法通过它:

setting new config file content...
config file set!
comparing MD5 Sums: 
[ 58473de6acbb48b2e273e3395e64ed0f ] 
[ 58473de6acbb48b2e273e3395e64ed0f ]

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
comparing MD5 Sums: 
[ 58473de6acbb48b2e273e3395e64ed0f ] 
[ f521cec2a2e376921995f773522f78e1 ]

Config file reverted after reload, marking build as error.
Build step 'Execute shell' marked build as failure
Finished: FAILURE

1 个答案:

答案 0 :(得分:0)

对于每个人来到这里,我解决了自己的问题。詹金斯有自己的故障保护,以保持正常运行时间,但没有给你任何通知它这样做。如果用一个插件无法正确解析的东西替换config.xml(在我的情况下是Amazon EC2插件),那么插件告诉Jenkins配置文件是坏的,Jenkins将恢复到最后一个正确的XML文件使用(通常是它在记忆中的那个)。

如果发生这种情况,请仔细检查您是否使用了特殊字符。

我的违规代码是标签部分的输出,包括html字符转换引用" - &gt; &quot;并且插件无法解析此问题。这完全不同于:

 <tags>
    <hudson.plugins.ec2.EC2Tag>
      <name>&quot;Email</name>
      <value><removed for security reasons>&quot;</value>
    </hudson.plugins.ec2.EC2Tag>
    <hudson.plugins.ec2.EC2Tag>
      <name>&quot;Name</name>
      <value><removed for security reasons>&quot;</value>
    </hudson.plugins.ec2.EC2Tag>
  </tags>

 <tags>
    <hudson.plugins.ec2.EC2Tag>
      <name>Email</name>
      <value><removed for security reasons></value>
    </hudson.plugins.ec2.EC2Tag>
    <hudson.plugins.ec2.EC2Tag>
      <name>Name</name>
      <value><removed for security reasons></value>
    </hudson.plugins.ec2.EC2Tag>
  </tags>