前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Jenkins Pipeline实现自动化部署

通过Jenkins Pipeline实现自动化部署

作者头像
岛哥的质量效能笔记
发布2021-08-18 14:57:13
1K0
发布2021-08-18 14:57:13
举报
文章被收录于专栏:岛哥的质量效能笔记

阅读本文大约需要2.3分钟

前言

在之前讲解自动化测试的文章中我多次提及agent这个工具,具体它主要提供哪些服务以及是如何部署的,今天来跟大家聊一聊。我个人比较喜欢通过具体的问题去实践和落地一项技术,然后再回过头来去丰富过程中涉及的理论知识,在我们的自动化测试系统中,我开发了一个小工具agent,用来管理宿主机挂载的测试设备(Android、iOS手机)的连接状态和使用状态(在线、离线、忙碌),然后服务端通过获取到的这些状态用一种负载均衡算法来调度自动化任务的执行。

因为我们的自动化系统有个小集群,每次agent更新版本后都要在这些集群中的所有机器上重新部署,我想每次在每台机器上的操作步骤都差不多,于是决定通过Jenkins Pipeline和Supervisor的方式来自动化的部署和管理这个工具(服务)。

Jenkins Pipeline 基于 Groovy 中的领域特定语言(DSL),提供了非常强大的方法来开发复杂、多步的DevOps Pipeline 。

而Supervisor可以在机器出现断电重启或者agent进程意外挂掉的情况下自动拉起,可以参考我之前写的一篇文章《自动化测试之进程管理》。

安装Jenkins Pipeline插件

在插件中心搜索并安装Jenkins Pipiline 插件套装。

与 Freestyle 任务不同,Pipeline 可以在单个Job中完成所有的任务编排。

增加Webhook触发器

增加webhook,当代码库有更新时,自动触发相应的单元测试任务、构建任务、部署任务、文档生成任务等。

Jenkinsfile文件中加入下面这段配置:

代码语言:javascript
复制
triggers {    pollSCM ''
  }

像写代码一样开发你的 Pipeline

使用这个功能可以让你像做其他软件开发一样将 Pipeline 配置文件以 Jenkinsfile 的方式存储在 SCM 中,然后进行版本迭代。

这样做可以将 Pipeline 作为代码来看待,强制执行良好的规范。

注意:将流水线脚本命名为:Jenkinsfile 。

在 Stage 块内进行作业

Pipeline 内的任何非安装作业都应该在某一个 Stage 块内执行。

这是因为 Stage 是 Pipeline 的逻辑分割,可以将工作分为几个 Stage,这样可以将 Pipeline 分成清晰的几个步骤,如下所示:

代码语言:javascript
复制
stages {stage('Build on robert') {
        agent {
            label 'master'
        }
        steps {
            sh 'bash -x -s < build_agent.sh'
        }
    }
    stage('Deploy on robert') {
        agent {
            label 'master'
        }
        steps {
            sh 'bash -x -s < deploy_agent.sh'
        }
    }
}

Blue Ocean 插件将各个 Stage 看作 Pipeline 的唯一分段。

在节点内执行实际作业

Pipeline 里的实质性作业都应该发生在一个 Node 块内。

因为在默认情况下,Jenkinsfile 脚本本身在 Jenkins 主机上运行。 在任何实质性作业过程中,例如从 Git 服务器克隆代码或编译项目,都应该利用 Jenkins 分布式构建能力,在代理节点中运行。

完整的配置文件

Jenkinsfile:

代码语言:javascript
复制
// Declarative //pipeline {
    agent none
    triggers {
        pollSCM ''
    }
    stages {
        stage('Build on robert') {
            agent {
                label 'master'
            }
            steps {
                sh 'bash -x -s < build_agent.sh'
            }
        }
        stage('Deploy on bernard') {
            agent {
                label 'bernard'
            }
            steps {
                sh 'bash -x -s < deploy_agent.sh'
            }
        }
        stage('Deploy on dolores') {
            agent {
                label 'dolores'
            }
            steps {
                sh 'bash -x -s < deploy_agent.sh'
            }
        }
        stage('Deploy on robert') {
            agent {
                label 'master'
            }
            steps {
                sh 'bash -x -s < deploy_agent.sh'
            }
        }
        stage('Deploy Doc on dolores') {
            agent {
                label 'dolores'
            }
            steps {
                sh 'bash -x -s < build_doc.sh'
            }
        }
    }
}

build_agent.sh:

代码语言:javascript
复制
if [ ! -d "venv" ]; then
    virtualenv -p /usr/bin/python2.7 venv
fi
. venv/bin/activate
pip install -r requirements.txt
rm -rf dist/*
make release

deploy_agent.sh:

代码语言:javascript
复制
cd /Users/test
supervisorctl -u root -p test stop agent
sudo pip uninstall -y ***
pip install *** --no-cache-dir
lsof -i tcp:9096 | awk 'NR==2{print}' | awk '{print $2}'|xargs sudo kill -9
ps aux | grep adb | grep -v grep | awk '{print $2}'|xargs sudo kill -9
supervisorctl -u root -p test start agent

build_doc.sh:

代码语言:javascript
复制
if [ ! -d "venv" ]; then
    virtualenv -p /usr/bin/python2.7 venv
fi
. venv/bin/activate
pip install -r requirements.txt
cd docs
make html
cp -fr _build/html/* /Users/test/ftp/agent.doc/

推荐阅读:

自动化测试之进程管理

自动化质量评估维度

终端自动化测试探索之路

想要明白些道理,遇见些有趣的事 —— 离岛

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 岛哥的质量效能笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档