• 自动化部署02


    node1和node2都装apache
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [root@linux-node1 ~]# yum install httpd -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.zju.edu.cn
     * epel: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.zju.edu.cn
     * updates: mirrors.163.com
    Package httpd-2.4.6-45.el7.centos.4.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#
     
    [root@linux-node2 ~]# yum install httpd -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.zju.edu.cn
     * extras: mirrors.zju.edu.cn
     * updates: mirrors.163.com
    Package httpd-2.4.6-45.el7.centos.4.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node2 ~]#

      

    把apache的根目录都改成/opt/webroot

    1
    2
    [root@linux-node2 ~]# vim /etc/httpd/conf/httpd.conf
    [root@linux-node2 ~]#

    上面是默认的,改成如下配置

     node1也改成如下

     启动apache

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [root@linux-node2 ~]# systemctl start httpd
    [root@linux-node2 ~]# lsof -i:80
    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    httpd   21937   root    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    httpd   21938 apache    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    httpd   21939 apache    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    httpd   21940 apache    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    httpd   21941 apache    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    httpd   21942 apache    4u  IPv6 132900      0t0  TCP *:http (LISTEN)
    [root@linux-node2 ~]#
     
    [root@linux-node1 ~]# systemctl start httpd
    [root@linux-node1 ~]# lsof -i:80
    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    httpd   23765   root    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    httpd   23767 apache    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    httpd   23768 apache    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    httpd   23769 apache    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    httpd   23770 apache    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    httpd   23771 apache    4u  IPv6 117035      0t0  TCP *:http (LISTEN)
    [root@linux-node1 ~]#

    访问网页

    修改首页

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [www@linux-node1 ~]$ cd /deploy/code/
    [www@linux-node1 code]$ cd web-demo/
    [www@linux-node1 web-demo]$ pwd
    /deploy/code/web-demo
    [www@linux-node1 web-demo]$ ll
    total 4
    -rw-r--r-- 1 www www 9 Apr 26 22:28 index.html
    [www@linux-node1 web-demo]$ cat index.html
    nmap.com
    [www@linux-node1 web-demo]$ cd /scripts/
    [www@linux-node1 scripts]$
     
    再次部署
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [www@linux-node1 scripts]$ ./deploy.sh deploy
    git pull
    code_build
    code_scp
    web-demo_456_2017-04-27-21-40-36.tar.gz     100%  220     0.2KB/s   00:00   
    web-demo_456_2017-04-27-21-40-36.tar.gz     100%  220     0.2KB/s   00:00   
    code_deploy
    192.168.58.12.crontab.xml                   100%   21     0.0KB/s   00:00   
    code_test
    cluster_node_in
    [www@linux-node1 scripts]$
     
     
    检查部署结果,注意ctrl+f5

    查看此时自动化部署脚本的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    [root@linux-node1 scripts]# cat deploy.sh
    #!/bin/bash
     
    #Dir List
    #mkdir -p /deploy/code/web-demo/
    #mkdir -p /deploy/config/web-demo/base
    #mkdir -p /deploy/config/web-demo/other
    #mkdir -p /deploy/tar
    #mkdir -p /deploy/tmp
    #mkdir -p /opt/webroot
    #mkdir -p /webroot
    #chown -R www:www /deploy
    #chown -R www:www /opt/webroot
    #chown -R www:www /webroot
     
    #Node List
    NODE_LIST="192.168.58.11 192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'
     
    CDATE=$(date "+%Y-%m-%d")
    CTIME=$(date "+%H-%M-%S")
     
    #Shell Env
    SHELL_NAME="deploy.sh"
    SHELL_DIR="/home/www"
    SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
     
    #Code Env
    PRO_NAME="web-demo"
    CODE_DIR="/deploy/code/web-demo"
    CONFIG_DIR="/deploy/config/web-demo"
    TMP_DIR="/deploy/tmp"
    TAR_DIR="/deploy/tar"
    LOCK_FILE="/tmp/deploy.lock"
     
    usage(){
        echo  $"Usage: $0 [ deploy | rollback ]"
    }
     
    writelog(){
            LOGINFO=$1
            echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}
    }
     
    shell_lock(){
        touch ${LOCK_FILE}
    }
    shell_unlock(){
        rm -f ${LOCK_FILE}
    }
     
    code_get(){
        writelog "code_get";
        cd $CODE_DIR  && echo "git pull"
        cp -r ${CODE_DIR} ${TMP_DIR}/
        API_VER="456"
    }
     
    code_build(){
        echo code_build
    }
     
    code_config(){
        writelog "code_config"
        /bin/cp -r ${CONFIG_DIR}/base/* ${TMP_DIR}/"${PRO_NAME}"
        PKG_NAME="${PRO_NAME}"_"${API_VER}"_"${CDATE}-${CTIME}"
        cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
    }
     
    code_tar(){
        writelog "code_tar"
        cd ${TMP_DIR} && tar cfz ${PKG_NAME}.tar.gz ${PKG_NAME}
        writelog "${PKG_NAME}.tar.gz"
    }
     
    code_scp(){
        echo "code_scp"
        for node in $NODE_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
     
    cluster_node_remove(){
        writelog "cluster_node_remove"
    }
     
    code_deploy(){
        echo code_deploy
        for node in $NODE_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    code_test(){
        echo code_test
    }
     
    cluster_node_in(){
        echo cluster_node_in
    }
     
    rollback(){
        echo rollback
    }
     
    main(){
        if [ -f ${LOCK_FILE} ];then
        echo "Deploy is running"  && exit;
        fi
        DEPLOY_METHOD=$1
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                cluster_node_remove;
                code_deploy;
                code_test;
                cluster_node_in;
            shell_unlock;
                ;;
        rollback)
            shell_lock;
                rollback;
            shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1
    [root@linux-node1 scripts]#

      

     修改测试部分,完善测试函数

    过滤到,返回0,过滤不到返回其它的
    -s静默模式

    1
    2
    3
    4
    5
    6
    7
    8
    [root@linux-node1 scripts]# curl --head http://192.168.58.11/index.html | grep "200 OK"
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     9    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    HTTP/1.1 200 OK
    [root@linux-node1 scripts]# curl -s --head http://192.168.58.11/index.html | grep "200 OK"
    HTTP/1.1 200 OK
    [root@linux-node1 scripts]#

      

    准备是这样的,部署一个,测试一个,通了才继续往下部署。这样才合理
    很多公司拿预热节点部署。通过之后再部署生产节点

    先修改下上面,把主机分组,模拟分组部署
    GROUP1_LIST模拟预热节点
    GROUP2_LIST 模拟其余的全部节点
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #chown -R www:www /opt/webroot
    #chown -R www:www /webroot
     
    #Node List
    GROUP1_LIST="192.168.58.11"
    GROUP2_LIST="192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'

      

    scp这里改下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    code_scp(){
        writelog "code_scp"
        for node in $GROUP1_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP2_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
     
    把code_deploy也修改下
    下面这里是修改之前
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    cluster_node_remove(){
        writelog "cluster_node_remove"
    }
     
    code_deploy(){
        echo code_deploy
        for node in $NODE_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    code_test(){
        echo code_test
    }

      

    修改之后

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    cluster_node_remove(){
        writelog "cluster_node_remove"
    }
     
    group1_deploy(){
        echo code_deploy
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
    }
     
    group2_deploy(){
        echo code_deploy
        for node in $GROUP2_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    cluster_node_in(){
        echo cluster_node_in
    }

      

    第一组弄的只有1台机器,作为预生产节点
    一个节点如果重启需要1分钟的话,5个节点岂不是5分钟。
    所以,1个节点先作为预生产节点,部署完毕,测试完毕之后,其它节点可以直接部署了。思想上是这样

    添加group1_test测试函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    group1_deploy(){
        echo code_deploy
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
    }
     
    group1_test(){
        curl -s --head http://192.168.58.11/index.html | grep "200 OK"
        if [ $? -ne 0 ];then
          shell_unlock;
          writelog "test error" && exit;
        fi
    }
     
    group2_deploy(){
        echo code_deploy
        for node in $GROUP2_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }

      

    由于group2也要测试,并且每个节点都要测试
    因此可以把测试的部分提取出来,封装成函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    shell_lock(){
            touch ${LOCK_FILE}
    }
     
    url_test(){
        URL=$1
        curl -s --head $URL | grep "200 OK"
        if [ $? -ne 0 ];then
          shell_unlock;
          writelog "test error" && exit;
        fi
    }
     
    shell_unlock(){
            rm -f ${LOCK_FILE}
    }

      

    测试部分可以这么写
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    cluster_node_remove(){
        writelog "cluster_node_remove"
    }
     
    group1_deploy(){
        echo “code_deploy”
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
    }
     
    group1_test(){
        curl_test "http://192.168.58.11/index.html"
        echo "add to cluster"
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
    }
     
    group1_test(){
        url_test "http://192.168.58.11/index.html"
        echo "add to cluster"
    }
     
    group2_deploy(){
        echo “code_deploy”
        for node in $GROUP2_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    group2_test(){
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
     
    cluster_node_in(){
        echo cluster_node_in
    }

      

    可以把下面函数删除。是否可以加入集群,放在测试函数即可

    1
    2
    3
    cluster_node_in(){
        echo cluster_node_in
    }

      

    主函数会这么写
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    cluster_node_remove(){
        writelog "cluster_node_remove"
        DEPLOY_METHOD=$1
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                group1_deploy;
                group1_test;
                group2_deploy;
                group2_test;
                shell_unlock;
                ;;
        rollback)
                shell_lock;
                rollback;
                shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1

      

    测试脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [www@linux-node1 scripts]$ ./deploy.sh deploy
    git pull
    code_build
    web-demo_456_2017-04-27-22-41-54.tar.gz                        100%  214     0.2KB/s   00:00   
    web-demo_456_2017-04-27-22-41-54.tar.gz                        100%  214     0.2KB/s   00:00   
    code_deploy
    HTTP/1.1 200 OK
    add to cluster
    code_deploy
    192.168.58.12.crontab.xml                                      100%   21     0.0KB/s   00:00   
    HTTP/1.1 200 OK
    add to cluster
    [www@linux-node1 scripts]$

      

    没问题,可以访问

    继续优化脚本
    pre是预热节点,生产只有1个
    group1_list里面有多个

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Node List
    PRE_LIST="192.168.58.11"
    GROUP1_LIST="192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'
     
    CDATE=$(date "+%Y-%m-%d")
    CTIME=$(date "+%H-%M-%S")
     
    下面这里改下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    code_scp(){
        writelog "code_scp"
        for node in $PRE_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP1_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }

      

    上面的remove函数不需要了。删除即可,如下
    1
    2
    3
    cluster_node_remove(){
        writelog "cluster_node_remove"
    }

    下面的group_list 名字还需要改,再次优化下,把原先的group1_list改成pre_test,然后下面这里的改成group1
    下面的group1_test应该改成for循环,测试里面的节点,可以测一个加一个节点到集群。还可以测试完,一块加测试的时候,
    如果你只有2-3个节点,没必要写for循环
    优化之后内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    [root@linux-node1 scripts]# sed -n '89,128p' deploy.sh
    code_scp(){
        writelog "code_scp"
        for node in $PRE_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP1_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
     
     
    pre_deploy(){
        writelog "remove from cluster"
          ssh $PRE_LIST "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $PRE_LIST "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
    }
     
    pre_test(){
        url_test "http://${PRE_LIST}/index.html"
        echo "add to cluster"
    }
     
    group1_deploy(){
        writelog  "remove from cluster"
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    group1_test(){
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
     
    rollback(){
        echo rollback
    }
    [root@linux-node1 scripts]#

    测试的时候,如果只有几个节点,直接几行地址就行了嘛。没必要写太复杂

    1
    2
    3
    4
    5
    6
    group1_test(){
        url_test "http://192.168.58.12/index.html"
        url_test "http://192.168.58.12/index.html"
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
    主函数部分改成下面
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    [root@linux-node1 scripts]# sed -n '130,$p' deploy.sh
    main(){
        if [ -f ${LOCK_FILE} ];then
        echo "Deploy is running"  && exit;
        fi
        DEPLOY_METHOD=$1
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                pre_deploy;
                pre_test;
                group1_deploy;
                group1_test;
            shell_unlock;
                ;;
        rollback)
            shell_lock;
                rollback;
            shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1
    [root@linux-node1 scripts]#

      

    改下代码,区分下主页显示和之前的不同

    1
    2
    3
    4
    5
    6
    7
    [www@linux-node1 scripts]$ cd /deploy/code/web-demo/
    [www@linux-node1 web-demo]$ cat index.html
    nmap.com
    [www@linux-node1 web-demo]$ echo "www.nmap.com" > index.html
    [www@linux-node1 web-demo]$ cat index.html
    www.nmap.com
    [www@linux-node1 web-demo]$
     
    再次部署
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [www@linux-node1 scripts]$ ./deploy.sh deploy
    git pull
    code_build
    web-demo_456_2017-04-27-23-17-27.tar.gz                                100%  220     0.2KB/s   00:00   
    web-demo_456_2017-04-27-23-17-27.tar.gz                                100%  220     0.2KB/s   00:00   
    HTTP/1.1 200 OK
    add to cluster
    192.168.58.12.crontab.xml                                              100%   21     0.0KB/s   00:00   
    HTTP/1.1 200 OK
    add to cluster
    [www@linux-node1 scripts]$

      

    检查页面,没问题

     

    此时脚本内容如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    [root@linux-node1 scripts]# cat deploy.sh
    #!/bin/bash
     
    #Dir List
    #mkdir -p /deploy/code/web-demo/
    #mkdir -p /deploy/config/web-demo/base
    #mkdir -p /deploy/config/web-demo/other
    #mkdir -p /deploy/tar
    #mkdir -p /deploy/tmp
    #mkdir -p /opt/webroot
    #mkdir -p /webroot
    #chown -R www:www /deploy
    #chown -R www:www /opt/webroot
    #chown -R www:www /webroot
     
    #Node List
    PRE_LIST="192.168.58.11"
    GROUP1_LIST="192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'
     
    CDATE=$(date "+%Y-%m-%d")
    CTIME=$(date "+%H-%M-%S")
     
    #Shell Env
    SHELL_NAME="deploy.sh"
    SHELL_DIR="/home/www"
    SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
     
    #Code Env
    PRO_NAME="web-demo"
    CODE_DIR="/deploy/code/web-demo"
    CONFIG_DIR="/deploy/config/web-demo"
    TMP_DIR="/deploy/tmp"
    TAR_DIR="/deploy/tar"
    LOCK_FILE="/tmp/deploy.lock"
     
    usage(){
        echo  $"Usage: $0 [ deploy | rollback ]"
    }
     
    writelog(){
            LOGINFO=$1
            echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}
    }
     
    shell_lock(){
        touch ${LOCK_FILE}
    }
     
    url_test(){
        URL=$1
        curl -s --head $URL | grep "200 OK"
        if [ $? -ne 0 ];then
          shell_unlock;
          writelog "test error" && exit;
        fi
    }
     
    shell_unlock(){
        rm -f ${LOCK_FILE}
    }
     
    code_get(){
        writelog "code_get";
        cd $CODE_DIR  && echo "git pull"
        cp -r ${CODE_DIR} ${TMP_DIR}/
        API_VER="456"
    }
     
    code_build(){
        echo code_build
    }
     
    code_config(){
        writelog "code_config"
        /bin/cp -r ${CONFIG_DIR}/base/* ${TMP_DIR}/"${PRO_NAME}"
        PKG_NAME="${PRO_NAME}"_"${API_VER}"_"${CDATE}-${CTIME}"
        cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
    }
     
    code_tar(){
        writelog "code_tar"
        cd ${TMP_DIR} && tar cfz ${PKG_NAME}.tar.gz ${PKG_NAME}
        writelog "${PKG_NAME}.tar.gz"
    }
     
    code_scp(){
        writelog "code_scp"
        for node in $PRE_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP1_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
     
     
    pre_deploy(){
        writelog "remove from cluster"
          ssh $PRE_LIST "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $PRE_LIST "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
    }
     
    pre_test(){
        url_test "http://${PRE_LIST}/index.html"
        echo "add to cluster"
    }
     
    group1_deploy(){
        writelog "remove  from cluster"
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    group1_test(){
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
     
    rollback(){
        echo rollback
    }
     
    main(){
        if [ -f ${LOCK_FILE} ];then
        echo "Deploy is running"  && exit;
        fi
        DEPLOY_METHOD=$1
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                pre_deploy;
                pre_test;
                group1_deploy;
                group1_test;
            shell_unlock;
                ;;
        rollback)
            shell_lock;
                rollback;
            shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1
    [root@linux-node1 scripts]#

      

    自动化部署实战-秒级回滚

    再加个能紧急回滚的,就不考虑用户体验了。以紧急回滚为主。也不测试了

    更紧急流程。直接执行回滚上一个版本

    先写个第一种正常流程的,列出回滚版本的函数

    因此ROLLBACK_VER=$2 和rollback $ROLLBACK_VER ;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [root@linux-node1 scripts]# sed -n '129,$p' deploy.sh
    main(){
        if [ -f ${LOCK_FILE} ];then
        echo "Deploy is running"  && exit;
        fi
        DEPLOY_METHOD=$1
        ROLLBACK_VER=$2     
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                pre_deploy;
                pre_test;
                group1_deploy;
                group1_test;
            shell_unlock;
                ;;
        rollback)
            shell_lock;
                rollback $ROLLBACK_VER ; 
            shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1
    [root@linux-node1 scripts]#

      

     完善rollback函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    group1_test(){
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
     
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          ssh $node "rm -f /webroot/web-demo && ln-s /opt/webroo/$1 /webroot/web-demo"
        done
    }
     
    rollback(){
        case $1 in
            list)
              ls -l /opt/webroot/*.tar.gz
              ;;
            *)
              rollback_fun $1
        esac
    }
     
    main(){
        if [ -f ${LOCK_FILE} ];then

      

    最前面加上如下行,然后写上所有节点
    1
    2
    3
    4
    5
    6
    7
    8
    #Node List
    PRE_LIST="192.168.58.11"
    GROUP1_LIST="192.168.58.12"
    ROLLBACK_LIST="192.168.58.11 192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'

      

    下面这里改成如下
    1
    2
    3
    usage(){
        echo  $"Usage: $0 { deploy | rollback [ list |version ]}"
    }

    上面写不合适,应该不传参数列出来可以回退的版本
    现在如果rollback一个不存在的版本,它会把软链接删除了,回退也失败,因此可以反过来
    再改下
    之所以把这个if判断写在for下面。主要是,如果只部署了预生产节点,没部署其它节点
    那么回退的时候就可以把预部署节点回退了。否则其它的都回退失败了,并且还要检测其它节点上有没有包。我觉得这里应该ssh -d检测

    1
    2
    3
    4
    5
    6
    7
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          if [ -d /opt/webroot/$1 ];then
          ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroo/$1 /webroot/web-demo"
          fi
        done
    }
    继续改造(其实这里通过ssh之后判断其余节点目录是否存在的)
    1
    2
    3
    4
    5
    6
    7
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          if [ -d /opt/webroot/$1 ];then
            ssh $node "[ -d /opt/webroot/$1 ] && rm -f /webroot/web-demo && ln -s /opt/webroo/$1 /webroot/web-demo"
          fi
        done
    }

      

    这里就不对了吧。rollback之后没跟参数居然执行了
    1
    2
    [www@linux-node1 scripts]$ ./deploy.sh rollback
    [www@linux-node1 scripts]$

      

    改造下
    1
    2
    3
    4
    5
    6
    7
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          if [ -d /opt/webroot/$1 ];then
          ssh $node "if [ -d /opt/webroot/$1 ];then rm -f /webroot/web-demo && ln -s /opt/webroo/$1 /webroot/web-demo;else echo "hehe";fi"
          fi
        done
    }

      

     执行

    1
    2
    [www@linux-node1 scripts]$ ./deploy.sh rollback
    [www@linux-node1 scripts]$

      

    上面执行为和之前显示一致,再改造下。
    1
    2
    3
    4
    5
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          ssh $node "if [ -d /opt/webroot/$1 ];then rm -f /webroot/web-demo && ln -s /opt/webroo/$1 /webroot/web-demo;else echo "hehe";fi"
        done
    }

     测试

    1
    2
    [www@linux-node1 scripts]$ ./deploy.sh rollback
    [www@linux-node1 scripts]$

    执行还是没达到效果
    先妥协了。以下面为准。虽然如果少参数,会导致执行不成功,先这样

    1
    2
    3
    4
    rollback_fun(){
        for node in $ROLLBACK_LIST;do      ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroo/$1 /webroot/web-demo"
        done
    }

      

    注意把脚本最后一行改成main $1 $2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@linux-node1 scripts]# tail -10 deploy.sh
                shell_lock;
                rollback ${ROLLBACK_VER};
                shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1 $2
    [root@linux-node1 scripts]#

      

    继续测试,修改首页内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [www@linux-node1 web-demo]$ cd /deploy/code/web-demo
    [www@linux-node1 web-demo]$ ls
    index.html
    [www@linux-node1 web-demo]$ cat index.html
    www.nmap.com
    [www@linux-node1 web-demo]$ echo 'www.nmap.org' >index.html
    [www@linux-node1 web-demo]$ cat index.html
    www.nmap.org
    [www@linux-node1 web-demo]$

      

    继续执行脚本部署
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [www@linux-node1 web-demo]$ cd /scripts/
    [www@linux-node1 scripts]$ ./deploy.sh deploy
    git pull
    code_build
    web-demo_456_2017-04-28-21-17-17.tar.gz                                100%  222     0.2KB/s   00:00   
    web-demo_456_2017-04-28-21-17-17.tar.gz                                100%  222     0.2KB/s   00:00   
    HTTP/1.1 200 OK
    add to cluster
    192.168.58.12.crontab.xml                                              100%   21     0.0KB/s   00:00   
    HTTP/1.1 200 OK
    add to cluster
    [www@linux-node1 scripts]$

     检查页面

    列出回滚版本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [www@linux-node1 scripts]$ ./deploy.sh rollback list
    -rw-rw-r-- 1 www www 204 Apr 23 23:33 /opt/webroot/web-demo_123_2017-04-23-23-33-50.tar.gz
    -rw-rw-r-- 1 www www 204 Apr 23 23:43 /opt/webroot/web-demo_123_2017-04-23-23-43-48.tar.gz
    -rw-rw-r-- 1 www www 204 Apr 24 00:00 /opt/webroot/web-demo_123_2017-04-24-00-00-14.tar.gz
    -rw-rw-r-- 1 www www 204 Apr 24 00:01 /opt/webroot/web-demo_123_2017-04-24-00-01-24.tar.gz
    -rw-rw-r-- 1 www www 205 Apr 24 00:02 /opt/webroot/web-demo_123_2017-04-24-00-02-44.tar.gz
    -rw-rw-r-- 1 www www 204 Apr 24 00:04 /opt/webroot/web-demo_456_2017-04-24-00-04-05.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 27 21:40 /opt/webroot/web-demo_456_2017-04-27-21-40-36.tar.gz
    -rw-rw-r-- 1 www www 214 Apr 27 22:41 /opt/webroot/web-demo_456_2017-04-27-22-41-54.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 27 23:17 /opt/webroot/web-demo_456_2017-04-27-23-17-27.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 28 20:15 /opt/webroot/web-demo_456_2017-04-28-20-15-56.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 28 20:16 /opt/webroot/web-demo_456_2017-04-28-20-16-06.tar.gz
    -rw-rw-r-- 1 www www 221 Apr 28 20:24 /opt/webroot/web-demo_456_2017-04-28-20-24-23.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 28 20:25 /opt/webroot/web-demo_456_2017-04-28-20-25-47.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 28 20:28 /opt/webroot/web-demo_456_2017-04-28-20-28-03.tar.gz
    -rw-rw-r-- 1 www www 221 Apr 28 20:35 /opt/webroot/web-demo_456_2017-04-28-20-35-37.tar.gz
    -rw-rw-r-- 1 www www 222 Apr 28 20:43 /opt/webroot/web-demo_456_2017-04-28-20-43-32.tar.gz
    -rw-rw-r-- 1 www www 221 Apr 28 20:45 /opt/webroot/web-demo_456_2017-04-28-20-45-23.tar.gz
    -rw-rw-r-- 1 www www 220 Apr 28 20:48 /opt/webroot/web-demo_456_2017-04-28-20-48-01.tar.gz
    -rw-rw-r-- 1 www www 222 Apr 28 21:14 /opt/webroot/web-demo_456_2017-04-28-21-14-49.tar.gz
    -rw-rw-r-- 1 www www 222 Apr 28 21:17 /opt/webroot/web-demo_456_2017-04-28-21-17-17.tar.gz
    [www@linux-node1 scripts]$

      

    回滚上一个版本web-demo_456_2017-04-28-21-14-49
    1
    2
    [www@linux-node1 scripts]$ ./deploy.sh rollback web-demo_456_2017-04-28-21-14-49
    [www@linux-node1 scripts]$

      

    测试访问

     回滚成功,此时脚本内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    [root@linux-node1 scripts]# cat deploy.sh
    #!/bin/bash
     
    #Dir List
    #mkdir -p /deploy/code/web-demo/
    #mkdir -p /deploy/config/web-demo/base
    #mkdir -p /deploy/config/web-demo/other
    #mkdir -p /deploy/tar
    #mkdir -p /deploy/tmp
    #mkdir -p /opt/webroot
    #mkdir -p /webroot
    #chown -R www:www /deploy
    #chown -R www:www /opt/webroot
    #chown -R www:www /webroot
     
    #Node List
    PRE_LIST="192.168.58.11"
    GROUP1_LIST="192.168.58.12"
    ROLLBACK_LIST="192.168.58.11 192.168.58.12"
     
    # Date/Time Veriables
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'
     
    CDATE=$(date "+%Y-%m-%d")
    CTIME=$(date "+%H-%M-%S")
     
    #Shell Env
    SHELL_NAME="deploy.sh"
    SHELL_DIR="/home/www"
    SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
     
    #Code Env
    PRO_NAME="web-demo"
    CODE_DIR="/deploy/code/web-demo"
    CONFIG_DIR="/deploy/config/web-demo"
    TMP_DIR="/deploy/tmp"
    TAR_DIR="/deploy/tar"
    LOCK_FILE="/tmp/deploy.lock"
     
    usage(){
        echo  $"Usage: $0 { deploy | rollback [ list |version ]}"
    }
     
    writelog(){
            LOGINFO=$1
            echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}
    }
     
    shell_lock(){
        touch ${LOCK_FILE}
    }
     
    url_test(){
        URL=$1
        curl -s --head $URL | grep "200 OK"
        if [ $? -ne 0 ];then
          shell_unlock;
          writelog "test error" && exit;
        fi
    }
     
    shell_unlock(){
        rm -f ${LOCK_FILE}
    }
     
    code_get(){
        writelog "code_get";
        cd $CODE_DIR  && echo "git pull"
        cp -r ${CODE_DIR} ${TMP_DIR}/
        API_VER="456"
    }
     
    code_build(){
        echo code_build
    }
     
    code_config(){
        writelog "code_config"
        /bin/cp -r ${CONFIG_DIR}/base/* ${TMP_DIR}/"${PRO_NAME}"
        PKG_NAME="${PRO_NAME}"_"${API_VER}"_"${CDATE}-${CTIME}"
        cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
    }
     
    code_tar(){
        writelog "code_tar"
        cd ${TMP_DIR} && tar cfz ${PKG_NAME}.tar.gz ${PKG_NAME}
        writelog "${PKG_NAME}.tar.gz"
    }
     
    code_scp(){
        writelog "code_scp"
        for node in $PRE_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP1_LIST;do
          scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
     
     
    pre_deploy(){
        writelog "remove from cluster"
          ssh $PRE_LIST "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $PRE_LIST "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
    }
     
    pre_test(){
        url_test "http://${PRE_LIST}/index.html"
        echo "add to cluster"
    }
     
    group1_deploy(){
        writelog "remove  from cluster"
        for node in $GROUP1_LIST;do
          ssh $node "cd /opt/webroot/ && tar xfz ${PKG_NAME}.tar.gz"
          ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
        done
        scp ${CONFIG_DIR}/other/192.168.58.12.crontab.xml 192.168.58.12:/webroot/web-demo/crontab.xml
    }
     
    group1_test(){
        url_test "http://192.168.58.12/index.html"
        echo "add to cluster"
    }
     
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
          ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo"
        done
    }
     
    rollback(){
    if [ -z $1 ];then
        shell_unlock;
        echo "Please input rollback version" && exit;
    fi
        case $1 in
        list)
                    ls -l /opt/webroot/*.tar.gz
                ;;
              *)
                    rollback_fun $1
        esac
    }
     
    main(){
        if [ -f ${LOCK_FILE} ];then
        echo "Deploy is running"  && exit;
        fi
        DEPLOY_METHOD=$1
        ROLLBACK_VER=$2
        case $DEPLOY_METHOD in
        deploy)
                shell_lock;
                code_get;
                code_build;
                code_config;
                code_tar;
                code_scp;
                pre_deploy;
                pre_test;
                group1_deploy;
                group1_test;
            shell_unlock;
                ;;
        rollback)
                shell_lock;
                rollback ${ROLLBACK_VER};
                shell_unlock;
                ;;
        *)
                usage;
        esac
     
    }
    main $1 $2
    [root@linux-node1 scripts]#

      

     再完善下脚本,rollback的时候,后面参数为空,直接退出。也就是整个脚本的$2 为空,退出脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    rollback(){
    if [ -z $1 ];then
        shell_unlock;
        echo "Please input rollback version" && exit;
    fi
        case $1 in
        list)
                    ls -l /opt/webroot/*.tar.gz
                ;;
              *)
                    rollback_fun $1
        esac
    }

      

    自动化部署实战-gitlab和部署和回滚
    把gitllab装上,参照链接
     

    GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
    GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。
    它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
    1.基础环境准备

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@linux-node1 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.163.com
     * epel: mirror01.idc.hinet.net
     * extras: mirrors.aliyun.com
     * updates: mirrors.163.com
    Package curl-7.29.0-35.el7.centos.x86_64 already installed and latest version
    Package policycoreutils-2.5-11.el7_3.x86_64 already installed and latest version
    Package openssh-server-6.6.1p1-35.el7_3.x86_64 already installed and latest version
    Package openssh-clients-6.6.1p1-35.el7_3.x86_64 already installed and latest version
    Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#

      

     启动postfix

    1
    2
    [root@linux-node1 ~]# systemctl start postfix
    [root@linux-node1 ~]#

    2.安装gitlab-ce
    注:由于网络问题,国内用户,建议使用163或者阿里云镜像源进行安装:

    3.配置并启动gitlab-ce
    默认从163的源里下载,清华大学的镜像源makecache时报错
    此包286MB,安装时占800MB多。生产中注意下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@linux-node1 ~]# yum install gitlab-ce -y
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.163.com
     * epel: mirrors.ustc.edu.cn
     * extras: mirrors.163.com
     * updates: mirrors.163.com
    Package gitlab-ce-9.1.0-ce.0.el7.x86_64 already installed and latest version
    Nothing to do
    [root@linux-node1 ~]#

      

    4.配置并启动gitlab-ce

    1
    [root@linux-node1 ~]# gitlab-ctl reconfigure

    可以使用gitlab-ctl管理gitlab,例如查看gitlab状态:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@linux-node1 ~]# gitlab-ctl status
    run: gitaly: (pid 46783) 154s; run: log: (pid 46524) 194s
    run: gitlab-monitor: (pid 46839) 152s; run: log: (pid 46671) 170s
    run: gitlab-workhorse: (pid 46793) 154s; run: log: (pid 46537) 188s
    run: logrotate: (pid 46570) 186s; run: log: (pid 46569) 186s
    run: nginx: (pid 47163) 2s; run: log: (pid 46544) 187s
    run: node-exporter: (pid 46627) 179s; run: log: (pid 46626) 179s
    run: postgres-exporter: (pid 46826) 153s; run: log: (pid 46657) 171s
    run: postgresql: (pid 46369) 233s; run: log: (pid 46368) 233s
    run: prometheus: (pid 46811) 153s; run: log: (pid 46607) 180s
    run: redis: (pid 46312) 239s; run: log: (pid 46311) 239s
    run: redis-exporter: (pid 46642) 177s; run: log: (pid 46641) 177s
    run: sidekiq: (pid 46509) 195s; run: log: (pid 46508) 195s
    run: unicorn: (pid 46483) 196s; run: log: (pid 46482) 196s
    [root@linux-node1 ~]#

    一些常用命令

    1
    2
    3
    4
    gitlab-ctl status
    gitlab-ctl stop
    gitlab-ctl start
    gitlab-ctl restart

      

    先停止apache,因为gitlab占用80端口。防止冲突
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    [root@linux-node1 ~]# systemctl stop httpd
    [root@linux-node1 ~]# gitlab-ctl restart
    ok: run: gitaly: (pid 47781) 1s
    ok: run: gitlab-monitor: (pid 47788) 0s
    ok: run: gitlab-workhorse: (pid 47791) 1s
    ok: run: logrotate: (pid 47808) 0s
    ok: run: nginx: (pid 47814) 1s
    ok: run: node-exporter: (pid 47823) 0s
    ok: run: postgres-exporter: (pid 47829) 0s
    ok: run: postgresql: (pid 47847) 0s
    ok: run: prometheus: (pid 47855) 1s
    ok: run: redis: (pid 47866) 0s
    ok: run: redis-exporter: (pid 47870) 1s
    ok: run: sidekiq: (pid 47877) 0s
    ok: run: unicorn: (pid 47882) 1s
    [root@linux-node1 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
    tcp        0      0 127.0.0.1:9121          0.0.0.0:*               LISTEN      47870/redis_exporte
    tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      47855/prometheus   
    tcp        0      0 127.0.0.1:9187          0.0.0.0:*               LISTEN      47829/postgres_expo
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1896/rsync         
    tcp        0      0 127.0.0.1:9100          0.0.0.0:*               LISTEN      47823/node_exporter
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd          
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      47814/nginx: master
    tcp        0      0 127.0.0.1:9168          0.0.0.0:*               LISTEN      47788/ruby         
    tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1346/dnsmasq       
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      45266/sshd         
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1284/master        
    tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      47814/nginx: master
    tcp        0      0 127.0.0.1:25151         0.0.0.0:*               LISTEN      3249/python2       
    tcp6       0      0 :::873                  :::*                    LISTEN      1896/rsync         
    tcp6       0      0 :::3306                 :::*                    LISTEN      41106/mysqld       
    tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd          
    tcp6       0      0 ::1:9168                :::*                    LISTEN      47788/ruby         
    tcp6       0      0 :::22                   :::*                    LISTEN      45266/sshd         
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1284/master        
    [root@linux-node1 ~]#
  • 相关阅读:
    排序算法的实现
    图——广度优先遍历(邻接矩阵存储)
    最大子列和问题-4种解法
    PATB 1015. 德才论 (25)
    PATB 1018. 锤子剪刀布
    PATB 1019. 数字黑洞 (20)
    常用协议的默认端口号
    统一资源定位符URL
    hdoj1009 FatMouse' Trade——贪心算法
    hdoj2037 贪心算法——今年暑假不AC
  • 原文地址:https://www.cnblogs.com/chenshengqun/p/8118382.html
Copyright © 2020-2023  润新知