专栏首页程序猿Janwee构建部署流水线GitHub+Docker+Jenkins
原创

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

1. Overview

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

2. Install Jenkins Server in Linux

2.1 从Docker Hub拉取Jenkins官方镜像

docker pull jenkins

2.2 运行镜像

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是个分布式微服务架构的多模块聚合工程,工程结构如下:

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生成公钥私钥对:

ssh-keygen

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

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新文件:

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任务名称}/

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”项填写:

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

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


5. Deploy Your Application

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

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 在 Kubernetes 上使用 Spinnaker 构建部署流水线

    Spinnaker 是一种持续交付平台,最初由 Netflix 开发,用于快速、可靠地发布软件更改。Spinnaker 使开发人员可以更轻松地专注于编写代码,而...

    我是阳明
  • 部署流水线解析

    它保证那些创建大型复杂系统的团队具有高度的自信心和控制力。一旦代码提交引入了问题,持续集成就能为我们提供快速的反馈,从而确保我们作为一个团队所开发的软件是可以正...

    新亮
  • 加快GitLabCI流水线构建!

    GitLab.com 提供共享的Runner程序供每个存储库使用,虽然这对于快速开始来说是很棒的,但我们发现最大的单项速度提升来自接待我们自己的Runner。对...

    DevOps云学堂
  • 八、pipeline流水线构建项目

    JENKINS 2.0的精髓是PIPELINE AS CODE,是帮助JENKINS实现CI到CD转变的重要角色。什么是PIPELINE,简单来说,就是一套运行...

    jackxiao
  • Jenkins + Pipeline 构建流水线发布

    Jenkins + Pipeline 构建流水线发布 利用Jenkins的Pipeline配置发布流水线 参考: https://jenkins.io/doc...

    shaonbean
  • 构建基于Python的CI/CD流水线

    这周三晚上的测试运维试听课Python专项的第一次课程,让我们一起回顾一下课程内容,并为我们的基于Python的CI/CD流水线做个小小的总结。

    TestOps
  • rancher流水线自动化部署

    准备docker环境,不会安装的参考链接 https://docs.docker.com/install/linux/docker-ce/centos/

    24-丰总
  • Jenkins流水线构建并发布.Net项目

    在Jenkins中实现CI / CD的方法有很多,例如Blue Ocean,Free Style项目和Declarative Pipeline。在本文中,我将解...

    DevOps云学堂
  • Jenkins Pipeline 流水线部署 Kubernetes 应用

    虽然云原生时代有了Jenkins X、Drone、Tekton 这样的后起之秀,但 Jenkins 这样一个老牌的 CI/CD 工具仍是各大公司主流的使用方案。

    DevOps时代
  • 在CI流水线中测试Kubernetes部署

    客座文章最初由Eficode Praqma云基础设施和DevOps顾问Michael Vittrup Larsen在Eficode Praqma上发表。

    CNCF
  • GitLab流水线中对部署进行控制

    在我们的自动化世界中,为什么要手动做一些事情?手动几乎已成为低效率的代名词。但是,对于CI/CD管道,正确的配置手动作业可能是控制部署并满足合规性要求的好方法。...

    DevOps云学堂
  • 没有高效的部署流水线,何谈DevOps

    什么是流水线 ? 流水线(Pipeline)源自福特,是工业化生产的基石,福特汽车采用流水线生产之后,组装车辆从12.5小时缩短至93分钟,效率提升8倍,这也是...

    DevOps时代
  • 使用 Jenkins Pipeline 流水线部署 Kubernetes 应用

    要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式。Pipeline,简单来说,就是一套运行在 Jenk...

    我是阳明
  • Jenkins 流水线远程部署 .NET Core/Framework 到 IIS

    在本章中,将会介绍在 Windows Jenkins 上,编译 .NET Core、.NET Framework 项目,以及远程部署到 IIS 中。

    痴者工良
  • Jenkins--pipline 流水线部署Java后端项目

    写在前面 之前我的博客里面写过Jenkins自动化部署Java项目,可参考博客 https://blog.51cto.com/13760351/2382103 ...

    小仙女闯运维
  • 使用Jenkins pipeline流水线构建docker镜像和发布

    对于Pipeline, Definition选择 "Pipeline script from SCM".

    Ryan-Miao
  • 加快GitLabCI流水线构建的一些方法

    GitLab.com 提供共享的Runner程序供每个存储库使用,虽然这对于快速开始来说是很棒的,但我们发现最大的单项速度提升来自接待我们自己的Runner。对...

    DevOps云学堂
  • 构建可视化看板与持续发布流水线

    又到了周五的回顾课程,这次讲的是沙盘,也是我们TestOps课程第一阶段的最后一次课。

    TestOps
  • 手把手教您构建自己的 DevOps 流水线

    持续交付是一组能够帮助软件开发团队极大的提高其软件交付的速度和质量的模式和最佳实践组成。

    DevOps时代

扫码关注腾讯云开发者

领取腾讯云代金券