首页 > 解决方案 > 如何使用 ansbile 为 nginx 构建 reactjs 文件,然后将这些文件同步到 ansible 库存?

问题描述

我有一个 ReactJS 应用程序,我可以从中为网络服务器构建资产文件。对于这种方法,我使用 Docker 容器。

Container In Use: node:12-alpine App Data:./app然后将其挂载到/app容器中。

所以我可以像这样直接运行一个docker容器来构建这些js文件

# docker container run -ti --name builder \
-v $PWD/app:/app -w /app node:12-alpine \
sh -c "apk update -qq && \
apk add git -qq && \
NODE_ENV=development npm install && \
mkdir dist && \
npm run build:staging"

现在我正在尝试用 ansible 自动化所有这些,所以这里是任务

- name: Run Container
  docker_container:
    name: "{{ container }}"
    image: "{{ image }}"
    volumes: "{{ lookup('env', 'PWD') }}/app:/app"
    working_dir: "/app"
    command: "{{ command }}"
    state: present
  delegate_to: localhost

- name: Update Frontend
  synchronize:
    src: "{{ lookup('env', 'PWD') }}/{{ component }}/dist/"
    dest: "/{{ parent }}/{{ component }}"
    archive: no
    compress: yes
    recursive: yes
    delete: yes

以下是命令中使用的一些变量

image: "node:12-alpine"
container: "builder"
command: "docker container exec -ti {{ container }} sh -c builder.sh"

容器运行,但似乎没有运行指定的命令,builder.sh 带有用于编译的相同命令

# cat builder.sh
apk update -qq
apk add git -qq
NODE_ENV=development npm install
mkdir dist
npm run build:staging

我是否必须使builder.sh可执行或缺少其他内容?另外,我希望synchronize在容器中完成构建过程后执行模块。有什么方法可以做到这一点?

标签: reactjsdockeransible

解决方案


将此部分与 DockerFile 一起使用。

# cat builder.sh
apk update -qq
apk add git -qq
NODE_ENV=development npm install
mkdir dist
- name: Run Container
  docker_container:
    name: "{{ container }}"
    image: "{{ image }}"
    volumes: "{{ lookup('env', 'PWD') }}/app:/app"
    working_dir: "/app"
    recreate: yes
    command: "npm run build:staging"
    state: started
  delegate_to: localhost

- name: Update Frontend
  synchronize:
    src: "{{ lookup('env', 'PWD') }}/{{ component }}/dist/"
    dest: "/{{ parent }}/{{ component }}"
    archive: no
    compress: yes
    recursive: yes
    delete: yes

推荐阅读