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