node.js - 如何使用动态 url 启动 docker 容器
问题描述
我的要求如下:
- 开发人员在 Jenkins 中创建了一个分支。假设分支名称是“mystory-101”
- 现在开发者将代码推送到这个分支
- Jenkins 作业在提交被推送到分支“mystory-101”后立即开始,并为该分支创建一个新的 docker 镜像(如果尚未创建)
- 我的应用程序是基于 Node.js 的应用程序,因此 docker 容器以 node.js 开头并从分支“mystory-101”部署代码
- 部署代码并运行 node.js 后,我还希望可以通过 URL 访问此 node.js 应用程序:https ://mystory-101.mycompany.com
为此,我正在阅读此https://medium.com/swlh/ci-cd-pipeline-using-jenkins-dynamic-nodes-86ea854ff7a7 但我不确定如何完成第 5 步。您能否建议如何自动实现这一目标?
解决方案
重新格式化评论中的答案,安装 Jenkins 和 Kubernetes 集群,您可以使用 Jenkins 插件(例如oc
或)自动执行部署kubernetes
,或者您可能更喜欢kubectl
直接使用客户端,假设您的代理确实具有该二进制文件。
不了解 RBAC 细节,您可能需要 Jenkins 的 ServiceAccount,并使用令牌(可以在以您的 ServiceAccount 命名的 Secret 中找到)。该 ServiceAccount 应该有足够的权限在您打算将内容部署到的命名空间中创建资源——通常是edit
ClusterRole,具有命名空间范围的 RoleBinding:
kubectl create sa jenkins -n my-namespace
kubectl create rolebinding jenkins-edit \
--clusterrole=edit \
--serviceaccount=my-namespace:jenkins-edit \
--namespace=my-namespace
一旦 Jenkins 完成构建您的映像,您将其部署到 Kubernetes,很可能创建一个部署、一个服务和一个入口,替换资源名称、命名空间和入口请求的 FQDN 以满足您的要求。
准备您的部署 yaml,例如:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-BRANCH
spec:
selector:
matchLabels:
name: app-BRANCH
template:
spec:
containers:
- image: my-registry/path/to/image:BRANCH
[...]
---
apiVersion: v1
kind: Service
metadata:
name: app-BRANCH
spec:
selector:
name: app-BRANCH
ports:
[...]
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-BRANCH
spec:
rules:
- host: app-BRANCH.my-base-domain.com
http:
paths:
- backend:
serviceName: app-BRANCH
然后,让您的 Jenkins 代理应用该配置,正确替换值:
sed "s|BRANCH|$BRANCH|" deploy.yaml | kubectl apply -n my-namespace -f-
kubectl wait -n my-namespace deploy/app-$BRANCH --for=condition=Available
kubectl logs -n my-namespace deploy/app-$BRANCH --tail=200
推荐阅读
- node.js - 如何在 React Native 中显示使用 nodejs 存储的图像?
- python - Python SMTP 库无法处理 IPv6
- python - 使用 pathlib 查找单个 csv 文件的最简单方法
- java - 使用 apache.commons.compress.archivers.zip 读取远程 zip 文件
- python - 如何解决python的全局变量问题
- python - 在 Python 中只允许输入消息中的某些字符
- python - python - 该进程无法访问该文件,因为它正在被另一个人使用
- c - C 运算符中的求值顺序
- php - 更新或创建行数据库。拉拉维尔
- sql - Excel:分别对多列进行排序