pushToRemote.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # check input
  3. if [ -z "$1" ]; then
  4. echo "**********************************************************************************"
  5. echo
  6. echo " Usage: ./pushToReomote registry.svicloud.com/powercloud/oms/server:V01R01B18-3043"
  7. echo
  8. echo "**********************************************************************************"
  9. echo
  10. exit 1
  11. fi
  12. # if has another process
  13. retry=30
  14. while true; do
  15. ps_count=`ps -ef | grep -v grep | grep ${0#./*} | wc -l`
  16. retry_count=`expr $retry_count + 1`
  17. # 30 times
  18. if [ "$retry_count" -ge $retry ]; then
  19. echo "timeout after 90 seconds, exit."
  20. echo
  21. exit 1
  22. fi
  23. # has other process
  24. if [ $ps_count -ge 3 ] ; then
  25. echo "another process \"${0#./*}\" is running, retry after 3 seconds."
  26. sleep 3
  27. else
  28. break
  29. fi
  30. done
  31. # make a host entry
  32. if ! grep -q "registry.svicloud.com" /etc/hosts; then
  33. echo "151.106.8.135 registry.svicloud.com" >>/etc/hosts
  34. fi
  35. # comment to use local repo
  36. sed -i "/^[^#].*registry.svicloud.com/s/^/#/" /etc/hosts
  37. # local repository, so no proxy allowed
  38. if systemctl show --property=Environment docker | grep -q HTTP_PROXY; then
  39. mkdir -p /etc/systemd/system/docker.service.d/
  40. echo > /etc/systemd/system/docker.service.d/proxy.conf
  41. systemctl daemon-reload
  42. systemctl restart docker
  43. fi
  44. # login local repo
  45. docker login -u admin -p Changeme_123 registry.svicloud.com &>/dev/null || \
  46. { echo "docker login to local repo failed" && echo && exit 1; }
  47. # pull the image
  48. if docker pull $1; then
  49. echo
  50. sed -i "/^[#].*registry.svicloud.com/s/^#//" /etc/hosts
  51. # add proxy
  52. if ! systemctl show --property=Environment docker | grep -q HTTP_PROXY; then
  53. mkdir -p /etc/systemd/system/docker.service.d/
  54. echo "[Service]" > /etc/systemd/system/docker.service.d/proxy.conf
  55. echo "Environment=\"HTTP_PROXY=http://pc.dongcj.com:1080/\" \"HTTPS_PROXY=https://pc.dongcj.com:1080\"" >> \
  56. /etc/systemd/system/docker.service.d/proxy.conf
  57. systemctl daemon-reload
  58. systemctl restart docker
  59. fi
  60. sleep 2
  61. echo -n "checking remote registry status.."
  62. ping registry.svicloud.com -c 1 &>/dev/null && echo ".ok" || { echo ".failed"; exit 3; }
  63. docker login -u admin -p "Gocm5]WeqaSufg" registry.svicloud.com &>/dev/null && \
  64. echo "login to remote registry success" || \
  65. { echo "login failed, retry login..."; sleep 1; docker login -u admin -p "Gocm5]WeqaSufg" \
  66. registry.svicloud.com &>/dev/null || \
  67. echo "login failed, retry login..."; sleep 1; docker login -u admin -p "Gocm5]WeqaSufg" \
  68. registry.svicloud.com &>/dev/null || \
  69. echo "docker login to remote repo failed"; echo; exit 1; }
  70. echo
  71. if docker push $1; then
  72. echo "push success"
  73. else
  74. echo "push $1 to remote repo failed"
  75. echo
  76. exit 1
  77. fi
  78. else
  79. echo "pull local image $1 to local server failed"
  80. echo
  81. exit 1
  82. fi