- 发布日期:2023-10-30 05:50 点击次数:120
本文转载自微信公众号「问其」,作家陈少文 。转载本文请商酌问其公众号。
1. 为什么需要物理构建机在著述《若何接入良友 macOS 物理机进行 Jenkins 活水线构建》中,我描摹了在 Jenkins 中添加物理构建机的规范。这并不是我拍脑袋想的需求,而是其时果然有 ToB 的交易客户在扣问决议。
关于多端开辟商来说,构建 Android、IOS、macOS、Arm 、Windows、X86 应用是常见的需求。
好的方面是 GitHub Actions 提供了 macOS 构建环境、AWS 提供了 macOS 杜撰机,而华为提供了 ARM 主机。在云原生配景下,更多使用的是 Kubernetes 启动时,在 Kubernetes 不相沿的处理器架构和操作系统眼前,捏续集成 (CI) 显得很无力。捏续集成需要相沿物理构建机。
本文但愿磋议的问题是在 Kubernetes 下,若何接入物理机进行 CI 的构建。本文以 Tekton 为例,其他引擎在处理逻辑上访佛。
皇冠体育
2. Tekton 若何与物理机交互Kuberntes 对物理机或然杜撰机的治理,本色上是一个典型的 Operator 场景。咱们不错界说一个 CRD 用来描摹关联字段,通过写 Controller 处理 Pod 与构建机之间的逻辑。
AG现金网也不错写 Tekton 的 Task 封装,本文将使用这种神志。由此也给我带来另一个疑问,Tekton 能否代替部分 Operator 的场景,在后续的著述中我会给出念念考。
这里仅作念原型考据,不会太关怀产物化的细节。
太平洋百家乐在 Tekton 中,每个活水线由好多个 Task 组成,Task 不错并行。一个 Task 包含好多个串行的 step 要领,对应着一个 Pod 包含好多个容器。
皇冠体育app这里的重要是要将 Pod 与构建机关联起来。我选拔的是使用 rsync 同步 Pod 与构建机之间的文献,在 Pod 中使用 sshpass 扩充物理机的构建敕令。
主要分为如下要领 (以下敕令王人是在容器中扩充):
克隆代码 扩充 rsync 将代码同步到构建机 扩充 sshpass 在构建机上扩充构建敕令 扩充 rsync 将构建机中的构建产物同步到容器 存档构建产物(示例中, 这一步会被不详,仅考据能拿到构建产物)不错看到悉数过程其实和 Tekton 莫得平直联系,关于恣意容器与构建机直连的环境王人是可行的。底下以 Tekton 为例进行演示。
3. 资源准备清单 一个 Kubernetes 集群。用来启动 Tekton,最新的 Tekton 0.23 条件 Kubernetes 不低于 1.17 一台物理机或杜撰机。用于构建应用 3.1 稽察 Kubernetes 版块kubectl version Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-21T01:11:42Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}3.2 物理机准备 操作系统是 CentOS 7.6
uname -a Linux test 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux预装 Golang 的编译环境
原筹算是选拔一个 macOS 的构建示例,可是无法提供纵贯的网罗环境,因此换成 Golang 的构建示例。
go version go version go1.13 linux/amd644. 准备 Tekton 以及 Pipeline 资源 4.1 部署 Tekton Pipeline 创建负载
Tekton 默许使用的是 gcr.io 镜像,如果是国内环境不错替换为 gcr.azk8s.cn 镜像。
kubectl apply -f https://github.com/tektoncd/pipeline/releases/download/v0.23.0/release.notags.yaml稽察资源 4.2 资源筹算
kubectl -n tekton-pipelines get all NAME READY STATUS RESTARTS AGE pod/tekton-pipelines-controller-86c487c965-p6s5t 1/1 Running 0 51s pod/tekton-pipelines-webhook-7b775d9cd8-fzdrq 1/1 Running 0 51s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/tekton-pipelines-controller ClusterIP 10.233.61.46 <none> 9090/TCP,8080/TCP 51s service/tekton-pipelines-webhook ClusterIP 10.233.46.233 <none> 9090/TCP,8008/TCP,443/TCP,皇冠下注8080/TCP 51s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tekton-pipelines-controller 1/1 1 1 51s deployment.apps/tekton-pipelines-webhook 1/1 1 1 51s NAME DESIRED CURRENT READY AGE replicaset.apps/tekton-pipelines-controller-86c487c965 1 1 1 51s replicaset.apps/tekton-pipelines-webhook-7b775d9cd8 1 1 1 51s NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook Deployment/tekton-pipelines-webhook <unknown>/100% 1 5 1 51s
需要的活水线资源清单:
一个 task, 用于克隆代码 一个 pv, 用于分享 task 之间的文献 一个自界说的 task, 用于将代码同步到构建机,构建完成之后,再同步记忆 一个 pipeline, 用于描摹活水线,编排 task 一个 pipelinerun, 用于实例化 pipeline, 提供构建时必要的参数 4.2 编写同步文献、扩充剧本的 Task如上图,这里的 Task 便是用于买通 container 和 vm 平直的文献和进度,杀青访佛交叉编译的成果。
策略--- apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: remote-shell labels: app.kubernetes.io/version: "0.1" annotations: tekton.dev/pipelines.minVersion: "0.12.1" tekton.dev/tags: git tekton.dev/displayName: "remote shell" spec: description: >- This task can be used to run shell in remote machine workspaces: - name: source params: - name: remote-ip type: string - name: remote-port type: string - name: remote-username type: string - name: remote-password type: string - name: remote-workspace type: string - name: remote-script type: string steps: - name: remote-shell image: shaowenchen/rsync-sshpass:v1 workingDir: $(workspaces.source.path) script: | sshpass -p "$(params.remote-password)" ssh -o StrictHostKeyChecking=no "$(params.remote-username)"@"$(params.remote-ip)" -p "$(params.remote-port)" "mkdir -p $(params.remote-workspace)" rsync -ratlz --progress --rsh="sshpass -p $(params.remote-password) ssh -o StrictHostKeyChecking=no -l $(params.remote-username)" ./ "$(params.remote-ip)":"$(params.remote-workspace)" sshpass -p "$(params.remote-password)" ssh -o StrictHostKeyChecking=no "$(params.remote-username)"@"$(params.remote-ip)" -p "$(params.remote-port)" "$(params.remote-script)" rsync -ratlz --progress --rsh="sshpass -p $(params.remote-password) ssh -o StrictHostKeyChecking=no -l $(params.remote-username)" "$(params.remote-ip)":"$(params.remote-workspace)"/ .
在写法上,不错参考 Tekton 提供的示例。主要分为几步:
界说参数 编写 step 经过 写 script这便是一个串剧本的过程,只不外借助容器镜像,省去了安设各式器具的要领。
4.3 准备 Tekton 的 pipeline 描摹 克隆代码 TaskTekton 还是认真上线 Hub 就业,用于分享 Task,这里平直使用 https://hub.tekton.dev/tekton/task/git-clone
网站无法访问有人爆料称,某体育明星因为沉迷于博彩而巨亏一笔,最终导致家庭破裂,引起了不小的轰动。kubectl apply -f https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.3/git-clone.yaml构建一个器具箱镜像 shaowenchen/rsync-sshpass:v1
Dockerfile 为:
ARG alpine_ver=3.13 FROM alpine:${alpine_ver}.5 RUN apk update \ && apk upgrade \ && apk add --no-cache \ rsync \ openssh-client \ openssh \ sshpass \ ca-certificates \ && update-ca-certificates \ && rm -rf /var/cache/apk/*pipeline
apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: remote-build-pipeline spec: params: - name: repo-url type: string - name: branch-name type: string - name: remote-ip type: string - name: remote-port type: string - name: remote-username type: string - name: remote-password type: string - name: remote-workspace type: string - name: remote-script type: string workspaces: - name: shared-data tasks: - name: fetch-repo taskRef: name: git-clone workspaces: - name: output workspace: shared-data params: - name: url value: $(params.repo-url) - name: revision value: $(params.branch-name) - name: remote-build taskRef: name: remote-shell runAfter: ["fetch-repo"] workspaces: - name: source workspace: shared-data params: - name: remote-ip value: $(params.remote-ip) - name: remote-port value: $(params.remote-port) - name: remote-username value: $(params.remote-username) - name: remote-password value: $(params.remote-password) - name: remote-workspace value: $(params.remote-workspace) - name: remote-script value: $(params.remote-script)
pipeline 包含两个 task,一个 task 克隆代码,一个 task 扩充良友构建。
pipelinerun--- apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: remote-build-pipelinerun-1 spec: pipelineRef: name: remote-build-pipeline workspaces: - name: shared-data volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi params: - name: repo-url value: https://github.com/shaowenchen/terraform-provider-qingcloud.git - name: branch-name value: master - name: subdirectory value: terraform-provider-qingcloud-001 - name: remote-ip value: 0.0.0.0 - name: remote-port value: "22" - name: remote-username value: root - name: remote-password value: YourPassword - name: remote-workspace value: ~/workspaces/terraform-provider-qingcloud-001 - name: remote-script value: | cd ~/workspaces/terraform-provider-qingcloud-001 make
这里将克隆代码到 pv 的 terraform-provider-qingcloud-001 目次,同步到构建机的 ~/workspaces/terraform-provider-qingcloud-001 目次。也便是说,这两个目次最终的文献会保捏一致,而构建的二进制是在构建机上生成的。
皇冠客服飞机:@seo3687
稽察 Tekton 资源界说以上资源沿途 apply 之后,就不错稽察关联的资源和活水线景况了。
皇冠完整比分网kubectl get task NAME AGE git-clone 18m remote-shell 5m47s
kubectl get pipelinerun NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME remote-build-pipelinerun-1 True Succeeded 6m15s 5m42s
扩充顺利,接着赓续考据功能是否合适预期。
5. 功能考据 稽察关联负载kubectl get pod NAME READY STATUS RESTARTS AGE remote-build-pipelinerun-1-fetch-repo-56ws8-pod-mgx77 0/1 Completed 0 8m49s remote-build-pipelinerun-1-remote-build-wxtms-pod-bcn6r 0/1 Completed 0 8m35s在物理构建机上,稽察构建目次
pwd /root/workspaces/terraform-provider-qingcloud-001 ls CHANGELOG.md glide.yaml go.sum main.go qingcloud scripts terraform-provider-qingcloud website dev.md go.mod LICENSE Makefile README.md terraform vendor稽察 Kubernetes PV 的构建目次
kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 10Gi RWO Delete Bound default/pvc-e7ceb0582a openebs-hostpath 2m12s查找 PV 存储旅途
kubectl describe pv pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 |grep Path Path: /var/openebs/local/pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8稽察 PV 目次文献结构
ls /var/openebs/local/pvc-860016bb-14b6-414a-9c5a-1a71d7290ba8 CHANGELOG.md glide.yaml go.sum main.go qingcloud scripts terraform-provider-qingcloud website dev.md go.mod LICENSE Makefile README.md terraform vendor
在两个目次中,王人存在构建产物 terraform-provider-qingcloud,合适预期,也线路咱们达成了方针。
历史上第2023153期排列三已开出18期奖号了,历年同期奖号分别为:866、950、181、666、698、006、629、383、270、308、088、622、885、083、060、066、368、155,详细统计见下表:
美高梅金卡匹配 6. 总结传统的 CICD 引擎时时是一个 C/S 架构。它需要一个 S 端,用于默契经过,对活水线进行调遣; 需要好多个 C 端,用于扩充高负载的构建任务。这种神志的延长性并不是线性的,在云原生下、业务量大时很容易碰到瓶颈。因此,咱们需要愈加云原生的构建引擎。在新的引擎下咱们需要处分一些老的问题,相沿物理机构建便是其中之一。
本文主要以 Tekton 为例,提供了一种哄骗 rsync 和 sshpass 接入物理机进行构建的念念路。其中的重要点如下:
使用 rsync\sshpass 的方针主若是将容器与物理机绑定,文献双向同步,进度空间互通。 不限于 Tekton, 恣意的引擎王人不错使用这种神志。 这里仅是当作决议考据,如果落地到产物,还需要琢磨缓存、秘钥安全、数据安全、佃农驱逐等问题。
- 平博炸金花博彩平台是否支持电脑客户端_武汉城管队员两捐骨髓赈济重庆小伙2023-12-04
- 皇冠现金网博彩平台注册送奖金_中央阵势台6月12日06时陆续发布强对流天气黄色预警2023-10-18
- AG真人百家乐博彩平台免费下注_奥斯卡:阿扎尔是我搭档过的最好之一,很享受在场上看他创造遗址2023-10-13
- 澳门六合彩现金网博彩平台投注限制_文牧野的“药神”故事:针织褂讪地作念事,应有的陈说一个皆不会少2023-10-04
- 欧博现金网博彩平台投诉渠道_季后赛单赛季拿500+150+150有多难? 历史仅3东谈主作念到过, 老詹一东谈主独揽6次2023-08-16
- 彩票真人百家乐博彩平台游戏促销活动_《追龙2》中的兔兔还是出谈13年,也曾还参演过《古剑奇谭》,早期照曝出2023-08-11