jx是雲原生CICD,devops的一個最佳實踐之一,目前在快速的發展成熟中。最近調研了JX,這里為第4篇,介紹如何加入jx構建和部署。
builder鏡像下載慢
先在一台機器上下載好,然后放到本地倉庫,到jenkins的setting里,修改鏡像地址
nodejs安裝慢
-
- 配置使用私服
-
- 構建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 部署慢
- 將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
- 修改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
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。