Jenkins Pipeline 是一个强大的工具,可以自动执行部署。在各个阶段之间拆分的灵活和自定义操作是尝试此功能的一个很好的理由。
构建您自己的 Docker 镜像并将其上传到 Docker Hub 以保持存储库更新是了解 Jenkins Pipeline 如何改进您的工作方式的一个很好的示例。
条件
- 运行 Jenkins 和 Docker 的服务器(应允许 Jenkins 用户运行 Docker)
- GitHub 帐户
- Docker Hub 帐户
为什么要使用 Docker Hub?
在 Docker Hub 中构建 Docker 镜像具有多种优势。它特别有利于实现软件开发的持续集成 (CI) 和持续部署 (CD) 系统。以下是使用 Docker Hub 部署 Docker 镜像的一些优势。
- 协作:自定义 Docker 镜像可以在从事同一项目的不同开发人员之间共享,因此有助于团队内更好的协作。
- 自动化:Docker Hub 简化了开发管道和工作流的过程,并确保了持续的 Docker 镜像更新。
- 安全性:Docker Hub 提供必要的安全性,以帮助保护 docker 镜像免受已知漏洞的侵害。
- 可移植性:Docker 镜像可以在任何支持 Docker 的环境或平台上运行。
如何使用 Jenkins 管道在 Docker Hub 中构建 Docker 镜像
1. 设置环境
在 Jenkins 上安装 Docker Pipelines 插件:
管理 Jenkins →管理插件。
搜索 Docker Pipelines,单击“安装而不重启”,然后等待完成。
将 Dockerfile 定义上传到 GitHub 存储库。单击绿色按钮“克隆或下载”,然后复制 URL。
在 Jenkins 上,需要使用 Docker Hub 帐户详细信息创建新凭据。转到“凭据”→全局→“添加凭据”,然后使用您的用户名和密码填写表单。填写 ID 和描述。请注意,如果设置了 ID,则需要此特定 ID 才能从脚本中引用此凭据。在这里,我们只是使用dockerhub_id。
2. 创建第一个 Jenkins 管道
现在,我们已准备好创建第一个管道。在 Jenkins 上,转到“新建项→管道”,键入此管道项目所需的名称,然后单击“确定”。
之后,您可以跳过所有“常规”和“生成触发器”选项,直接转到“管道”部分。在这里,您可以包含一个 Pipeline 定义(通常命名为 Jenkinsfile),也可以引用外部位置,如 Git 或 Subversion。
3. 定义 Jenkins 流水线
以下代码片段,声明了 Jenkins Pipline 以从 GitHub 存储库构建 Docker 镜像:
pipeline {environment {registry = "YourDockerhubAccount/YourRepository"registryCredential = 'dockerhub_id'dockerImage = ''}agent anystages {stage('Cloning our Git') {steps {git 'https://github.com/YourGithubAccount/YourGithubRepository.git'}}stage('Building our image') {steps {script {dockerImage = docker.build registry + ":$BUILD_NUMBER"}}}stage('Deploy our image') {steps {script {docker.withRegistry( '', registryCredential ) {dockerImage.push()}}}}stage('Cleaning up') { steps { sh "docker rmi $registry:$BUILD_NUMBER" }}}
}
请注意,需要使用特定的 Docker Hub 和 GitHub 详细信息修改上述代码: 在这里,我们定义的管道有四个阶段:
- 第一个是从我们的 GitHub 存储库中获取。
Dockerfile
- 第二个将用于标记版本来构建镜像。
$BUILD_NUMBER
- 第三个是将生成的镜像推送到 Docker Hub 注册表。
- 最后,我们将清理之前在本地服务器上构建的镜像。
4. 运行管道并生成镜像
现在,我们已准备好运行 Pipeline 并检查输出,如果运行期间的任何阶段都存在错误。
转到 Jenkins 上的 Pipeline 项目,然后单击 Build Now 以手动运行。您应该获得类似于以下阶段的不同阶段的顺序输出:
如果一切正常,可以检查 Docker Hub 存储库中的新镜像,该镜像标记有与 Docker Hub 注册表匹配的 Jenkins 构建版本:
这是如何使用 Pipelines 和集成部署的不同组件的基本示例。
最后的思考
在本文中,我们演示了在 Docker Hub 中使用 Jenkins 构建 Docker 镜像的简单过程。在进行过程中,可以通过管道创建许多复杂的集成。
使用 Jenkins 的一些想法:
- 定义一个 Webhook,以便在提交提交到 GitHub 存储库时运行管道。
- 在同一管道中包含多个容器,以保留不同的阶段(如后端和前端)或不同的环境(开发/生产)
- 通过电子邮件/电报/Slack 设置通知,其中包含管道的状态和/或输出。