首先,我编写了一个salt堆栈状态脚本,确保我的本地目录总是和最新的git一样新(影子袜子.etc),然后编译目录:
Clone Shadowsocks Github:
git.latest:
- name: https://github.com/madeye/shadowsocks-libev.git
- target: /usr/share/shadowsocks/
- require:
- pkg: Install Shadowsocks Depend Pkgs
- cmd: Revert All
Build Shadowsocks Command:
cmd.run:
- name: |
./configure
make
make install
- cwd: /usr/share/shadowsocks/
- require:
- git: Clone Shadowsocks Github第一次执行就可以了。
但是如果回购新的更新,然后再次执行状态将失败--目录中有本地文件,git.latest有冲突,首先需要清理。
因此,我添加了一个恢复状态:
Revert All:
cmd.run:
- name: |
git checkout .
- cwd: /usr/share/shadowsocks/
- onlyif: ls /usr/share/shadowsocks
Clone Shadowsocks Github:
git.latest:
- name: https://github.com/madeye/shadowsocks-libev.git
- target: /usr/share/shadowsocks/
- require:
- pkg: Install Shadowsocks Depend Pkgs
- cmd: Revert All
Build Shadowsocks Command:
cmd.run:
- name: |
./configure
make
make install
- cwd: /usr/share/shadowsocks/
- require:
- git: Clone Shadowsocks Github然后它运行得很好,但是当我rm -rf /usr/share/shadowsocks目录时,状态脚本会失败:Comment: Desired working directory "/usr/share/shadowsocks/" is not available
我解决的问题是- cwd: /usr/share/shadowsocks/,但是只有当/usr/share/ address存在时,我才会使用状态运行。
这是一种编写状态流的方法吗?
如果存在/usr/共享/阴影袜:
Revert All: -> Clone/Update Git Repo -> Build it
否则:
Clone/Update Git Repo -> Build it
如何使它变得简单?
最后,我使用了一个丑陋的解决方案:
Clone Git Repo(如果恢复错误) -> Revert -> Update Git Repo -> Build,克隆/更新部分除需求外几乎相同。
Revert All:
cmd.run:
- name: |
git checkout .
- cwd: /usr/share/shadowsocks/
- onlyif: ls /usr/share/shadowsocks
- onfail:
- git: Clone Shadowsocks Github
Clone Shadowsocks Github:
git.latest:
- name: https://github.com/madeye/shadowsocks-libev.git
- target: /usr/share/shadowsocks/
- require:
- pkg: Install Shadowsocks Depend Pkgs
Update Shadowsocks Github:
git.latest:
- name: https://github.com/madeye/shadowsocks-libev.git
- target: /usr/share/shadowsocks/
- require:
- pkg: Install Shadowsocks Depend Pkgs
- cmd: Revert All
Build Shadowsocks Command:
cmd.run:
- name: |
./configure
make
make install
- cwd: /usr/share/shadowsocks/
- require:
- git: Update Shadowsocks Github我认为总会有更好的解决办法。
发布于 2014-09-22 03:19:31
这个问题由Daniel Jagszen在盐社区:https://groups.google.com/forum/#!topic/salt-users/8SQG9KNEu44中完美地解决了。
这可能是因为"cwd“的论点
Revert All:
cmd.run:
- name: |
git checkout .
- cwd: /usr/share/shadowsocks/
- onlyif: ls /usr/share/shadowsocksAFAIK cwd是在只有检查之前进行的。所以
Revert All:
cmd.run:
- name: cd /usr/share/shadowsocks/ && git checkout .
- onlyif: test -d /usr/share/shadowsocks应该行得通。
发布于 2014-09-18 21:07:44
也许我不明白这一点,但我认为我的用例非常相似。我拥有确保所有存储库都处于正确状态的状态的状态,这也意味着它们是干净的,并且在构建过程中创建的文件必须被移除。
一般来说,这与盐没有多大关系,我想,在更新之前,只要重新设置你的回购程序就可以了:
....
cd $APP_DIR;
git clean -d -fx ""
git checkout $BRANCH
git pull
...这是shell脚本的一部分,它代表了我的构建。如果您的目录已经清除,您的状态将不会失败。你总能把它清理干净。
而且,您总是可以编写有状态的脚本/状态,并与salt通信:
echo ""
echo "changed=no comment='Build failed, reason: ...'"
exit 1;https://stackoverflow.com/questions/24413254
复制相似问题