在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

阅读数:27 2019 年 12 月 20 日 15:14

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

配置 Jenkins 作业和管道

在 Jenkins 控制台中,单击新建项目。选择多分支管道,将其命名为 petclinic 然后单击确定

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)
图 5.Jenkins 多分支管道

选择 GitHub,然后从下拉列表中选择 GitHub 凭据。输入如下所示的 GitHub URL,然后单击保存以保存 Jenkins 作业。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 6.Jenkins 作业详细信息

Jenkins 构建执行器将检出并扫描 GitHub 存储库,并按照下面显示的 Jenkins 文件中的规定执行管道中的阶段。确保将注册表替换为构建阶段中 Docker 注册表 URL。

Bash

复制代码
pipeline {
agent any
triggers {
pollSCM "* * * * *"
}
stages {
stage('Build Application') {
steps {
echo '=== Building Petclinic Application ==='
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test Application') {
steps {
echo '=== Testing Petclinic Application ==='
sh 'mvn test'
}
post {
always {
junit 'target/surefire-reports/*.xml'
}
}
}
stage('Build Docker Image') {
when {
branch 'master'
}
steps {
echo '=== Building Petclinic Docker Image ==='
script {
app = docker.build("ibuchh/petclinic-spinnaker-jenkins")
}
}
}
stage('Push Docker Image') {
when {
branch 'master'
}
steps {
echo '=== Pushing Petclinic Docker Image ==='
script {
GIT_COMMIT_HASH = sh (script: "git log -n 1 --pretty=format:'%H'", returnStdout: true)
SHORT_COMMIT = "${GIT_COMMIT_HASH[0..7]}"
docker.withRegistry('https://registry.hub.docker.com', 'dockerHubCredentials') {
app.push("$SHORT_COMMIT")
app.push("latest")
}
}
}
}
stage('Remove local images') {
steps {
echo '=== Delete the local docker images ==='
sh("docker rmi -f ibuchh/petclinic-spinnaker-jenkins:latest || :")
sh("docker rmi -f ibuchh/petclinic-spinnaker-jenkins:$SHORT_COMMIT || :")
}
}
}
}

下面是最终运行的屏幕截图;如果一切顺利,您将看到一个新的 Docker 映像推送到您的 Docker 注册表中。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)
__

图 7. 管道阶段

创建和配置 Spinnaker 管道

管道是指 Spinnaker 提供的一定顺序的阶段,从操作基础设施的功能(部署、调整、禁用),到支持功能(手动判断、等待、运行 Jenkins 作业),这些功能共同精确定义了管理您部署的操作手册。管道可帮助您一致、可重复且安全地管理部署。

  1. 登录到 AWS Cloud9 IDE 环境,然后打开一个新终端。运行以下命令:

kubectl get svc -n spinnaker

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 8.Spinnaker UI 终端节点

  1. 打开浏览器,使用 spin-deck-public services 终端节点登录 Spinnaker UI,如上面的输出所示。

选择应用程序选项卡,然后选择操作 → 创建应用程序。 输入 petclinic 作为名称,然后输入有效的电子邮件地址,其余字段留为空白。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 9.Spinnaker 应用程序

  1. 管道选项卡上,单击配置新管道,输入 DeployToUAT 作为管道名称,然后单击创建

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 10.Spinnaker DeployToUAT 管道

  1. 单击添加构件并选择 GitHub → 种类,文件路径 → kubernetes/petclinic.yaml,显示名称 → Petclinic-Manifest,内容 URL https://api.github.com/repos/aws-samples/amazon-eks-jenkins-terraform/contents/kubernetes/petclinic.yaml

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 11. 管道构件

  1. 单击添加触发器并选择类型 → Docker 注册表,注册表名称 → Spinnaker 中配置的 Docker 注册表,组织 → 您的 Docker 注册表名称,映像 → Jenkins 创建的 Docker 映像。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 12. 管道触发器

  1. 单击添加阶段,选择阶段类型 → 部署(清单),账户 → eks-uat应用程序 → petclinic,清单源 → 构件,清单构件 → Petclinic-Manifest构件账户 → spinnaker-github

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 13. 部署清单阶段

  1. 单击保存将更改保存到 DeployToUAT 管道。

  2. 管道选项卡下,单击创建,输入 ****ManualApproval **** 作为管道名称,然后单击“创建”。单击添加触发器并选择类型 → 管道,应用程序 → petclinic,管道 → DeployToUAT

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)
图 14.ManualApproval 管道

  1. 单击添加阶段,选择阶段名称 → 手动判断,判断输入下添加两个选项批准拒绝,如下所示:

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 15. 手动判断阶段

  1. 单击保存将更改保存到 ManualApproval 管道。

  2. 管道选项卡下,单击创建,输入 DeployToProd 作为管道名称,然后单击创建。单击添加触发器并选择类型 → 管道,应用程序 → petclinic,管道 → DeployToProd

  3. 单击添加构件并选择 GitHub → 种类,文件路径 → kubernetes/petclinic.yaml显示名称 → Petclinic-Manifest,内容 URL https://api.github.com/repos/aws-samples/amazon-eks-jenkins-terraform/contents/kubernetes/petclinic.yaml

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)
图 16. 管道构件

  1. 单击添加触发器并选择类型 → Docker 注册表,注册表名称 → Spinnaker 中配置的 Docker 注册表,组织 → 您的 Docker 注册表名称,映像 → Jenkins 创建的 Docker 映像。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 17. 管道触发器

  1. 单击添加阶段,选择阶段类型 → 部署(清单),账户 → eks-prod,应用程序 → petclinic清单源 → 构件,清单构件 → Petclinic-Manifest构件账户 → spinnaker-github

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 18. 部署清单阶段

  1. 单击保存将更改保存到 DeployToProd 管道。

手动运行 Spinnaker 管道

现在手动运行三个管道。单击开始手动执行,选择管道 → DeployToUAT,类型 → 标记,标记 → 输入有效的标记号。单击运行并观察管道执行。

在 Amazon EKS 上使用 Jenkins 和 HashiCorp Terraform 实现持续集成(二)

图 19. 管道执行

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/continuous-integration-using-jenkins-and-hashicorp-terraform-on-amazon-eks/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布