使用 Jenkins + Blue Ocean 构建 PHP 应用

1,822 阅读4分钟

场景

原本的博客后端系统是通过 composer 安装依赖后使用 docker-compose 构建镜像容器运行的,这种情况下,每次迭代都需要重复进行以下流程:

  • 开发完毕后通过 git 提交代码
  • 登录服务器 git pull 拉取代码
  • 安装依赖 composer install|update (可选)
  • 构建镜像并启动容器 docker-compose up -d --build (可选)

当一天内频繁更新时,就会产生大量的重复性工作,且比较容易犯错(人总会有犯错的时候)

故此,我选择做出一些改变,让机器做这件频繁重复的事情(主要还是懒~)

Jenkins

Jenkins 是一个开源的 CI&CD 软件,简单、灵活、可扩展。提供1000+插件来支持构建、部署、自动化, 满足任何项目的需要。

安装

这里通过 docker jenkinsci/blueocean 镜像搭建:

# docker run -d -u root --name jenkins -p 8089:8080 -v /usr/local/jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v "$home":/home jenkinsci/blueocean

容器启动后可通过 http://IP:8089 端口访问 Jenkins 等待系统初始化完成后出现 输入秘钥解锁 解锁页面。

docker 容器日志中获取秘钥并输入页面即可解锁系统

# docker logs --tail 30 -f jenkins

秘钥位于日志中两行***号之间

系统解锁后就可以安装想要的插件并开始使用啦(也可以直接安装系统推荐的插件)

目标

通过配置 Pipeline 来自动实现以下流程。

  • 自动同步git仓库最新代码版本至 Jenkins
  • 通过 composer install 安装依赖
  • 拷贝代码至项目运行目录(因为需要nginx搭建站点,所以目录固定)
  • 通过 docker-compose 重启容器

创建流水线

首先打开 Blue Ocean 点击 创建流水线

创建流水线1.png

选择应用所在的代码仓库,这里我选的是 GitHub

选择代码仓库

选择完毕后,如果是第一次使用 GitHub 作为工作流代码仓库的话,需要在 GitHub 生成一个 access token 并绑定至 Jenkins

image.png

接下来跟着步骤一步一步的绑定 GitHub 组织、选择工作流绑定的项目仓库后,点击 创建流水线 即可。

选择项目

此时如果项目仓库中没有 Jenkinsfile 的话会出现一个页面让我们可视化的配置,这里直接取消掉该步骤即可。

在项目根目录中创建 Jenkinsfile 文件,并写入以下内容

pipeline {
  agent {
    label 'my-blog'	// 使用 label 为 my-blog 的节点运行该流水线的构建任务
  }
  stages {
    stage('build') {
      steps {
        sh 'composer install'
      }
    }

    stage('deploy') {
      steps {
        input message: 'Begin deployment? (Click "Proceed" to continue)'
        sh './restart.sh'
      }
    }
  }
}

PS:这里的 my-blog 是我创建的子节点,节点标签为 my-blog 因为我有一台服务器已经装好了 php composer 环境,所以直接使用这台服务器来构建应用(如何创建子节点参照 Jenkins创建子节点

这里主要是定义与描述该流水线的工作方式以及内容:

  • 执行shell命令 composer install 构建代码,处理依赖
  • 运行 restart.sh 进行代码部署

restart.sh

rsync -avzP --delete ./ /data/website/blog/ --exclude "temp"
cd /data/website/blog
docker-compose restart

因为很早之前我已经将 docker 镜像以及容器构建完成,所以这里就直接重启应用的容器好了,不再重新构建镜像和容器(也可以节省很多构建时间)

将改动提交至代码仓库后,进入 Jenkins 后台,打开 Blue Ocean

Blue Ocean

在分支页面选中要进行构建的分支,点击 运行 图标

查看构建任务

点击右下角的 打开 构建按钮可以查看当前的构建任务

继续构建

这里加了一个手动确认部署的过程(配置项为 Jenkinsfile 中的 input message

点击继续后,将进行最后的部署工作。

当页面主题色变为 绿色 时代表构建任务成功完成,红色 为构建失败,可以展开最后进行的构建步骤查看详细输出信息。

构建任务完成

总结

至此,就已经通过 Jenkins + Blue Ocean 创建了一个简单的 php 应用构建、部署工作流啦~ 不过这里还有一些更好的东西可以实现:

  • 配置 WebHook 自动拉起构建任务
  • 基于分支进行多环境构建
  • 自动构建新的 docker 镜像
  • 。。。

真香

参考