构建部署流水线GitHub+Docker+Jenkins

2022-05-13 00:33:54 浏览数 (1)

1. Overview

构建部署流水线能让我们自动化地进行程序构建和部署。在这篇文章中,我们选择GitHub作为源代码管理仓库,构建引擎选择Jenkins,使用Docker作为部署引擎。

2. Install Jenkins Server in Linux

2.1 从Docker Hub拉取Jenkins官方镜像

代码语言:javascript复制
docker pull jenkins

2.2 运行镜像

代码语言:javascript复制
docker run -itd --name jenkins_ci -u root --restart unless-stopped 
-p 8080:8080 -p 50000:50000 
-v /usr/bin/docker:/usr/bin/docker 
-v /var/run/docker.sock:/var/run/docker.sock 
-v /usr/local/dockerinfo/jenkins:/var/jenkins_home 
jenkins/jenkins

注:因为我们需要在Jenkins容器内部运行Docker命令,所以将宿主机的docker.sock文件和/usr/bin/docker挂载到Jenkins容器内部,这样Jenkins容器内不需要额外安装Docker。

成功启动容器后,访问http://{your ip}:8080。若响应登录界面,则表示我们成功安装了Jenkins服务器。


3. Login,Create a User and an Instance

3.1 解锁Jenkins

复制{Jenkins Home}/secrets/initialAdminPassword中的密码以root身份登录Jenkins。

3.2 创建管理员用户并配置实例

按照向导填写用户名、密码、邮箱创建管理员用户,实例配置使用默认配置。


4. Create a Pipeline

以创建我的Book Store工程下的Eureka Server模块的构建部署流水线为例。Book Store是个分布式微服务架构的多模块聚合工程,工程结构如下:

代码语言:javascript复制
book-store    
||
||
|---eureka-server
||    |
||    ---pom.xml
||
|---pom.xml
|
---...

其中,book-store根目录的pom.xml定义了book-store是个聚合父模块,eureka-server作为微服务的注册服务是book-store下的聚合子模块。

4.1 安装Git和Maven Integration插件

选择“系统管理”-“插件管理”,搜索下载Git和Maven Integration插件,安装完成后重启Jenkins使插件生效。

4.2 使用SSH协议保护远程Shell脚本拉取GitHub仓库的信息安全

在Jenkins容器内的bash终端中使用ssh-keygen生成公钥私钥对:

代码语言:javascript复制
ssh-keygen

进入密钥目录并查看公钥文件,复制里面的公钥:

代码语言:javascript复制
cat root/.ssh/id_rsa.pub

其中{jenkins_home}表示Jenkins的根目录路径。

在GitHub中的“SSH and GPG keys”菜单下点击“New SSH key”,填写公钥并保存。

4.3 全局凭据配置

选择“系统管理”-“全局凭据(Manage Credentials)”,点击“添加凭据”,选择凭据类型,并填写GitHub的凭据内容。

4.4 全局工具配置

点击“全局工具配置”,配置JDK及Maven环境。

4.5 告知Jenkins如何构造Eureka Server应用的Docker镜像

编辑Dockerfile新文件:

代码语言:javascript复制
vim Dockerfile

Dockerfile文件内容,以我的Eureka Server为例:

代码语言:javascript复制
FROM java:8

MAINTAINER key "user's email address"

ADD target/eureka-server-0.0.1-SNAPSHOT.jar erksvr.jar

EXPOSE 7100

ENTRYPOINT ["java","-jar","/erksvr.jar"]

拷贝到Jenkins容器内部的任务工作空间:

代码语言:javascript复制
docker cp Dockerfile jenkins:/var/jenkins_home/workspace/{Jenkins任务名称}/

4.6 创建Jenkins构建和部署任务

点击“新建任务”,输入任务名称,选择“构建一个Maven项目”,在“源码管理”栏选择“Git”,并填写Git仓库地址并指定版本分支,GitHub的认证凭据选择3.3中预先配置的全局凭据。

在“源码管理”中选择“Git”并填写Book Store工程的GitHub仓库URL并指定分支。

在“构建触发器”中选择默认的“Build whenever a SNAPSHOT dependency is built”。

在“构建(Build)”中的“Root POM”项输入“pom.xml”,表示book-store根目录下的pom.xml文件;“Goals and options”项填写:

代码语言:javascript复制
install -pl eureka-server

表示只构建eureka-server模块。

在"构建后步骤(Post Steps)"中选择“Run only if build succeeds”,点击添加“执行shell”步骤,shell脚本如下:

代码语言:javascript复制
cname="eureka-server"
cid=$(docker ps -a -f "name=${cname}"  --format {{.ID}})
if ["$cid" != ""]; then
	docker stop "$cid"
	docker rm "$cid"
fi

cd "$WORKSPACE"/eureka-server
docker build -t eureka-server .

docker rmi $(docker images -q -f dangling=true)

docker run -itd --name eureka-server -p 7100:7100 eureka-server

点击“保存”保存该任务的配置。


5. Deploy Your Application

选择创建的任务,点击“立即构建”,等待构建结果,若任务成功,则表示我们的构建和部署流水线成功搭建。

0 人点赞