jenkins X實踐系列(4) —— jenkins X 構建提速


jx是雲原生CICD,devops的一個最佳實踐之一,目前在快速的發展成熟中。最近調研了JX,這里為第4篇,介紹如何加入jx構建和部署。

builder鏡像下載慢

先在一台機器上下載好,然后放到本地倉庫,到jenkins的setting里,修改鏡像地址

cnpm

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

enter description here

在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
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM