ITPub博客

首页 > 云计算 > 开源云工具 > 在滴滴云上使用 Jenkins 搭建基于 GitHub 的持续集成环境

在滴滴云上使用 Jenkins 搭建基于 GitHub 的持续集成环境

原创 开源云工具 作者:java06051515 时间:2018-11-30 11:38:31 0 删除 编辑

简介

Jenkins 是一个可扩展的持续集成引擎,主要用于持续、自动地构建/测试软件项目,还可用于监控一些定时执行的任务。

本文将介绍如何在 上,使用 Jenkins 作为持续集成服务器,Git 仓库作为代码存储库,实现工程的自动构建、部署等过程。

安装

以下均基于 CentOS 7.4 镜像进行安装。

运行

执行以下命令,启动 Jenkins 进程:

  systemctl  start  jenkins

服务启动后,查看  /var/log/jenkins/jenkins.log  得到管理员密码。

Jenkins 默认监听 8080 端口,也可通过修改配置  vim /etc/sysconfig/jenkins  更换。
通过 http://公网IP:8080 来访问。

这里出现了无法访问的情况: netstat -anp | grep 8080
查看进程存在,原来是被安全组拦住了,在 界面上添加一条安全组规则允许 8080 端口访问。

再次访问,可以登录,输入之前获得的管理员密码进入 Jenkins 的 web 页面。

安装插件、设置用户信息、设置 Jenkins URL 后,终于登陆到 Jenkins 主界面。

安装完成后,接下来开始自动部署的配置。

使用 Webhook 方式实现自动部署

生成 GitHub Access Token

首先,为了使 Jenkins 能够正确访问 GitHub 的 API,在 GitHub 页面上依次点击  Setting ->Developer Settings -> Personal Access Token -> Generate new token  。

选择 repo 和 admin:repo_hook 两种权限,第一个是为了正确访问GitHub 仓库,第二个是为了使用 GitHub 的 hook 机制来实现对代码更新的感知。

生成好的 Token 如图所示,此 Token 只能在生成时看到,如果关闭页面就无法再看到了,所以要谨慎保存。

配置 Jenkins 的 GitHub 插件

对于 Jenkins 的 GitHub plugin,之前在初始化 Jenkins 进入界面之前一般会默认勾选,并自动安装这个插件。如果没有安装也可以在 Jenkins 的  系统管理->插件管理->可选插件  中找到  GitHub plugin  这个插件。

安装完毕后,需要在  系统管理->系统设置->GitHub  选项卡中添加一个GitHub Server,点击  Add GitHub Server

选择添加凭据,选择 Secret Text 类型,并把刚才在 GitHub 上获取的 Access Token 填入,点击添加。

添加完毕后,在 Git Server 一栏选择刚才添加的 Secret Text,然后点击连接测试,提示: Credentials verified for user xxx, rate limit 4998 ,表示连接成功。

添加构建任务

在 Jenkins 界面上,选择新建任务,选择构建一个自由风格的软件项目。

勾选 GitHub 项目,填入需要自动构建的 GitHub 项目地址。

在源码管理一项,勾选 Git。填入项目地址,并在 Credentials 项添加一个有访问权限的账户。在 源码库浏览器 一项选择 githubweb,并依旧填入项目地址。

为了实现 push 自动构建,还需要在构建触发器中选择 GitHub hook trigger for GITScm polling ,并在构建环境中选择 Use secret text(s) or file(s) 添加之前编辑的 Secret Text(Access Token) 。

接下来编辑具体项目的构建命令。我在这里使用的示例代码是基于 Go 语言的,向页面发起请求会返回当前 IP 以及版本号。

选择 构建步骤->执行shell ,编辑构建命令。

Jenkins 的工作空间为  $JENKINS_HOME  ,默认为  /var/lib/jenkins  ,可以在  系统管理->系统设置->主目录  下看到。
Jenkins 储存所有的数据文件在这个目录下,可以通过设置  $JENKINS_HOME  环境变量或者更改 Jenkins.war 内的 web.xml 设置文件来修改。这个值在 Jenkins 运行时是不能更改的,这里不做修改,将 Jenkins pull 下来的代码作软链到  $GOPATH  目录下确保程序能够正常编译。

执行构建

至此一个简单的自动构建项目已经配置完毕。点击自动构建进行第一次构建。

这里普遍会遇到一个问题,在 Jenkins 的构建过程中,使用 shell 启动 web 服务进程后,在构建任务完成时,Jenkins 会把构建中启动的所有子进程杀掉,导致 web 进程也 down 掉了。这个问题可以通过在运行 web 进程的命令前临时更改构建任务的  $BUILD_ID  来解决。

提示构建成功后,访问对应的 主机 IP+ 端口,终于得到正确的返回值。

  { "ip" : "10.255.20.171" , "version" : "1.0" }

更改当前版本号为”2.0″,并 Git push,成功触发了自动构建。

使用 Publish Over Ssh Plugin 实现批量自动部署

安装 Publish Over Ssh Plugin 插件

在 Jenkins 执行构建完毕后,可以使用插件实现批量自动部署到多台服务器。首先,在  系统管理->插件管理->可选插件  中找到 Publish Over SSH 插件直接安装并重启 Jenkins。

配置 Publish Over SSH

首先在控制台创建两台 DC2,作为代码发布的目标节点,由于是内网访问,可以使用内网 IP,以之前创建的那台 DC2 为跳板,因此不创建 EIP 实例。

然后在  系统管理->系统设置  中找到 Publish Over SSH 的配置项,选择添加 SSH Server。这里 Passphrase 为目标服务器的登录密码, Path to key 和 key 为可用于登录目标服务器的 sshkey 私钥。但要注意在密码和私钥两项中,如果填了私钥就会默认优先使用私钥登录,若没有事先拷贝公钥到目标服务器,则会一直导致登录失败,笔者就遇到了这个问题。

配置完毕后,点击 Test Configuration 可以测试是否可以连接目标服务器。

另外,也可以在具体的 SSH Server 下添加对应其的密码或私钥。注意 Remote Directory 里必须填此用户有权限的目录。

配置自动构建任务

更改好配置后,回到刚才的构建任务,  更改配置->构建后操作->增加构建后操作步骤->Send build artifacts over SSH

这里选择刚才添加的目标服务器,并编辑配置。

运行

配置好服务后,之后就可以验证自动部署的集群是否可以正常工作了。使用 SLB 能够方便的进行节点间的负载均衡,在控制台创建一个 SLB 实例。

创建好 SLB 之后,多次请求 SLB 的 EIP,看是否能够将请求分发到不同服务器上,以及不同服务器是否均部署完毕:

证明集群的自动部署均已成功。

参考


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31559758/viewspace-2221939/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-26

  • 博文量
    167
  • 访问量
    150066