jenkins自动化部署

目前在部署blog之类的静态网站,每次修改完毕后重新部署,略显繁琐,决定通过jenkins+gitlab来进行自动化部署,至于如何安装jenkins+gitlab不是本文重点,可参考我之前的安装博文

实现自动化的部署原理:jenkins通过捕获gitlabpush event来进行自动部署

JenkinsGitlab配置

  • 配置gitlab认证:

    • 路径:Jenkins-->Credentials-->System-->Global credentials(unrestricted)-->Add Credentials
    • Kind选择Gitlab API token
    • 其中API token填写gitlab中有指定仓库权限的账号
    • ID填写用户账号

    Jenkins配置gitlab认证

    Gitlab API token生成

  • Jenkins配置gitlab连接

    • 路径:系统管理—>系统设置
    • 填写连接名,自定义
    • 填写gitlab访问URL
    • 选择gitlab认证
    • 测试连接

    Jenkins配置gitlab连接

  • Jenkins任务配置

    • General配置:
      • 选择Gitlab connectiongitlab(上面步骤配置gitlab连接的连接名)
      • Gitlab connection填入group/repository name
    • 构建触发器配置:
      • 勾选Build when a change is pushed to GitLab. GitLab CI Service URL:http://ip:port/jenkins/project/repository name
      • 选择push events 事件触发构建
      • 选择分支过滤(此处可以根据不同的需求来使用过滤功能)
      • secret token后面将会填入Gitlab项目中的webhook

    General配置

    构建触发器配置

  • 添加Gitlab webhook

    • gitlab中找到项目—>setting—>Integrations配置
    • URL:填入触发器中配置的GitLab webhook URL
    • Secret Token:构建器中生成的Secret Token
    • 点击Add webhook
    • 点击test—>选择push event进行测试:Hook excuted successfully:HTTP 200即为成功

    Gitlab Add webhook

  • 构建配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/env bash
    echo ${WORKSPACE}

    HTML_PATH=/var/www/html
    NGINX_USER=www-data
    NGINX=/usr/sbin/nginx

    # Git archive zip
    cd ${WORKSPACE} && git archive --format zip --output "./output.zip" -0 HEAD

    # Delete older and copy newer
    sudo rm -rf ${HTML_PATH} && sudo mkdir -p ${HTML_PATH} && sudo mv ${WORKSPACE}/output.zip ${HTML_PATH}

    # Unzip
    cd ${HTML_PATH} && sudo unzip output.zip && sudo chown -R $NGINX_USER:$NGINX_USER $HTML_PATH

    # Nginx
    sudo $NGINX -s reload

    # Clean
    sudo rm -rf ${HTML_PATH}/output.zip ${HTML_PATH}/reload-nginx.sh

参考链接

分享到