基于ubuntu18.04搭建一套持续集成、部署的系统,在本地推送(push)代码到Gitlab后,通过Gitlab的webhook触发Jenkins任务,自动拉取代码并部署到生产服务器运行。
1. Jenkins搭建
- 查看是否安装了java
java -version
- 如果没有安装java,则执行下面的命令安装
sudo apt-get install openjdk-8-jre
配置java环境变量,在
/etc/profile
中添加以下内容:#set jdk environment
export JAVA_HOME=/usr/lib/jvm/Java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH使配置文件生效
source /etc/profile
- 安装Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
- 运行jenkins, 访问 http://localhost:8080/
java -jar /usr/share/jenkins/jenkins.war
由于8080端口可能被占用,建议改端口:vim /etc/default/jenkins
,找到HTTP_PORT=8080
这一项,将其改为其他端口
然后重启sudo systemctl restart jenkins
参考:https://blog.csdn.net/lsl520hah/article/details/102839940
2. 生产服务器准备(ubuntu18.04)
将Django项目文件夹
mipin
拷贝到生产服务器/home/ubuntu
路径下2.1 python安装
python3.7安装参考:https://zhuanlan.zhihu.com/p/62930419
python安装完成后,开始安装虚拟环境
virtualenv
sudo pip3.7 install virtualenv
sudo pip3.7 install virtualenvwrapper
配置环境变量
vim ~/.bashrc
,加入以下内容export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3.7
export WORKON_HOME=/home/ubuntu/.virtualenvs
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.shsource ~/.bashrc
创建名为
mipin
的虚拟环境(作为Django项目运行的虚拟环境)
mkvirtualenv mipin
pip install -r /home/ubuntu/mipin/requirements.txt
2.2 部署Django项目
这里使用uwsgi来运行Django项目,并通过supervisor来管理进程
详见:https://www.yuque.com/docs/share/2ccfaa59-827c-4549-9a6e-1c214c02c2b6?# 《Supervisor使用》
3. Jenkins及Gitlab配置
3.1 安装jenkins插件
- 需要安装的插件有
Gitlab Hook
、Build Authorization Token Root
、Publish Over SSH
、Gitlab Authentication
、Gitlab
、Git Parameter
- 安装完插件,重启jenkins
3.2 配置SSH密钥
- 首先在jenkins所在的主机上生成一对SSH密钥
ssh-keygen -t rsa -P ''
执行这条命令,会在~/.ssh
目录下创建2个文件: id_rsa
(私钥) 、id_rsa.pub
(公钥)
- 然后将公钥发送到需要部署代码的主机
ssh-copy-id -i ~/.ssh/id_rsa.pub <IP>
之后在jenkins所在主机上直接使用ssh <IP>
看是否能免密码登录到目标主机
若还有问题请参考:https://www.cnblogs.com/jager/p/5986563.html
- 将私钥以及SSH主机配置到jenkins系统设置中
打开系统设置
复制私钥内容填入
添加目标服务器(点击Add)
(如果需要配置多台服务器,同样按上面方法将jenkins所在主机的公钥发到目标服务器,再到这里点击Add添加即可)
点击save保存
3.3 新建jenkins项目
- 新建项目
- 配置项目
点击Add添加Git认证密钥
复制自己开发电脑的私钥到这里(前提是已经在Gitlab上添加了自己的公钥)
- 如何在Gitlab上添加公钥
点击Gitlab右上角个人中心的Settings进入设置页面
- 配置build triggers(记录url以及secret token,用于后面Gitlab中webhook的配置)
点击Advanced
- 配置部署参数
在部署的时候,有时可能需要配置一些可变参数,这些参数能够在后续执行部署脚本(Exec command)的时候获取到
- 配置构建步骤
这里同样可以配置多个服务器,点击Add server添加即可
另外,建议将Advanced中Exec timeout(命令执行的超时时间)调整大一点 , 按照下图配置
Exec command一栏即代码传输到服务器之后需要执行的构建步骤,上图是一个简单的示例。实际生产中,我们是使用supervisor来管理进程,并且还需要进行代码备份,以方便后续回滚,一个完整的脚本如下:
case $Status in |
3.4 Gitlab配置webhook
测试
3.5 如何查看部署结果
做完以上步骤,可以尝试在本地push代码到Gitlab,然后登陆Jenkins查看部署结果
点击console output查看控制台输出
3.6 回滚
由于在配置时加入了构建参数,因此我们可以在手动构建的时候根据情况选择
4. 参考文章
Ubuntu18.04安装Jenkins : https://blog.csdn.net/lsl520hah/article/details/102839940
Gitlab + Jenkins实现自动部署:https://blog.51cto.com/bigboss/2129477
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!