GitLab配合Jenkins打造自动化部署
GitLab
有CI
和CD
功能模块,但我对Jenkins
更熟悉些,所以先使用Jenkins
将自动发布搭建起来,后面再继续研究GitLab
的CI
和CD
功能。
需求
- 程序使用
dotNET Core
编写,代码通过GitLab
的Merge Request
的方式推送到服务端 - 代码
Merge
后会合并到master
分支 - 通过
Jenkins
对master
分支监控,获取最新代码,部署到CentOS
的Docker
容器中
有两种方式进行构建
1、在安装Jenkins
的服务器上安装dotNET Core
环境,编译和发布在此服务器上进行,Docker
中只需要运行环境的镜像即可
2、在Docker
中进行编译、发布,但需要下载编译环境的镜像本文采用第一种方式
环境
Windows10
- 安装
jdk
- 部署
Jenkins2.129
- 安装
VS2017
- 安装
Git
CentOS7.4
- 安装
GitLab10.6.4
- 安装
docker-ce18.04
- 下载镜像
dotnetcore
安装Jenkins
在Jenkins
的官网https://jenkins.io/download/进行Jenkins
的下载,如使用Windows
,下载Windows
版本即可
因为Jenkins
是基于Java
的,所以在Windows
上先安装好JDK
的最新版本。然后根据安装向导进行安装,安装成功后会出现下面界面:
根据向导安装所有的默认插件,这个步骤也可以手动根据需要来安装相应的插件
安装插件
因为构建时需要通过SSH
连接到CentOS
,所以需要安装SSH
的publish over ssh
插件
添加了publish over ssh
插件后,在「系统管理/系统设置」中可以看到Publish over SSH
的设置区域,将需要构建发布的ContOS
的服务器信息添加进去
设置Git路径
在「系统管理/全局工具配置」中设置Git
路径C:\Program Files (x86)\Git\bin\git.exe
,在构建时拉取代码需要用到Git
工具
配置Jenkins
首先需要创建一个任务,选择构建一个自由风格的软件项目
配置分为五个步骤:
- 源码管理:设置源代码地址等相关信息
- 构建触发器:设置构建检查的时间间隔
- 构建环境:设置构建环境
- 构建:设置构建相关的命令
- 构建后操作:复制文件到
CentOS
中
源码管理
- Repositroy URL:源码仓库地址
- Credentials:
GitLab
的账户密码设置 - Branch:设置分支,当监控到设置的分支有代码更新后,会自动进行构建
- 源码库浏览器:选择
gitlab
- URL:代码地址
- Version:10.6,因为我安装的
GitLab
为10.6的版本
代码拉到本地需要进行存储,在General
中进行路径的设置
构建触发器
构建触发器有很多中,这里我们选择轮询SCM
,意思是定时检查源码变更(根据SCM软件的版本号),如果有更新就pull
最新code
下来,然后执行构建动作。
表达式配置为H/2 * * * *
表示每两分钟检查一次。表达式规则如下:
1 | * * * * * |
构建环境
构建
构建后操作
构建后的操作选择Send build artifacts over SSH
进行SSH的相关配置
- SSH Server:可以选择在「系统管理/系统设置」中全局设置的
SSH
服务器 - Source files:
dotNET Core
程序的发布目录 - Remove reefix:
dotNET Core
程序的发布目录 - remote direcotry:
CentOS
服务器的根目录中创建webapi
目录,此处配置目录路径 - Exec command:在
CentOS
服务器的根目录中创建名称为devops_webapi.sh
的脚本文件,此处配置文件路径
到此Jenkins
配置完成,保存即可。
CentOS相关设置
1、在根目录中创建webapi
目录,Jenkins
会将dotNET Core
发布后的文件复制到该目录中,在该目录中创建Dockerfile
文件,用来生成Docker
镜像,Dockerfile
文件内容如下:
1 | FROM microsoft/aspnetcore |
2、在根目录下创建devops_webapi.sh
文件,用来构建镜像和创建容器,文件内容如下:
1 | #!/bin/bash |
总结
程序自动发布的方式有很多种,先选一种自己熟悉的方式运行起来,再进行更深入的研究,和更优方式的选择。跟写代码一样,不能纸上谈兵,先运行起来,再逐步优化重构。