目前在部署blog之类的静态网站,每次修改完毕后重新部署,略显繁琐,决定通过jenkins+gitlab来进行自动化部署,至于如何安装jenkins+gitlab不是本文重点,可参考我之前的安装博文
实现自动化的部署原理:jenkins通过捕获gitlab的push event来进行自动部署
Jenkins和Gitlab配置
配置
gitlab认证:- 路径:
Jenkins-->Credentials-->System-->Global credentials(unrestricted)-->Add Credentials Kind选择Gitlab API token- 其中
API token填写gitlab中有指定仓库权限的账号 ID填写用户账号


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

Jenkins任务配置General配置:- 选择
Gitlab connection:gitlab(上面步骤配置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
- 勾选


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

- 在
构建配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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