CD工具awx之公司生产环境的操作与部署说明

一、模板

在这里插入图片描述

  • 模板名称,见名知义
  • 项目:ansible脚本所在的位置,可以是本地,也可以是远程分布式配置,比如gitlab。(详见下文)
  • PLAYBOOK:ansible运行的入口
  • 凭证
  • 作业标签:任务的细分,可能是start,可能是stop,也可能是restart

额外变量

定义ansible脚本运行的参数。

在这里插入图片描述

二、项目

在这里插入图片描述

创建新项目

在这里插入图片描述
在这里插入图片描述

手动类型

在这里插入图片描述

awx机器的本地目录:

对应/var/lib/awx/projects/docker_control
在这里插入图片描述

git类型

填写git仓库的地址、分支和凭证。

在这里插入图片描述

三、 凭证

凭证有很多种,包括gitlab等中间件的用户名密码、k8s api的令牌、机器的用户名密码等等。

1、源控制

输入gitlab的用户名和密码。

在这里插入图片描述

2、OpenShift 或 Kubernetes API 持有者令牌

填写k8s的api地址及令牌

在这里插入图片描述
在这里插入图片描述

3、机器

输入ssh远程机器的用户名和密码。

在这里插入图片描述

四、ansible脚本

目录结构:

  • k8s_control.yaml
  • ecs_control.yaml
  • globals.yaml
  • roles
    • k8s_control
      • tasks
          • main.yaml
          • scripts
            • xxx.yaml
            • xxx.yaml
    • ecs_control
      • tasks
          • main.yaml
          • scripts
            • xxx.yaml
            • xxx.yaml

1、入口地址k8s_control.yaml

在这里插入图片描述

作为入口程序,它比较简单,通过roles指定了运行脚本roles/k8s_control/main.yaml。

2、globals.yaml

在这里插入图片描述

3、main.yaml

基本格式:

- name: make service image
  include: scripts/make_image.yaml
  tags: ["make_image", "update"]
  • include:嵌套运行另外一个yaml脚本,文件在相对路径scripts/make_image.yaml
  • tags:标签数组,既然是多个,它们之间的关系是OR或。也就是说,无论是make_image还是update,都会触发该ansible脚本-- scripts/make_image.yaml。

3、常用的任务脚本

  • 复制文件
- name: Copy {{ APPNAME }} zip package
  copy: src={{ web_app_dir }}/{{ APPNAME }}/{{ APPNAME }}.zip dest={{ directory }}/{{ APPNAME }}/{{ APPNAME }}/packages/ owner=devuser group=devuser mode=755
  connection: local
  • 执行shell命令
- name: Tag and push {{ APPNAME }}:{{ VERSION }} image
  shell: docker tag {{ image_id }} {{ aly_image_storage }}{{ APPNAME }}:{{ VERSION }} && docker push {{ aly_image_storage }}{{ APPNAME }}:{{ VERSION }}
  • 切换目录
- name: Make {{ APPNAME }} docker image
  shell: 
    chdir: "{{ directory }}/{{ APPNAME }}"
    cmd: "docker build -t {{ APPNAME }}:{{ VERSION }} ./"
  • 条件判断
- name: Verify the {{ APPNAME }} version is consistent
  fail:
    msg: "MD5 file is different"
  when: get_md5.stdout != cat_md5.stdout
  connection: local

变量get_md5和cat_md5是否相等,如果不同,则报错"MD5 file is different"。

那么这两个变量的值又是从何而来呢?就需要下文的语法register

  • 变量赋值register
- name: Get {{ APPNAME }} package md5
  shell: /usr/bin/md5sum  {{ web_app_dir }}/{{ APPNAME }}/{{ APPNAME }}.zip | awk -F ' ' '{print $1}'
  register: get_md5
  connection: local

- name: Cat {{ APPNAME }} package md5
  shell: /usr/bin/cat {{ web_app_dir }}/{{ APPNAME }}/{{ APPNAME }}.zip.md5
  register: cat_md5
  connection: local

另外一种赋值的写法,见下:

  • set_fact

在docker images查询镜像的时候,过滤得到镜像ID,然后赋值给变量“image_id”。

- name: Get {{ APPNAME }}:{{ VERSION }} image id
  shell: docker images {{ APPNAME }}:{{ VERSION }} | awk '/{{ APPNAME }}/{print $3}'
  register: IMAGE_ID

- set_fact:
    image_id: "{{ IMAGE_ID.stdout }}"
  connection: local

再举一个例子:

给变量OPTION赋值为update_from_yaml。

- set_fact:
    OPTION: "update_from_yaml"
  connection: local
  • 忽略错误 ignore_errors
- name: Comparison {{ APPNAME }} package version
  shell: check_version.sh {{ VERSION }} {{ current_version }}
  register: version_status
  when: (DEBUG  is undefined) and (scheduling_type == "deployment")
  ignore_errors: yes
  • 创建目录
- name: Create {{ APPNAME }} directory
  file: state=directory path={{ directory }}/{{ APPNAME }}/{{ APPNAME }}/{{ item }} owner=devuser group=devuser mode=755
  with_items:
    - "packages"
  connection: local
  • 创建文件
- name: Create {{ APPNAME }} dockerfile
  template: src={{ item }} dest={{ directory }}/{{ APPNAME }}/ owner=devuser group=devuser mode=755
  with_items:
    - "Dockerfile"
  connection: local
  • 更新文件template
- name: Update {{ APPNAME }} k8s yaml_template
  template: src=config.yaml dest={{ directory }}/{{ APPNAME }}/yamls/ owner=duser group=devuser mode=755
  connection: local
  • 循环遍历

使用语法with_items和template,使得在一个任务中循环执行,而不用创建两个任务。

# 生成新的 deployment.yaml 和 service.yaml 文件
- name: Create {{ APPNAME }} k8s yaml
  template: src={{ directory }}/{{ APPNAME }}/yamls/{{ item }}_template.yaml dest={{ directory }}/{{ APPNAME }}/yamls/{{ item }}.yaml owner=devuser group=devuser mode=755
  with_items:
    - "deployment"
    - "service"
  connection: local
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天草二十六_简村人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值