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

 本文介绍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镜像执行命令
  • 其余的看字面意思就可以理解了

执行构建后,打开jenkins web页面,可以看到构建pipelines

Pipeline

同时可以查看Blue Ocean页面

Blue Ocean

helm与charts

Helm是管理Kubernetes charts的工具,charts是预先配置好的安装包资源,有点类似于Ubuntu的APT和CentOS中的yum。

可以使用helm来:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信