首页 >> 试驾 >> 基于Gitee 的云原生不间断集成工作流

基于Gitee 的云原生不间断集成工作流

2025-08-04 12:16:29

environment name: 'giteePullRequestState', value: 'merged'

}

}

}

failFast true

parallel {

stage( 'add start comment to GiteePR') {

steps {

addGiteeMRComment comment: "+ CI triggered, building... [BUILD]("+ env.RUN_DISPLAY_URL + ")"

}

}

stage( 'build frontend assets') {

steps {

sh '''

set -u

if [[ $(echo $giteePullRequestDeion|grep without_compare|wc -l) -gt 0 ]]; then

echo "skip compare"

rm -rf $JENKINS_HOME/nfs/$giteePullRequestIid/public

mkdir -p $JENKINS_HOME/nfs/$giteePullRequestIid/public

cp -r $JENKINS_HOME/nfs/global/public/assets $JENKINS_HOME/nfs/$giteePullRequestIid/public/

cp -r $JENKINS_HOME/nfs/global/public/webpacks $JENKINS_HOME/nfs/$giteePullRequestIid/public/

else

rm -rf $JENKINS_HOME/atompi_workspace/assets-builder/atompi

rm -rf $JENKINS_HOME/atompi_workspace/assets-builder/out

cp -r $WORKSPACE $JENKINS_HOME/atompi_workspace/assets-builder/atompi

cd $JENKINS_HOME/atompi_workspace/assets-builder && DOCKER_BUILDKIT=1 $JENKINS_HOME/bin/docker -H tcp://docker:2375 build -o out .

rm -rf $JENKINS_HOME/nfs/$giteePullRequestIid/public

mkdir -p $JENKINS_HOME/nfs/$giteePullRequestIid/public

cp -r $JENKINS_HOME/atompi_workspace/assets-builder/out/* $JENKINS_HOME/nfs/$giteePullRequestIid/public/

fi

'''

}

}

stage( 'build frontend images') {

steps {

sh '''

set -u

rm -rf $JENKINS_HOME/atompi_workspace/frontend/atompi

cp -r $WORKSPACE $JENKINS_HOME/atompi_workspace/frontend/atompi

cd $JENKINS_HOME/atompi_workspace/frontend && $JENKINS_HOME/bin/docker -H tcp://docker:2375 build -t hub.atompi.cc/atompi_ci/frontend:v3.0.0-$giteePullRequestIid .

$JENKINS_HOME/bin/docker -H tcp://docker:2375 push hub.atompi.cc/atompi_ci/frontend:v3.0.0-$giteePullRequestIid

$JENKINS_HOME/bin/docker -H tcp://docker:2375 rmi hub.atompi.cc/atompi_ci/frontend:v3.0.0-$giteePullRequestIid

'''

}

}

stage( 'build backend image') {

steps {

sh '''

set -u

rm -rf $JENKINS_HOME/atompi_workspace/backend/atompi

cp -r $WORKSPACE $JENKINS_HOME/atompi_workspace/backend/atompi

cd $JENKINS_HOME/atompi_workspace/backend && $JENKINS_HOME/bin/docker -H tcp://docker:2375 build -t hub.atompi.cc/atompi_ci/backend:v3.0.0-$giteePullRequestIid .

$JENKINS_HOME/bin/docker -H tcp://docker:2375 push hub.atompi.cc/atompi_ci/backend:v3.0.0-$giteePullRequestIid

$JENKINS_HOME/bin/docker -H tcp://docker:2375 rmi hub.atompi.cc/atompi_ci/backend:v3.0.0-$giteePullRequestIid

'''

}

}

}

}

stage( 'deploy') {

when {

not{

anyOf {

environment name: 'giteePullRequestState', value: 'closed'

environment name: 'giteePullRequestState', value: 'merged'

}

}

}

steps {

sh '''

set -u

cd $JENKINS_HOME/atompi_workspace/CI-atompi-helm && sed "s/CPRID/${giteePullRequestIid}/g" values.yaml.template> values.yaml

cp $WORKSPACE/config/atompi.yml.cm ./charts/backend/templates/configmap-atompi-yml.yaml

cp $WORKSPACE/config/environments/production.rb.cm ./charts/backend/templates/configmap-production-rb.yaml

$JENKINS_HOME/bin/helm uninstall -n ci-atompi-$giteePullRequestIid ci-atompi-$giteePullRequestIid || echo "release does not exists"

sleep 10 && $JENKINS_HOME/bin/kubectl delete ns ci-atompi-$giteePullRequestIid || echo "ns ci-atompi-$giteePullRequestIid does not exists"

sleep 5 && $JENKINS_HOME/bin/kubectl create ns ci-atompi-$giteePullRequestIid || echo "namespace already exists"

cd $JENKINS_HOME/atompi_workspace/CI-atompi-helm && $JENKINS_HOME/bin/helm upgrade -i -n ci-atompi-$giteePullRequestIid ci-atompi-$giteePullRequestIid ./

'''

addGiteeMRComment comment: '''

CI Opened

重新部署已收尾,正在启动公共服务。[点我试验之中](''' + env.giteePullRequestIid + '''.atompi.cc)

采访该 url 之前 并不需要本地 dns 设为为192.168.1.1

'''

}

}

stage( 'delete') {

when {

anyOf {

environment name: 'giteePullRequestState', value: 'closed'

environment name: 'giteePullRequestState', value: 'merged'

}

}

steps {

sh '''

set -u

echo $giteePullRequestState

$JENKINS_HOME/bin/helm uninstall -n ci-atompi-$giteePullRequestIid ci-atompi-$giteePullRequestIid

sleep 30

$JENKINS_HOME/bin/kubectl delete ns ci-atompi-$giteePullRequestIid

rm -rf $JENKINS_HOME/nfs/$giteePullRequestIid

curl -X DELETE -H 'Accept: text/plain' "_ci/backend/tags/v3.0.0-$giteePullRequestIid"

curl -X DELETE -H 'Accept: text/plain' "_ci/frontend/tags/v3.0.0-$giteePullRequestIid"

'''

addGiteeMRComment comment: "+ CI Closed"

}

}

}

post {

failure {

addGiteeMRComment comment: "+ CI build failure! [BUILD]("+ env.RUN_DISPLAY_URL + ")"

}

aborted {

addGiteeMRComment comment: "+ CI build aborted! [BUILD]("+ env.RUN_DISPLAY_URL + ")"

}

}

}

pipeline {...} :在表示遗憾双管的 Pipeline 字词之中, pipeline 块表述了整个燃气之中收尾的所有文书工作。 agent any :使用明确指出在任何举例来说 agent 上拒绝执行此燃气或其任何之之前。agent 即 Jenkins 协同之中的重构数据流,我们可以给这些数据流指明标签,让某些有特定所需的重构处理过程过程在这些带有特定标签的数据流上列车运行。 stages {...} : 相关联燃气的重构两步集 stage('build images and assets') {...} :表述其之中某个重构处理过程过程(括弧之中的具体内容为该 stage 的开头,使用展示在 Jenkins web 出版界面及记事之中),其之中 when 块表述了拒绝执行本 stage 的说明必须,如果为真则拒绝执行,否则跳过; steps 块表述了本 stage 似乎拒绝执行的操作方法两步,如 sh 对此在 agent 上拒绝执行 shell JavaScript、 addGiteeMRComment 对此通过 Gitee-Jenkins-Plugin JavaScript初始化码云接口,向近期重构的 PR 发送华盛顿邮报讯息。 failFast true 及 parallel {...} :我们可以看着某些 stage 块之中有 parallel {...} 块,同时 parallel {...} 块之中又相关联多个 stage 块,这样的字词的意思是在 parallel {...} 块之中的 stage 为并行拒绝执行的,不在 parallel {...} 之中的 stage 是按照从上到下的顺序串行拒绝执行,只有在上一个 stage 成功拒绝执行完后才不会带入下一个 stage ,而 parallel {...} 块之中表述的 stage 不会并行拒绝执行, parallel {...} 块之前一行的 failFast true 对此当 parallel {...} 块之中的某个 stage 经常出现出错时,整个 parallel {...} 块都放弃,并就此结束 parallel {...} 块之中的所有 stage 不管这些 stage 是否是拒绝执行收尾,同时标识上层 stage 为出错放弃。 post {...} :表述所有 stages 拒绝执行收尾后的在此之后操作方法,不一定并不需要 post 块,当我们并不需要根据 stages 就此结束状态来说明是否是拒绝执行在此之后操作方法时,我们可以表述一个 post 块,如本事例之中表述了当 stages 结果为 failure (败北)或 aborted (拒绝,多半时;也的,比如 web 出版界面上手动暂停本次重构)时将重构讯息发送到码云的 PR 华盛顿邮报之中。

本事例的 pipeline 字词到这里就简介刚才,更为详细的字词准则可查看对外网络公共服务数据库。

整整我们对整个重构时序再次开展一遍分门别类,详细的明确指出一下本事例之中的 pipeline 干了什么,同时也是对本文简介的文书工作东流做到一个全面的简介。

当 Jenkins 发出码云发送的 Webhook 恳请并匹配到系统对不会准则时,我们配有的 Job 带入 build 状态。 build 开始之后, Jenkins 通过 git JavaScript从码云拉取指明编码到 workspace 同时读取编码堆放之中的 Jenkinsfile ,透过到 Jenkinsfile 后, Jenkins 开始按照 Jenkinsfile 之中表示遗憾的时序开始拒绝执行重构 带入 stages 之中的第一个 stage : build images and assets , 该 stage 拒绝执行如下操作方法: 说明近期 PR 的状态,不为 closed 或 merged 则拒绝执行后面的操作方法(对于并未关闭或改组的 PR 我们不并不需要再次拒绝执行重构); 如果说明结果为真,则拒绝执行赞仍然的并行拒绝执行的 stage ; 并行拒绝执行:向码云近期 PR 页面发送重构开始的华盛顿邮报讯息,并附带本次重构的元数据,不便 PR 负责人实时查看重构处理过程过程; 并行拒绝执行:从 PR 说明了( Gitee-Jenkins-Plugin JavaScript可以通过生态配置文件 $giteePullRequestDeion 透过 PR 的说明了注释 ) 说明是否是并不需要重写侧边线性人力,再次拒绝执行后面的重写侧边线性人力并移动设备到侧边线性人力共享的 nfs server 、重构侧边 docker 也就是说并移动设备到 harbor 、重构后末端 docker 也就是说并移动设备到 harbor ,这些重构都是通过 sh 表述一个 shell JavaScript,在 agent 上拒绝执行这个JavaScript收尾重构; 并行操作方法拒绝执行收尾后开始拒绝执行重新部署的 stage : 通过 agent 上的 Helm 客户末端装上我们可先撰写好的 helm chart ,这里我们可以常用 shell JavaScript修改 values.yaml.template 等配有模板邮件,同时,对于不通的 PR 重新部署在同一个 Kubernetes 协同之中,我们以 PRID 命名 namespace ,辨别每个 PR 为单独一个 namespace ,从而构建对于不同的 PR 都有单一的配有邮件和列车运行生态环境。 重新部署收尾后,我们将 PRID 和我们的 Ingress 域名开展填充,并以 markdown 的文档将近期重构结果和 Kubernetes 协同之中公共服务的走道元数据发送到近期 PR 的华盛顿邮报之中; 对于并未改组或者关闭的 PR ,在码云上操作方法 PR 状态修改为“关闭”或者“改组”时,再次次系统对不会 Jenkins 东流水线,同时带入 delete 的 stage ,该 stage 的文书工作就是将已重新部署的公共服务从 Kubernetes 协同之中截图并将早已次常用的 docker 也就是说和线性人力从 harbor 和 nfs server 之中截图,收尾整个 CI 系统对的修整文书工作,让系统对可以小规模列车运行而不并不需要认为默许。

自始我们在 Jenkinsfile之中表述的东流水线就走刚才。

3. 发行收尾后其他用户亦可通过 Kubernetes 暴露的 Ingress 恳请走道采访我们发行的公共服务。

发行收尾后,我们通过在 Kubernetes 设为协同内公共服务的采访手段来让其他用户必需采访到重新部署在 Kubernetes 协同之中的公共服务。我们可以配有 LB 、末端口发帖或 DNS 配有等,以采访一组集之中的运用程序。

这里我们通过在 Kubernetes 协同之中装上 Ngins Ingress controller同时配有 Ingress准则来让其他用户采访协同内公共服务。

Ingress是一个 API 对象,它表述了意味着外部采访一组集之中公共服务的准则。更为多关于 Ingress 的明确指出方知对外数据库

Ingress 的装上及配有方知数据库:Kubernetes()

核心接口重新部署

Harbor( %E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%20Harbor%20v2/ ) Kubernetes() Helm :Helm 从 v3 完整版开始早已次并不需要装上 tiller ,对于醉心常用 Helm 来管理机构 Kubernetes 运用装上包的其他用户来说,无疑是史诗级新增。从 v3 完整版开始,我们只并不需要订阅 Helm 整数邮件亦可直接与 Kubernetes 协同交互,之前提是 ~/.kube/ 数据库下普遍存在有越权的 config 邮件,这对并未装上过 Kubernetes 协同的人来说并不是个关键问题。Helm 整数邮件订阅接收者( )。 Jenkins with Gitee-Jenkins-Plugin( %20Compose%20%E5%AE%89%E8%A3%85%20Jenkins/ ) 扩展

本文事例之中的 Jenkinsfile所表述的东流水线一般来说于开发新生态环境多 PR 同时重新部署试验之中的常用布景。我们只并不需要对其之中部分 stage稍事修改,正因如此可以运用与装配生态环境的重构与重新部署。比如,对于 release 生态环境我们只并不需要重构和发行 release 谱系亦可,因此不普遍存在 PR 的概念,也不并不需要拒绝执行 PR 华盛顿邮报的操作方法。我们可以将 PR 状态的说明、 addGiteeMRComment去除;将 agent 只向装配生态环境的重构数据流;将 docker 也就是说移动设备至装配生态环境的 harbor 堆放;常用装配生态环境的 helm chart 将 docker 也就是说发行到装配生态环境的 Kubernetes 协同。对于不是重新部署到 Kubernetes 协同的运用,我们可以将重构 docker 也就是说的操作方法换成为重构工业产品(如:整数邮件、 jar/war 包等)的操作方法,同时将 docker push操作方法换成为将工业产品移动设备到工业产品库(如:nexus 等)的操作方法,这时,发行将早已次常用 helm 物件,而是常用我们自表述的发行时序物件(如:shell JavaScript、 ansible-playbook 等)。总之,本文的事例是对基于码云的云原生小规模定制文书工作东流的一个构建参看,我们可以在这个文书工作东流的新的造就更为多的最佳有系统。

当然,本文构建的事例也普遍存在的些许不足,比如对于多 PR 的重新部署,好像普遍存在这样的布景:有多个 PR 同时更为新了编码,这时候的重构字段是串行的,在有限的数据流人力下,我们的重构文书工作不会经常出现饱和并且并不需要搭车的现像,这样对于一个并不需要重写侧边线性人力的 PR 来说并不需要马上的时间不会颇为漫长,从而引致字段之中的其他重构一同马上,下降了重构效率。在此,本文给出一种解决设计方案,同时也是作者再次在常用的一种设计方案:将重写线性人力的文书工作下抽出每一个重新部署之中。Jenkins 重构文书工作是瞬时的,而重新部署在 Kubernetes 协同之中的运用是长时间列车运行的,由此我们多半不会为 Kubernetes 协同分配更为多的数据流而尽量下降 Jenkins 协同的数据流,当然我们可以将 Jenkins 重新部署在 Kubernetes 协同之中,共享 Kubernetes 协同人力,但我们为了管理机构不便,多半将这两个角色分离开来。因此,对于开发新生态环境的多 PR 重新部署试验之中的常用布景,我们可以将文书工作效率小的、确立的文书工作交予 Jenkins 拒绝执行,而并不需要大量人力的重写文书工作下抽出每一个重新部署之中,即 Kubernetes 协同之中,常用 Kubernetes 协同人力来并向的重写多个 PR 的线性人力,这样每一个 Jenkins 需只并不需要很短的时间收尾配有和重新部署的文书工作亦可就此结束本次重构,几天后开始下一个重构,这样搭车用时就大幅度削减了。

为了构建这种设计方案,我们并不需要提之前重构最新的为基础编码堆放谱系(如某一批 PR 是基于某个谱系的最新建议书开始的,我们可以把 release 谱系或者 master 谱系作为为基础谱系,这些谱系多半是最近发行到装配生态环境的谱系)的 docker 也就是说作为为基础也就是说,同时重写一次线性人力作为为基础,在此之后的 PR 重写线性人力时可以基于这个为基础开展也就是说重构,这样可以进一步下降重写时间。

我们在每天发行装配生态环境时间系统对不会 release 重构的需,拒绝执行一次为基础生态环境重构,并移动设备到开发新生态环境的 harbor 及 nfs server ,在此新的在此之后的 PR 在发行时早已次单独重构 docker 也就是说,在 helm chart 之中我们把 docker image tag 修改为固定的 release 完整版。

在 PR 重新部署收尾后,我们增赞了一个 modify的 stage,这个 stage的文书工作就是通过 kubectl物件在指明的 PR 重新部署之中拒绝执行特点的重写JavaScript,在重新部署收尾( helm chart 发行收尾并切所有 pod 外成功启动 )时在指明的 pod 之中拒绝执行重写文书工作,这样就构建了常用 Kubernetes 协同之中的人力收尾文书工作效率较大的重写文书工作。

构建的 pipeline 如下:

stage('modify') {

when {

not {

anyOf {

environment name: 'giteePullRequestState', value: 'closed'

environment name: 'giteePullRequestState', value: 'merged'

}

}

}

steps {

sh '''#!/bin/bash

set-u

if[[ $(echo $giteePullRequestDeion|grep without_compile|wc -l) -gt 0]]; then

min= 1

max= 10

while[ $ min-le $ max]

do

if[[ "Running"== $($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompibe|awk '{ print$ 3}') ]]; then

BACKEND_POD_NAME=$($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompibe|awk '{ print$ 1}')

MIRACLE_POD_NAME=$($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompife|awk '{ print$ 1}')

$ JENKINS_HOME/bin/kubectl exec -n ci-atompi-$giteePullRequestIid $ BACKEND_POD_NAMEbash /nohup_pull.sh $giteePullRequestIid

$ JENKINS_HOME/bin/kubectl exec -n ci-atompi-$giteePullRequestIid $ MIRACLE_POD_NAMEbash /nohup_pull.sh $giteePullRequestIid

break

else

min=在在expr $ min+ 1在在

sleep 60

fi

done

else

min= 1

max= 10

while[ $ min-le $ max]

do

if[[ "Running"== $($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompibe|awk '{ print$ 3}') ]]; then

BACKEND_POD_NAME=$($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompibe|awk '{ print$ 1}')

MIRACLE_POD_NAME=$($ JENKINS_HOME/bin/kubectl getpo -n ci-atompi-$giteePullRequestIid | grep ciatompife|awk '{ print$ 1}')

$ JENKINS_HOME/bin/kubectl exec -n ci-atompi-$giteePullRequestIid $ BACKEND_POD_NAMEbash /nohup_compile.sh $giteePullRequestIid

$ JENKINS_HOME/bin/kubectl exec -n ci-atompi-$giteePullRequestIid $ MIRACLE_POD_NAMEbash /nohup_pull.sh $giteePullRequestIid

break

else

min=在在expr $ min+ 1在在

sleep 60

fi

done

fi

'''

addGiteeMRComment comment: '''

CIOpened

重新部署已收尾,正在启动公共服务。[点我试验之中](http: //''' + env.giteePullRequestIid + '''.atompi.cc)

采访该 url 之前 并不需要本地 dns 设为为 192.168. 1.1

'''

}

当然,对于装配生态环境而言,我们是明目张胆重写文书工作占用装配生态环境人力的,所幸的是,在装配生态环境之中我们不普遍存在多 PR 同时重新部署的布景,因此就不并不需要将重写文书工作下放,我们正常的拒绝执行之前面简介的发行时序亦可。

作者:atompi

原文:

的产品派系统对推出64位完整版 Flutter 2.10发行,稳定支持Windows 计算机史上最诡异桥段

真的不错,请点个在看呀

重庆治白癜风哪家医院好
上海肿瘤医院排行榜
济宁治疗肿瘤最好的医院
安全用药
民生关注
老是咳嗽怎么办才能止咳
厌食
止咳糖浆哪个比较好一点

上一篇: “婴儿因无多肽证明被拒诊身亡”反转,小作文再次翻车

下一篇: 广州"五一"假期宴请游客688.36万人次 实现文旅收入54.31亿元

相关阅读
“三桶油”去年日赚6.4亿元 高油价下集体追过上游业务

本报采访 李春莲 向炎涛3月底31日凌晨,当中石油发布2021年调查研究报告,研究报告期内构建营收2.61万亿元,营业收入激增35.2%,后起上曾新高;构建归属于子公司股份的销售额921.7亿

2025-08-23 00:16:31
亿能电力排队北交所:变压器等产品用于京广铁路等多条高速铁路客运该线

挖贝网 2月28日传言,新三板创新层美国公司亿能电力(837046)排队母美国公司北交所,现今正处于二轮问询阶段,保荐机构为东北证券000686。挖贝社会科学院资料显示,亿能电

2025-08-23 00:16:31
这款炸麻叶带给你许多童年的记忆,加入菱角后确实更香

这款炸银花带给你许多长大的清醒,自组芝麻后毕竟更香 每到大年初一小孩总会炸银花,吓坏小孩炸银花闻着香气,这就是我清醒中都的年煎。现在的零食再多我对年的清醒总是停留在这个银花上,毕

2025-08-23 00:16:31
新城区与会大气污染防治工作安排部署会

据悉,新城区召开大气污染防治兼职须要协同作战会。会议结合新城区近期空气质量及早春大气污染防治兼职开展情况,须要协同作战下一步兼职。会议合理化要积极响应扬尘污染管治兼职,全面落实好早春扬尘维护各项

2025-08-23 00:16:31
涉嫌违规行为减持公司股票 赛科希德原股东被立案调查

每经新闻工作者 郭荣村 实习新闻工作者 刘之中凝 每经编辑 魏官绿3月末30日,赛科德尔(688338,SH;昨日交易日39.60元)谈及核定称,一些公司原入股张朝晖送出之中国证券监督管理委员

2025-08-23 00:16:31