Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写Saltstack状态脚本,在更新最新的git repo之前,确保repo目标是cleanup?_Git_Salt Stack - Fatal编程技术网

如何编写Saltstack状态脚本,在更新最新的git repo之前,确保repo目标是cleanup?

如何编写Saltstack状态脚本,在更新最新的git repo之前,确保repo目标是cleanup?,git,salt-stack,Git,Salt Stack,首先,我编写了一个saltstack状态脚本,确保我的本地目录始终与最新的git repo(Shadowsocks.etc)一样新,然后编译目录: Clone Shadowsocks Github: git.latest: - name: https://github.com/madeye/shadowsocks-libev.git - target: /usr/share/shadowsocks/ - require: - pkg: Install Sh

首先,我编写了一个saltstack状态脚本,确保我的本地目录始终与最新的git repo(Shadowsocks.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
第一次执行就可以了

但是如果repo new update然后execute state将再次失败——目录中有本地文件,
git.latest
get conflict,需要首先清理

因此,我添加了一个还原状态:

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
然后它工作得很好,但是当I
rm-rf
/usr/share/shadowsocks目录时,状态脚本失败:
注释:所需的工作目录/usr/share/shadowsocks/”不可用

我解决的问题是
-cwd:/usr/share/shadowsocks/
,但我仅使用yif使状态在/usr/share/shadowsocks存在时运行

这是一种按如下方式编写状态流的方法吗

如果存在/usr/share/shadowsocks:

全部还原:
->
克隆/更新Git Repo
->
构建它

其他:

克隆/更新Git Repo
->
构建它

如何让它变得简单

我最终使用了一个丑陋的解决方案:

克隆Git Repo
(如果还原错误)->
还原
->
更新Git Repo
->
构建
, 除了要求之外,克隆/更新部分几乎相同

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

我认为总会有更好的解决方案。

也许我不明白这一点,但我认为我的用例非常相似。我有一个state,它的任务是确保所有存储库都处于正确的状态,这也意味着它们是干净的,在构建过程中创建的文件必须被删除

一般来说,这与盐没有多大关系。我想,在更新回购协议之前,只需重置回购协议即可:

....
cd $APP_DIR;
git clean  -d  -fx ""
git checkout $BRANCH
git pull
...
这是代表我的构建的shell脚本的一部分。如果您的目录已清除,您的状态将不会失败。你可以随时清理它

您始终可以编写有状态脚本/状态并与salt通信:

echo ""
echo "changed=no comment='Build failed, reason: ...'"
exit 1;

盐社区的丹尼尔·贾格森(Daniel Jagszen)完美地解决了这个问题:

这可能是因为“cwd”的论点

如果cwd发生在唯一检查之前。所以

Revert All:
  cmd.run:
    - name: cd /usr/share/shadowsocks/ && git checkout .
    - onlyif: test -d /usr/share/shadowsocks

应该有效。

很抱歉,没有提到这个问题是由salt社区的Daniel Jagszent完美解决的
Revert All:
  cmd.run:
    - name: cd /usr/share/shadowsocks/ && git checkout .
    - onlyif: test -d /usr/share/shadowsocks