在 Kubernetes 上使用 GoCD 入门
第 3 步:导入示例流水线以构建和部署示例应用程序
在本节中,我们将导入一组 GoCD 流水线,这些流水线使用基于 Docker 的构建工作流来构建和部署示例应用程序。
本节使用 GoCD 的代码即流水线功能从外部 Git 仓库导入示例流水线定义。
先决条件
-
示例流水线将示例应用程序构建为 Docker 镜像工件并将其发布到 Dockerhub。为此,请确保您拥有一个Docker Hub帐户。
-
GoCD 的代码即流水线配置允许对流水线定义进行脚本化。这些配置不包括诸如工件存储之类的全局对象。全局对象需要通过 GoCD 用户界面或 API 进行设置。此示例需要配置一个工件存储,以便流水线可以发布和获取 Docker 镜像工件。
您可以使用以下方法配置一个新的 DockerHub 工件存储:
Admin -> Artifact Stores
菜单的模板部分管理管道模板。现在您可以使用您的 DockerHub 凭据配置工件存储。
若要设置 Dockerhub 凭据,请选择注册表类型:
Others (Dockerhub, GCR, private)
Dockerhub 的 Docker 注册表 URL 是
https://index.docker.io/v1
输入您的 Dockerhub 用户凭据。
-
设置密钥
对于需要访问 Kubernetes API 以针对目标部署 Kubernetes 集群的部署流水线,必须提供并使部署脚本能够使用 API 令牌。部署脚本还需要其他密钥,例如 Dockerhub 凭据。我们在 Kubernetes 中设置这些密钥,并通过弹性代理的 pod yaml 配置使其对 GoCD 代理可用。
Kubernetes API 令牌
为了允许部署脚本与目标 Kubernetes 集群通信,您必须为部署创建一个服务帐户。该服务帐户的 API 令牌可以存储在 Kubernetes 密钥中。
参考Kubernetes RBAC 指南以获取有关创建服务帐户并将它们分配给角色的说明。
您可以使用以下 Kubernetes 配置创建包含这些凭据的密钥:
cat <<EOF >./secrets-for-gocd.yaml apiVersion: v1 kind: Secret metadata: name: secrets-for-gocd type: Opaque data: K8S_API_TOKEN: <Base64 encoded Kubernetes API token> DOCKERHUB_USERNAME: <Base64 encoded Dockerhub user name> DOCKERHUB_ORG: <Base64 encoded Dockerhub organization> EOF
编码注意事项:密钥数据的序列化 JSON 和 YAML 值被编码为 base64 字符串。换行符在此类字符串中无效,必须省略。以下流水线将在对字符串进行 base64 编码之前删除换行符。
echo -n "string" | base64
应用 secrets-for-gocd.yaml 文件以使用这些凭据创建密钥
kubectl apply -f secrets-for-gocd.yaml -n gocd
-
配置弹性配置文件。
示例流水线配置为使用GoCD Kubernetes 弹性代理. 弹性代理是按需配置的工作代理,在作业完成后终止。
弹性代理使用弹性配置文件来配置这些按需代理。Kubernetes 弹性配置文件包括 GoCD 代理的容器镜像信息以及 pod 配置 yaml。
GoCD Helm 图表会在安装后设置弹性配置文件。要查看此弹性配置文件配置,请导航到
Admin > Elastic Profiles
.需要为 GoCD 弹性代理配置诸如 Kubernetes API 令牌之类的密钥,以便其能够执行应用程序到集群的部署。
我们在先前步骤中创建的密钥配置到前面提到的弹性配置文件中。请将 pod yaml 替换为以下内容。
apiVersion: v1 kind: Pod metadata: name: pod-name-prefix-{{ POD_POSTFIX }} labels: app: web spec: containers: - name: gocd-agent-container-{{ CONTAINER_POSTFIX }} image: gocd/gocd-agent-docker-dind:v21.2.0 env: - name: KUBE_TOKEN valueFrom: secretKeyRef: name: secrets-for-gocd key: K8S_API_TOKEN - name: DOCKERHUB_USERNAME valueFrom: secretKeyRef: name: secrets-for-gocd key: DOCKERHUB_USERNAME - name: DOCKERHUB_ORG valueFrom: secretKeyRef: name: secrets-for-gocd key: DOCKERHUB_ORG - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace securityContext: privileged: true
注意- 提供的 pod yaml 使用代理镜像gocd/gocd-agent-docker-dind并使用标签
v21.2.0
。请使用与您已安装的 GoCD 服务器对应的版本。
设置外部流水线配置存储库
GoCD 流水线可以使用 YAML 或 JSON 格式在代码中定义。这些流水线定义可以存储在源代码存储库中,可以是您应用程序的存储库或单独的存储库。
GoCD 示例流水线构建并发布了一个示例 nodejs 应用程序名为“公告板”。这些流水线配置可在以下存储库中找到:
https://github.com/gocd-demo/sample-k8s-workflow
您可以使用以下方式添加新的配置存储库Admin -> Config Repositories
菜单的模板部分管理管道模板。
现在您可以配置存储库的位置以获取流水线定义。
注意:插件 ID 下拉菜单允许您根据流水线配置的格式选择 JSON 或 YAML 配置插件。
导入的示例流水线
导入后,仪表板页面应显示示例流水线。
现在流水线已经导入,我们可以运行它们并验证我们的应用程序是否已构建并且其 Docker 镜像已发布到 DockerHub。
运行build_and_publish_image
流水线,在 GoCD 仪表板中取消暂停流水线。