构建部署流水线能让我们自动化地进行程序构建和部署。在这篇文章中,我们选择GitHub作为源代码管理仓库,构建引擎选择Jenkins,使用Docker作为部署引擎。
docker pull jenkins
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服务器。
复制{Jenkins Home}/secrets/initialAdminPassword中的密码以root身份登录Jenkins。
按照向导填写用户名、密码、邮箱创建管理员用户,实例配置使用默认配置。
以创建我的Book Store工程下的Eureka Server模块的构建部署流水线为例。Book Store是个分布式微服务架构的多模块聚合工程,工程结构如下:
book-store
||
||
|---eureka-server
|| |
|| ---pom.xml
||
|---pom.xml
|
---...
其中,book-store根目录的pom.xml定义了book-store是个聚合父模块,eureka-server作为微服务的注册服务是book-store下的聚合子模块。
选择“系统管理”-“插件管理”,搜索下载Git和Maven Integration插件,安装完成后重启Jenkins使插件生效。
在Jenkins容器内的bash终端中使用ssh-keygen生成公钥私钥对:
ssh-keygen
进入密钥目录并查看公钥文件,复制里面的公钥:
cat root/.ssh/id_rsa.pub
其中{jenkins_home}表示Jenkins的根目录路径。
在GitHub中的“SSH and GPG keys”菜单下点击“New SSH key”,填写公钥并保存。
选择“系统管理”-“全局凭据(Manage Credentials)”,点击“添加凭据”,选择凭据类型,并填写GitHub的凭据内容。
点击“全局工具配置”,配置JDK及Maven环境。
编辑Dockerfile新文件:
vim Dockerfile
Dockerfile文件内容,以我的Eureka Server为例:
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容器内部的任务工作空间:
docker cp Dockerfile jenkins:/var/jenkins_home/workspace/{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”项填写:
install -pl eureka-server
表示只构建eureka-server模块。
在"构建后步骤(Post Steps)"中选择“Run only if build succeeds”,点击添加“执行shell”步骤,shell脚本如下:
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
点击“保存”保存该任务的配置。
选择创建的任务,点击“立即构建”,等待构建结果,若任务成功,则表示我们的构建和部署流水线成功搭建。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。