Skip to content
SRE运维进阶之路SRE运维进阶之路
github icon
  • Jenkins

    • Jenkins 学习笔记
      • 1 Jenkins 简介

        • 1.1 DevOps、CI、CD都是什么鬼?
          • 1.2 Jenkins简介
          • 2 安装 Jenkins

            • 2.1 yum 安装 jenkins
              • 2.2 war 包安装 jenkins
                • 2.3 使用 ansible 安装 jenkins
                  • 2.4 使用docker安装jenkins
                  • 3 使用 Jenkins

                    • 3.1 Jenkins用户权限管理
                      • 3.2 访问 API
                      • 4 流水线核心语法

                        • 4.1 开始编写Jenkinsfile
                          • 4.2 Jenkins流水线语法
                            • 4.3 Groovy 简明教程
                              • 4.4 Jenkins共享库应用
                                • 4.5 共享库之钉钉消息推送
                                  • 4.6 流水线开发工具
                                    • 4.7 pipeline 生产配置实例
                                      • 4.8 在 VS Code 中校验 Jenkinsfile
                                      • 5 流水线集成篇

                                        • 5.1 构建发布工具集成
                                          • 5.2 用户认证系统集成
                                          • 6 管理 jenkins

                                            • 6.1 Jenkins 关闭和重启的实现方式
                                            • 7 日常维护

                                              • 7.1 Jenkins Job迁移
                                              • 8 Jenkins 常见问题
                                              • Ansible

                                                • Ansible 学习笔记
                                                  • 1 初识Ansible
                                                    • 2 Ansible Inventory配置详解
                                                      • 3 Ansible Ad-hoc命令集

                                                        • 3.1 Ansible Ad-hoc 常用命令集
                                                          • 3.2 Ansible lineinfile模块详解
                                                          • 4 Ansible Playbook

                                                            • 4.1 Playbook的结构及handler用法
                                                              • 4.2 Playbook循环语句
                                                                • 4.3 Playbook条件语句
                                                                  • 4.4 Playbook高级用法
                                                                    • 4.5 Playbook之tags
                                                                      • 1 简介
                                                                        • 2 为task打tag
                                                                          • 3 使用tag
                                                                            • 3.1 执行指定tag的task
                                                                              • 3.2 排除指定tag的task
                                                                                • 3.3 查看playbook中的所有tag
                                                                                • 4 打tag的几种方式
                                                                                  • 5 ansible内置tag
                                                                                  • 4.6 巧用Roles
                                                                                    • 4.7 Jinja2 模板
                                                                                      • 4.8 yaml语法
                                                                                      • 5 Ansible变量

                                                                                        • 5.1 自定义变量
                                                                                          • 5.2 Fact变量
                                                                                            • 5.3 魔法变量
                                                                                              • 5.4 使用lookup生成变量
                                                                                                • 5.5 使用vault配置加密
                                                                                                • 6 Ansible使用优化
                                                                                                  • 7 常见问题
                                                                                                    • 8 综合项目

                                                                                                      • 使用 ansible 快速安装 k8s 机器

                                                                                                    4.5 Playbook之tags

                                                                                                    author iconClaycalendar icon2020年3月20日category icon
                                                                                                    • 自动化工具
                                                                                                    tag icon
                                                                                                    • Ansible
                                                                                                    timer icon大约 4 分钟

                                                                                                    此页内容
                                                                                                    • 1 简介
                                                                                                    • 2 为task打tag
                                                                                                    • 3 使用tag
                                                                                                      • 3.1 执行指定tag的task
                                                                                                      • 3.2 排除指定tag的task
                                                                                                      • 3.3 查看playbook中的所有tag
                                                                                                    • 4 打tag的几种方式
                                                                                                    • 5 ansible内置tag

                                                                                                    # 4.5 Playbook之tags

                                                                                                    # 1 简介

                                                                                                    在大型项目当中,通常一个playbook会有非常多的task。而我们每次执行这个playbook时,都会将所有task运行一遍。而事实上,在实际使用过程中,我们可能只是想要执行其中的一部分任务而已,并不想把整个playbook完整跑一遍。这个时候就需要用到tags。

                                                                                                    通过tags,我们可以给playbook中的某一些任务打上“标签”,而在执行playbook的时候,我们可以通过选定标签的方式指定只执行哪一些任务或者不执行哪一些任务。

                                                                                                    # 2 为task打tag

                                                                                                    下面是一个安装httpd的简单示例:

                                                                                                    # cat /etc/ansible/playbook/install_web.yml
                                                                                                    - name: configure webservers 
                                                                                                      hosts: all
                                                                                                      remote_user: ansible
                                                                                                      
                                                                                                      tasks:
                                                                                                        - name: Install httpd
                                                                                                          yum: 
                                                                                                            name: httpd
                                                                                                            state: present
                                                                                                          tags: install_httpd
                                                                                                            
                                                                                                        - name: Cofiguration httpd
                                                                                                          copy: 
                                                                                                            src: /root/httpd.conf 
                                                                                                            dest: /etc/httpd/conf/httpd.conf
                                                                                                          tags: conf_httpd   
                                                                                                          notify:
                                                                                                            - restart httpd
                                                                                                            
                                                                                                        - name: Start httpd
                                                                                                          service: 
                                                                                                            name: httpd 
                                                                                                            state: started 
                                                                                                            enabled: no
                                                                                                          tags: start_httpd
                                                                                                    
                                                                                                      handlers:
                                                                                                        - name: restart httpd
                                                                                                          service: name=httpd state=restart
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7
                                                                                                    8
                                                                                                    9
                                                                                                    10
                                                                                                    11
                                                                                                    12
                                                                                                    13
                                                                                                    14
                                                                                                    15
                                                                                                    16
                                                                                                    17
                                                                                                    18
                                                                                                    19
                                                                                                    20
                                                                                                    21
                                                                                                    22
                                                                                                    23
                                                                                                    24
                                                                                                    25
                                                                                                    26
                                                                                                    27
                                                                                                    28
                                                                                                    29
                                                                                                    30

                                                                                                    在上面的示例中,我们为两个task定义了三个tags:install_httpd、conf_httpd以及start_httpd。

                                                                                                    # 3 使用tag

                                                                                                    # 3.1 执行指定tag的task

                                                                                                    有了tags之后,我们就可以只运行playbook中指定标签的task了:

                                                                                                    # ansible-playbook  install_web.yml --tags "start_httpd"
                                                                                                    
                                                                                                    PLAY [configure webservers] *************************************************************************************************************************************************
                                                                                                    
                                                                                                    TASK [Gathering Facts] ******************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    TASK [Start httpd] **********************************************************************************************************************************************************
                                                                                                    changed: [10.1.61.187]
                                                                                                    
                                                                                                    PLAY RECAP ******************************************************************************************************************************************************************
                                                                                                    10.1.61.187                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7
                                                                                                    8
                                                                                                    9
                                                                                                    10
                                                                                                    11
                                                                                                    12

                                                                                                    也可以一次指定多个tag执行:

                                                                                                    # ansible-playbook install_web.yml     --tags "conf_httpd,start_httpd"
                                                                                                    
                                                                                                    PLAY [configure webservers] *************************************************************************************************************************************************
                                                                                                    
                                                                                                    TASK [Gathering Facts] ******************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    TASK [Cofiguration httpd] ***************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    TASK [Start httpd] **********************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    PLAY RECAP ******************************************************************************************************************************************************************
                                                                                                    10.1.61.187                : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7
                                                                                                    8
                                                                                                    9
                                                                                                    10
                                                                                                    11
                                                                                                    12
                                                                                                    13
                                                                                                    14
                                                                                                    15

                                                                                                    # 3.2 排除指定tag的task

                                                                                                    通过下面的方式可以排除指定了tag的task,即除了指定tag的task不执行,其他task都执行:

                                                                                                    # ansible-playbook --skip-tags="install_httpd" install_web.yml                           
                                                                                                    
                                                                                                    PLAY [configure webservers] *************************************************************************************************************************************************
                                                                                                    
                                                                                                    TASK [Gathering Facts] ******************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    TASK [Cofiguration httpd] ***************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    TASK [Start httpd] **********************************************************************************************************************************************************
                                                                                                    ok: [10.1.61.187]
                                                                                                    
                                                                                                    PLAY RECAP ******************************************************************************************************************************************************************
                                                                                                    10.1.61.187                : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7
                                                                                                    8
                                                                                                    9
                                                                                                    10
                                                                                                    11
                                                                                                    12
                                                                                                    13
                                                                                                    14
                                                                                                    15

                                                                                                    执行效果跟上面一样。

                                                                                                    # 3.3 查看playbook中的所有tag

                                                                                                    可以通过--list-tags参数列出指定的playbook中所有的tag

                                                                                                    # ansible-playbook --list-tags install_web.yml                          
                                                                                                    
                                                                                                    playbook: install_web.yml
                                                                                                    
                                                                                                      play #1 (all): configure webservers   TAGS: []
                                                                                                          TASK TAGS: [conf_httpd, install_httpd, start_httpd]
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6

                                                                                                    # 4 打tag的几种方式

                                                                                                    1. 为一个任务指定一个标签

                                                                                                    这种方式就是上面示例中的方法:

                                                                                                    tags: conf_httpd
                                                                                                    
                                                                                                    1
                                                                                                    1. 为一个任务指定多个标签

                                                                                                    可以通过列表的方式为一个任务指定多个标签:

                                                                                                    tags:
                                                                                                      - install_httpd
                                                                                                      - install_web
                                                                                                      
                                                                                                    tags: ['install_httpd','install_web']
                                                                                                    
                                                                                                    tags: install_httpd,install_web
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7
                                                                                                    1. 为一个play指定一组标签

                                                                                                    当为一个play指定一组标签后,该play下的所有task都会自动继承该标签,各task也可以自定义自己的标签。

                                                                                                    - name: configure webservers 
                                                                                                      hosts: all
                                                                                                      remote_user: ansible
                                                                                                      tags: 
                                                                                                        - httpd
                                                                                                      tasks:
                                                                                                        ...
                                                                                                    
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    4
                                                                                                    5
                                                                                                    6
                                                                                                    7

                                                                                                    在静态加载文件的指令上打标签,等价于为所加载文件中所有子任务打标签。

                                                                                                    在动态加载文件的指令上打标签,不会为子任务打标签,而是为父任务自身打标签。

                                                                                                    现在说结论:

                                                                                                    (1).静态加载的指令有:roles、include、import_tasks、import_role

                                                                                                    (2).动态加载的指令只有include_xxx,包括include_tasks、include_role

                                                                                                    import_playbook和include_playbook因为本身就是play级别或高于play级别,所以不能为这两个指令打标签。

                                                                                                    # 5 ansible内置tag

                                                                                                    除了用户自定义tag,ansible也内置了几个tag,这些tag都包含特殊含义:

                                                                                                    • always:一旦某个task被打上了always的tag,则无论是playbook的完整执行,还是指定tag执行,不管你指定的tag是啥,该任务总是会被执行。除非明确指定"--skip-tags=always"选项,才不会执行该task。

                                                                                                    • never:该标签与always正好相反,总是不会执行,除非明确指定"--tags=never"选项。

                                                                                                    • tagged:在调用时使用

                                                                                                      # 所有打了tag的任务都会被执行,包含never tag的除外,没有标签的不会被执行
                                                                                                      ansible-playbook --tags tagged install_web.yaml 
                                                                                                      
                                                                                                      # 所有打了tag的任务都不会被执行,包括always tag也不会被执行
                                                                                                      ansible-playbook --skip-tags tagged install_web.yaml
                                                                                                      
                                                                                                      1
                                                                                                      2
                                                                                                      3
                                                                                                      4
                                                                                                      5
                                                                                                    • untagged:在调用时使用

                                                                                                      # 所有未打tag的任务都会被执行,打了always tag的也会被执行
                                                                                                      ansibl-playbook --tags untagged install_web.yaml
                                                                                                      
                                                                                                      # 所有未打tag的任务都不会被执行
                                                                                                      ansibl-playbook --skip-tags untagged install_web.yaml
                                                                                                      
                                                                                                      1
                                                                                                      2
                                                                                                      3
                                                                                                      4
                                                                                                      5
                                                                                                    • all:表示所有任务都会被执行,在默认情况下,不指定任何标签,则使用的就是该标签

                                                                                                    edit icon编辑此页open in new window
                                                                                                    上次编辑于: 2022/4/27 15:33:00
                                                                                                    贡献者: clay-wangzhi
                                                                                                    上一页
                                                                                                    4.4 Playbook高级用法
                                                                                                    下一页
                                                                                                    4.6 巧用Roles
                                                                                                    备案号:冀ICP备2021007336号
                                                                                                    Copyright © 2023 Clay