美文网首页程序员码农的世界互联网科技
Jenkins on ACK实战(二):这是一条简单的流水线

Jenkins on ACK实战(二):这是一条简单的流水线

作者: 阿里云技术 | 来源:发表于2019-08-16 16:34 被阅读6次

    上一篇结束的时候,我们已经部署了一套Jenkins环境,今天我们就在这套环境里来创建一条简单的流水线来做应用的构建并发布到这个集群

    开始之前

    • 在集群中创建用到的registry的访问密钥,这里我们使用阿里云容器镜像服务的北京区域
    $ docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com
    Login Succeeded
    $ kubectl create secret generic jenkins-docker-cfg -n ci --from-file=/root/.docker/config.json
    
    > 注意:如果是在Mac上操作,需要先把~/.docker/config.json里的`credsStore`参数项删除再去login
    
    
    • 创建流水线部署的目标环境,这里我们选择部署到这个集群的pro namespace,对于正式环境,请选择不同的集群
    $ kubectl create -n pro
    
    
    • 在jenkins中创建访问目标集群的密钥
    $ kubectl -n kube-system get serviceaccount admin -o go-template --template='{{range .secrets}}{{.name}}{{"\n"}}{{end}}'
    ${admin-token-6xbcz}
    $ kubectl -n kube-system get secrets ${admin-token-6xbcz} -o go-template --template '{{index .data "token"}}' | base64 -D
    eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2V[...]
    
    将获取到的token保存在Jenkins里![jenkins_credential_pro_env](https://yqfile.alicdn.com/3bc4a8953906562257ce65bca3721f52ccd3f9c5.jpeg)
    
    

    配置流水线

    • 创建流水线项目
    • 配置pipeline逻辑,将下面一段pipeline代码写入项目的Pipeline script
    pipeline {
     agent {
     kubernetes {
     label 'jenkins-pod'
     defaultContainer 'jnlp'
     yaml """
     apiVersion: v1
     kind: Pod
     metadata:
     labels:
     app: jenkins-slave-pod
     spec:
     containers:
     - name: golang
     image: golang:1.12
     command:
     - cat
     tty: true
     - name: kaniko
     image: registry.cn-beijing.aliyuncs.com/acs-sample/jenkins-slave-kaniko:0.6.0
     command:
     - cat
     tty: true
     volumeMounts:
     - name: ymian
     mountPath: /root/.docker
     - name: kubectl
     image: roffe/kubectl:v1.13.2
     command:
     - cat
     tty: true
     - name: busybox
     image: ymian/busybox
     command:
     - cat
     tty: true
     volumes:
     - name: ymian
     secret:
     secretName: jenkins-docker-cfg
     items:
     - key: config.json
     path: config.json
     """
     }
     }
     stages {
     stage('Build') {
     steps {
     container('golang') {
     git url: 'https://github.com/HYmian/gin-sample.git'
     sh """
     go build -mod vendor -v
     """
     }
     }
     }
     stage('Image Build And Publish') {
     steps {
     container("kaniko") {
     sh "kaniko -f `pwd`/Dockerfile -c `pwd` -d registry.cn-beijing.aliyuncs.com/${your_repo}/gin-sample"
     }
     }
     }
     stage('Deploy to pro') {
     steps {
     container("kubectl") {
     withKubeConfig(
     [
     credentialsId: 'pro-env',
     serverUrl: 'https://kubernetes.default.svc.cluster.local'
     ]
     ) {
     sh '''
     kubectl apply -f `pwd`/deploy.yaml -n pro
     kubectl wait --for=condition=Ready pod -l app=gin-sample --timeout=60s -n pro
     '''
     }
     }
     }
     }
     }
    }
    
    
    • 我们这里为了演示方便,直接在Jenkins里写pipeline的逻辑,但是在正式使用时,应该将pipeline保存为单独的文件并和项目的代码放在同一个仓库里
    • 注意将代码里的${your_repo}替换成自己的仓库名称
    • 验证流水线,手动触发,成功后可以在blue ocean中看到结果

    小结

    本文配置了一条包含构建、打包、部署三个stage的简单流水线,pipeline是Jenkins 2.0开始引入的概念,关于pipeline的优势可以参考官方给出的说明

    可能在上面一节里,关于agent这一段的定义会让大家更迷惑一点,在下一篇文章里,我们会着重给大家介绍这一部分。

    作者:布帆
    阅读原文
    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:Jenkins on ACK实战(二):这是一条简单的流水线

        本文链接:https://www.haomeiwen.com/subject/zvtqsctx.html