有一个需求,每次服务更新发布时,要拉取不同版本的 Docker 镜像来启动,这里就涉及到一个问题:如何传递 Docker 镜像版本号的问题。
线上环境是用 saltstack 发布的,问题就变成了:如何从命令行传递参数到 state sls 文件中的变量。
可以从命令行传递 pillar 变量解决。
示例如下:
1、startup.sh 脚本中定义 jinja 变量 {{ version }},用以区分不同版本的 Docker 镜像

// startup.sh 文件
#!/bin/bash
docker pull harbor.foobar.cn/prod/web-service:{{ version }} && \
docker run -d --name web-service harbor.foobar.cn/prod/web-service:{{ version }}

2、deploy.sls 文件里声明 startup.sh 使用 jinjia 模板 - template: jinja,并且传递 version 变量到 startup.sh 文件,version 变量 version: {{ salt['pillar.get']('version') }} 获取从命令行传递的 pillar 参数变量

// deploy.sls 文件app-script-file:
  file.managed:
    - name: /data/apps/startup.sh    
    - source: salt://releases//files/startup.sh
    - mode: 755
    - user: root    
    - group: root    
    - makedirs: True    
    - template: jinja    
    - defaults:
      version: {{ salt['pillar.get']('version') }}

3、调用 salt state sls 文件时,通过在命令行传递参数 pillar='{version: 版本号}' 就可以实现更新发布时, 拉取不同版本的 Docker 镜像来启动

salt '*' state.apply deploy pillar='{version: 1.1.0}'


本文出自链接:https://www.jianshu.com/p/771ed60c985c