CentOS安装Jenkins实现php代码的发布

Jenkins是什么

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

安装Jenkins

Jenkins 支持多种安装方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。这里介绍Docker的安装方式。

安装Docker

http://www.884358.com/centos-install-docker/

在Docker中下载并运行Jenkins

docker run \
  -u root \
  --rm \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

启动后即可通过服务器IP:8080端口访问。

初次登录按照提示在文件/var/jenkins_home/secrets/initialAdminPassword中查看登录密码。

docker exec  -it [容器ID] /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword

PS:容器ID可以通过docker ps查看获得。

安装插件

点击选择插件来安装,然后搜索并勾选Git pluginPublish Over SSH 两个插件。默认Git plugin是勾选的,但Publish Over SSH没有。

创建管理员用户

插件安装完成后,页面跳转到管理员用户添加页面。按照提示创建管理员:

完成安装

发布PHP代码

实验环境准备

目前我们有一台服务器,通过docker方式安装了一台Jenkins服务器。我们希望通过docker容器里的Jenkins发布php代码到宿主主机。
172.17.0.1 远程服务器(宿主主机)
172.17.0.2 Jenkins服务器

另外还需要一个远程的公开的git仓库(php代码在这个仓库里)

准备git仓库

准备好一个git仓库,可以是github的,也可以是自己搭建的gitlab。
我这里作为测试,在github上创建了一个仓库,地址:https://github.com/dedemao/test-jenkins
仓库里就1个文件:index.php,文件内容如下:

<?php
    echo "hello,jenkins!";
?>

一会通过Jenkins将这个代码发布到服务器上的指定目录。

配置ssh免密登录

在Jenkins服务器生成密钥文件:

docker exec  -it [容器ID] /bin/bash
ssh-keygen -m PEM -t rsa -b 4096 -f /root/.ssh/jenkins

命令执行后将会在/root/.ssh/文件夹下生成两个文件,一个文件是私钥(jenkins),一个是公钥(jenkins.pub)
生成密钥对后,把公钥(jenkins.pub)的内容粘贴到远程服务器(宿主主机)的/root/.ssh/authorized_keys 文件里。

拷贝完公钥之后,在容器中使用以下命令手动测试一下能否通过ssh登录远程服务器(宿主主机):

ssh -p 22 -i /root/.ssh/jenkins 172.17.0.1

能正常登录则代表没有问题,如果出现让你出入用户密码的情况则是密钥没有配置成功,配置成功的情况下登录是不需要密码的。

配置Jenkins

登录Jenkins,在左侧点击系统管理,然后点击系统配置

在系统配置页面向下拉到页面底部,找到Publish over SSH

将上一步在Jenkins服务器生成的私钥(/root/.ssh/jenkins)文件的内容复制到Key中,然后点击新增:

然后完成远程机器的配置,点击 “Apply” 后如果不需要再继续添加远程机器则点击 “保存” 即可:

新建任务

以上我们配置完了插件以及远程机器,现在就可以开始新建任务了:

输入任务名称,选择构建一个自由风格的项目,点击确定:

输入任务描述:

源码管理选择git:

最后就是 “构建” ,最核心的一步,选择 “Send files or execute commands over SSH” :

设置好后,点击保存即可。

发布

完成以上操作后,就可以使用这个刚刚创建的任务去工作了,点击左面的 “立即构建” ,就能把git上的代码发布到指定的服务器上:

正在构建

构建完成

查看日志

选择控制台输出:

到远程机器上查看代码是否已发布:

如上,可以看到文件都同步成功了,而且文件的权限组也是我们设置的www。之后只要远程仓库里的源文件的内容发生改变,需要同步到线上则只需要点击该任务的 “立即构建” 即可。

自动构建

通过以上设置,当代码有变化时,需要手动点击“立即构建”才可以同步代码。这是一件很繁琐的事情,如何实现当代码提交到github时自动触发构建功能,目前,有效的解决方案是使用“钩子(webhook)”。

适用于GitHub

安装Github插件

需要配合安装Github插件。
在系统管理->插件管理处查看是否已安装了github插件:

设置构建触发器

构建触发器勾选GitHub hook trigger for GITScm polling

设置webhook

登录github,给仓库设置webhook地址:
webhook地址为:http://你的jenkins地址/github-webhook/ 注意最后的/不能忘记了,否则会报302错误。

设置好后,提交代码,然后看看是否成功:

适用于GitLab

安装GitLab插件

安装GitLabGitLab Hook插件

系统配置

在系统管理->系统配置处,找到Enable authentication for '/project' end-point,去掉勾选:

设置构建触发器

在任务中设置构建触发器,选择Build when a change is pushed to GitLab,并复制后面的GitLab webhook URL,下一步将复制到gitlab中。

设置webhook

登录gitlab,设置web钩子:

添加后,点击测试,如果显示200,则说明配置成功:

其他

重启Jenkins

网址后面输入/restart

svn

适用于使用svn来管理代码。

安装Subversion插件

添加svn凭据

任务设置

设置轮询的方式更新代码:

最后 “构建”选择 “Send files or execute commands over SSH” ,配置方式跟上面的步骤一致。

发表评论

邮箱地址不会被公开。 必填项已用*标注