本文介绍jenkins X(以下简称jx)相关的背景技术。
jenkins X 简介
Jenkins X 是一个高度集成化的CI/CD平台,基于Jenkins和Kubernetes实现,旨在解决微服务体系架构下的云原生应用的持续交付的问题,简化整个云原生应用的开发、运行和部署过程。
jx 基于gitops,将k8s分为preview、staging、production几个环境,

详细的devops可以查看下图:

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,准备写一个jx实践系列,这里为第一篇,介绍jx用到的一些相关组件,作为了解jx的背景知识。
jenkins pipeline
jx使用Jenkins Pipeline来执行CI流程,Jenkins Pipeline是jenkins的一套插件,支持将连续输送Pipeline实施和整合到Jenkins。Pipeline 提供了一组可扩展的工具,用于通过Pipeline DSL为代码创建简单到复杂的传送Pipeline 。
Jenkinsfile pipeline使用Groovy脚本来定义CI流程,来看一个jx生成的实际案例:
pipeline {     agent {       label "jenkins-maven"     }     environment {       ORG               = 'jqpeng'       APP_NAME          = 'x-nginx'       CHARTMUSEUM_CREDS = credentials('jenkins-x-chartmuseum')     }     stages {       stage('CI Build and push snapshot') {         when {           branch 'PR-*'         }         environment {           PREVIEW_VERSION = "0.0.0-SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER"           PREVIEW_NAMESPACE = "$APP_NAME-$BRANCH_NAME".toLowerCase()           HELM_RELEASE = "$PREVIEW_NAMESPACE".toLowerCase()         }         steps {           container('maven') {             sh "mvn versions:set -DnewVersion=$PREVIEW_VERSION"             sh "mvn package -DskipTests"             sh 'export VERSION=$PREVIEW_VERSION && skaffold build -f skaffold.yaml'               sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:$PREVIEW_VERSION"           }            dir ('./charts/preview') {            container('maven') {             sh 'helm init --client-only --stable-repo-url=http://charts.iflyresearch.com/'                          sh "make preview"              sh "jx preview --app $APP_NAME --dir ../.."            }           }         }       }       stage('Build Release') {         when {           branch 'master'         }         steps {           container('maven') {             // ensure we're not on a detached head             sh "git checkout master"             sh "git config --global credential.helper store"              sh "jx step git credentials"             // so we can retrieve the version in later steps             sh "echo \$(jx-release-version) > VERSION"             sh "mvn versions:set -DnewVersion=\$(cat VERSION)"           }           dir ('./charts/x-nginx') {             container('maven') {               sh "make tag"             }           }           container('maven') {             sh 'mvn package -DskipTests'              sh 'export VERSION=`cat VERSION` && skaffold build -f skaffold.yaml'               sh "jx step post build --image $DOCKER_REGISTRY/$ORG/$APP_NAME:\$(cat VERSION)"           }         }       }       stage('Promote to Environments') {         when {           branch 'master'         }         steps {           dir ('./charts/x-nginx') {             container('maven') {               sh 'jx step changelog --version v\$(cat ../../VERSION)'                sh 'helm init --client-only --stable-repo-url=http://charts.iflyresearch.com/'                // release the helm chart               sh 'jx step helm release'                // promote through all 'Auto' promotion Environments               sh 'jx promote -b --all-auto --timeout 1h --version \$(cat ../../VERSION)'             }           }         }       }     }     post {         always {             cleanWs()         }     }   } - pipeline 定义是一个pipeline
- environment 定义环境变量
- stages 定义流程    - stage('CI Build and push snapshot') 定义子流程        - when 匹配条件
- environment 定义子流程环境变量
- steps 定义流程制定的具体步骤            - container('maven') 使用maven镜像来构建
- sh "git checkout master" 在maven镜像执行命令
 
 
 
- stage('CI Build and push snapshot') 定义子流程        
- 其余的看字面意思就可以理解了
执行构建后,打开jenkins web页面,可以看到构建pipelines

同时可以查看Blue Ocean页面

helm与charts
Helm是管理Kubernetes charts的工具,charts是预先配置好的安装包资源,有点类似于Ubuntu的APT和CentOS中的yum。
可以使用helm来:
- 查找并使用已打包为Helm charts的热门应用在Kubernetes中运行
- 封装并分享自己的应用
