在这个例子中,我们将用Jenkins创建一个完整的CI/CD(持续集成/持续交付)管道,以处理一个Docker化的应用程序。我们的Jenkins文件将依赖于Makefile命令。请看下面的管道阶段。
管线
PR生成器
当GitHub中创建了一个新的feature/* 分支或发生了一个新的feature/* 推送事件时,它将运行管道。
-
**构建。**构建docker容器。
-
**测试。**运行应用程序的测试。
-
**销毁。**销毁docker人工制品。
开发分支合并
当任何分支被合并到GitHub中的origin/develop 分支时,该管道会运行。该管道涉及部署阶段,但仅适用于Staging环境。如果是origin/master 分支,那么部署阶段将涉及生产环境。
> Build > Test > Push > Destroy > Deploy
-
**构建。**构建docker镜像。
-
**测试。**测试docker容器。
-
**推送。**将docker镜像推送到DockerHub。
-
**销毁。**销毁docker人工制品。
-
**部署。**部署应用程序的docker镜像。**注意:**我们不会实现这个阶段,因为它是自己的一篇博文,我将在未来的某一天谈到它。
**注意:**当我们构建应用的docker镜像时,应用的代码会被烘烤到镜像中,所以我们想在镜像中包含的只是必要的文件和文件夹。这是为了使镜像的大小尽可能的小。.dockerignore 文件中列出的所有其他文件和文件夹都被忽略了。
应用程序结构
.
文件
cicd/merge/develop/Jenkinsfile
pipeline {
cicd/push/feature/Jenkinsfile
pipeline {
docker/dev/php/Dockerfile
FROM alpine:3.9
docker/dev/docker-compose.yml
version: "3"
docker/dev/Makefile
PHP_SERVICE := mini_php
docker/stag/php/Dockerfile
FROM alpine:3.9
docker/stag/docker-compose.yml
version: "3"
docker/stag/Makefile
PHP_SERVICE := mini_php
src/test.php
.dockerignore
.git/
.gitignore
设置
以下任何命令都是在Jenkins服务器上运行的。
Docker安装
vagrant$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
Docker compose安装
vagrant$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Jenkins用户的权限
# Allow "jenkins" user to run docker commands.
GitHub SSH连接
jenkins$ ssh-keygen -t rsa -b 4096 -C "your@email.com"
Jenkins的GitHub凭证
应用在"Jenkins > Credentials "部分定义的步骤。
为PR生成器准备GitHub仓库
按照这里定义的步骤 - 从 "准备Github仓库 "部分开始。
准备用于合并开发分支的 GitHub 仓库
按照这里定义的步骤--从 "准备Github仓库 "部分开始。
Docker登录
jenkins$ docker login
测试
首先为Jenkins中的每个项目手动运行管道,这样你就知道它能工作。