jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第4篇,介绍如何加入jx构建和部署。

builder镜像下载慢

先在一台机器上下载好,然后放到本地仓库,到jenkins的setting里,修改镜像地址

nodejs安装慢

    1. 配置使用私服
    1. 构建cnpm镜像

1 FROM jenkinsxio/builder-nodejs:0.1.215
2 MAINTAINER jadepeng <jqpeng@iflytek.com>
3
4 RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
5 RUN cnpm install -g antd axios babel-plugin-import mobx mobx-react mobx-react-devtools nprogress react react-app-rewire-less react-app-rewired react-dom react-router-dom react-scrip ts history path
6

构建后,在jenkins里设置一个k8s pod template

在jenkinsfile里就可以使用cnpm加速了

pipeline {
agent {
// 使用cnpm加速
label "jenkins-cnpm"
}
... steps {
container('nodejs') {
sh "cnpm install && npm run build"
}
}

加速maven:

maven配置文件

maven的配置文件通过secret jenkins-maven-settings配置,maven pod创建时,会将jenkins-maven-settings挂载到/root/.m2/,要自定义配置文件,执行:

  # 删除老配置
kubectl delete secret jenkins-maven-settings
# 修改配置文件,然后创建新的jenkins-maven-settings
kubectl create secret generic jenkins-maven-settings --from-file=./jenkinsx -n incubation

每次build都会从maven仓库下载jar包,为了避免重复下载,可以挂载一个pvc持久化maven本地仓库。

挂载共享cephfs-mavenrepos-pvc 到 /root/.mvnrepository

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: cephfs-mavenrepos-pv
labels:
name: cephfs-mavenrepos-pv
spec:
capacity:
storage: 500Gi
accessModes:
- ReadWriteMany
cephfs:
monitors:
- 192.168.86.156:6789
path: /mavenrepos
user: admin
secretRef:
name: ceph-secret
namespace: kube-system
readOnly: false
persistentVolumeReclaimPolicy: Retain
EOF cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cephfs-mavenrepos-pvc
namespace: incubation
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 5Gi
selector:
matchLabels:
name: cephfs-mavenrepos-pv
EOF

创建好后,到jenkins系统配置里配置挂载信息。

nexus

添加 npm proxy

name: cnjs

address: http://r.cnpmjs.org

RUN npm i --registry=http://nexus/researchnpm/

maven镜像可以添加一个阿里、csdn等proxy,加到 maven-group

chartmuseum.jenkins-x.io访问慢

chartmuseum.jenkins-x.io 经常访问不了,可以搭建私有charts服务,新增一个ingress,域名使用chartmuseum.jenkins-x.io。

{
"kind": "Ingress",
"apiVersion": "extensions/v1beta1",
"spec": {
"rules": [
{
"host": "chartmuseum.jenkins-x.io",
"http": {
"paths": [
{
"path": "/",
"backend": {
"serviceName": "jenkinsx-charts-service",
"servicePort": 80
}
}
]
}
}
]
}

最核心的是,让构建容器里可以访问到这个:

  • 先修改hosts

    k8s-vip chartmuseum.jenkins-x.io

k8s-vip 要替换成K8S集群的虚拟ip或者masterip

  • 修改coredns,通过hosts插件挂载服务器的hosts文件

63 Corefile: |
64 .:53 {
65 errors
66 health
67 hosts /etc/server-hosts {
68 fallthrough
69 }
70 kubernetes cluster.local. in-addr.arpa ip6.arpa {
71 pods insecure
72 upstream
73 fallthrough in-addr.arpa ip6.arpa
74 }
75 prometheus :9153
76 proxy . 192.168.75.14
77 cache 30
78 log
79 loop
80 reload
81 loadbalance
82 } 165 volumes:
166 - name: config-volume
167 configMap:
168 name: coredns
169 items:
170 - key: Corefile
171 path: Corefile
172 - name: server-hosts
173 hostPath:
174 path: /etc/hosts

jenkins-x 部署慢

  1. 将exposecontroller手动导入上传到jenkins-x-chartmuseum,然后修改env的requirement.yaml,
 alias: expose
name: exposecontroller
repository: http://jenkins-x-chartmuseum:8080
version: 2.3.82
- alias: cleanup
name: exposecontroller
repository: http://jenkins-x-chartmuseum:8080
version: 2.3.82
  1. 修改jenkinsfile
  • 减少stage
  • helm init --client-only
  • 部署不适用jx step,直接使用helm命令部署
pipeline {
options {
disableConcurrentBuilds()
}
agent {
label "jenkins-maven"
}
environment {
DEPLOY_NAMESPACE = "cog"
}
stages {
stage('Update Environment') {
when {
branch 'master'
}
steps {
container('maven') {
dir('env') {
sh 'helm init --client-only --stable-repo-url http://charts.iflyresearch.com/ && helm repo add release http://jenkins-x-chartmuseum:8080 && helm dependency build . && helm upgrade $DEPLOY_NAMESPACE . --install --namespace $DEPLOY_NAMESPACE'
}
}
}
}
}
}

作者:Jadepeng

出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

jenkins X实践系列(4) —— jenkins X 构建提速的更多相关文章

  1. 「持续集成实践系列 」Jenkins 2.x 构建CI自动化流水线常见技巧

    在上一篇文章中,我们介绍了Jenkins 2.x实现流水线的两种语法,以及在实际工作中该如何选择脚本式语法或声明式语法.原文可查阅:「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要 ...

  2. jenkins X实践系列(1) —— 背景知识

    本文介绍jenkins X(以下简称jx)相关的背景技术. jenkins X 简介 Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务 ...

  3. 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点

    1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...

  4. jenkins X实践系列(2) —— 基于jx的DevOps实践

    jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中.最近调研了JX,这里为第2篇,使用已经安装好的jx来实践CICD,旨在让大家了解基于jx的DevOps是如何运转的,感兴趣 ...

  5. jenkins X实践系列(3) —— jenkins X 安装拾遗

    jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中.最近调研了JX,这里为第3篇,介绍下如何安装jenkins x. 前置条件 安装K8S 安装ceph集群(jx需要stor ...

  6. Jenkins持续集成企业实战系列之Jenkins手动构建-----04

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  7. Jenkins系列之-—06 Ant构建

    一.Ant 简介&构建环境 Apache Ant 是由 Java 语言开发的工具 构建ant环境: 1). 安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH 2). 下载 ...

  8. DEVOPS技术实践_04:Jenkins参数化构建

    一.参数化构建 1.1 各个参数的信息 凭据参数存储一个用户的账号密码信息,等等,运用最多的是选项参数 1.2 使用选项参数 构建已经变成参数化构建 1.3 获取这个值,修改Jenkinsfile文件 ...

  9. DEVOPS技术实践_03:Jenkins自动构建

    一.提交代码自动构建 当开发人员在gitlab提交代码后,会自动触发jenkin构建 点击项目---->点击diy_maven-TEST----->点击配置--->构建触发器---- ...

随机推荐

  1. python序列(列表,元组,字典)的常用排序

    列表 正向排序 sort() >>> list=[1,6,3,4,5,2] >>> list.sort() >>> list [1, 2, 3, ...

  2. linux ln 命令使用参数详解(ln -s 软链接)

    ln是linux中一个非常重要的命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  3. 前端 ----js的事件流的概念(重要)

    09-JS的事件流的概念(重点)   在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页 ...

  4. 【原创】大叔问题定位分享(33)beeline连接presto报错

    hive2.3.4 presto0.215 使用hive2.3.4的beeline连接presto报错 $ beeline -d com.facebook.presto.jdbc.PrestoDriv ...

  5. Codeforces 438E The Child and Binary Tree [DP,生成函数,NTT]

    洛谷 Codeforces 思路 看到计数和\(998244353\),可以感觉到这是一个DP+生成函数+NTT的题. 设\(s_i\)表示\(i\)是否在集合中,\(A\)为\(s\)的生成函数,即 ...

  6. EasyUI 如何结合JS导出Excel文件

    出处:http://blog.csdn.net/jumtre/article/details/41119991 EasyUI 如何结合JS导出Excel文件 分类: 技术 Javascript jQu ...

  7. 一篇文章让你了解Android各个版本的历程

    2008年--至今 Android 1.5(Cupcake纸杯蛋糕): 智能虚拟键盘:使用widgets实现桌面个性化:在线文件夹(Live Folder)快速浏览在线数据:视频录制和分享:图片上传: ...

  8. jemter 新增sha256函数

    1  https://blog.csdn.net/y100100/article/details/80701049 2  https://blog.csdn.net/y100100/article/d ...

  9. iOS 中的block异常 判断block是否为空

    我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常[32位下的结果,如果是64位,则address=0 ...

  10. 基于ARM Cortex-M和Eclipse的SWO单总线输出

    最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关通过SWD的跟踪接口SWO获取ARM Cortex-M相关信息的文章,文章结构明晰,讲解透彻,本人深受启发,特意将其翻 ...