你的位置:皇冠分红 > 皇冠网址 > AG现金网网站无法访问_Tekton 若何接入物理机进行构建
AG现金网网站无法访问_Tekton 若何接入物理机进行构建
发布日期:2023-10-30 05:50    点击次数:120

AG现金网网站无法访问_Tekton 若何接入物理机进行构建

AG现金网网站无法访问_ 开云电子游戏[[396376]]

本文转载自微信公众号「问其」,作家陈少文 。转载本文请商酌问其公众号。

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/amd64 
4. 准备 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 描摹 克隆代码 Task

Tekton 还是认真上线 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, 恣意的引擎王人不错使用这种神志。 这里仅是当作决议考据,如果落地到产物,还需要琢磨缓存、秘钥安全、数据安全、佃农驱逐等问题。