为具有不同环境的Docker化应用程序实施CI/CD Jenkins流水线

97 阅读2分钟

在这个例子中,我们将用Jenkins创建一个完整的CI/CD(持续集成/持续交付)管道,以处理一个Docker化的应用程序。我们的Jenkins文件将依赖于Makefile命令。请看下面的管道阶段。

管线

PR生成器

当GitHub中创建了一个新的feature/* 分支或发生了一个新的feature/* 推送事件时,它将运行管道。

  1. **构建。**构建docker容器。

  2. **测试。**运行应用程序的测试。

  3. **销毁。**销毁docker人工制品。

开发分支合并

任何分支被合并到GitHub中的origin/develop 分支时,该管道会运行。该管道涉及部署阶段,但仅适用于Staging环境。如果是origin/master 分支,那么部署阶段将涉及生产环境。

> Build > Test > Push > Destroy > Deploy
  1. **构建。**构建docker镜像。

  2. **测试。**测试docker容器。

  3. **推送。**将docker镜像推送到DockerHub。

  4. **销毁。**销毁docker人工制品。

  5. **部署。**部署应用程序的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中的每个项目手动运行管道,这样你就知道它能工作。