我有一个ReactJS应用程序,从中我可以为Web服务器构建资产文件。对于这种方法,我使用Docker容器。
使用中的容器:node:12-alpine
应用程序数据:./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
模块在容器中完成构建过程后执行。做这件事的方法是什么?
将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