Travis CI 构建基于容器的 Racket 安装

Travis CI build Racket Installation for Container-based

我的 before_install 在我的 .travis.yml 中读取

before_install:
  - . scripts/get_racket.sh
  - alias racket="${RACKET_DIR}/bin/racket"

我还有一个脚本get_racket.sh,上面写着

#!/bin/bash

if [[ -z "$RACKET_VERSION" ]]; then
    echo "Racket version environment variable not set, setting default"
    export RACKET_VERSION=HEAD  # set default Racket version
    echo "Version: $RACKET_VERSION" 
fi

if [[ -z "$RACKET_DIR" ]]; then
    echo "Racket directory environment variable not set, setting default"
    export RACKET_DIR='/usr/racket'  # set default Racket directory
    echo "Directory: $RACKET_DIR" 
fi

if [ ! -e cache ] || [ ! -d cache ]; then
    echo "Creating cache folder ..."
    mkdir cache
fi

cd cache

INSTALL=$(ls | grep '^racket*.sh' | tr -d '[:blank:]')
if [[ ! -e "$RACKET_DIR" ]] || [[ ! -d "$RACKET_DIR" ]]; then
    if [[ -z "$INSTALL" ]]; then
        echo "Racket installation script not found, building."

        if [ ! -e travis-racket ] || [ ! -d travis-racket ] \
        || [ ! -e travis-racket/install-racket.sh ] \
        || [ ! -f travis-racket/install-racket.sh ]; then
            git clone https://github.com/greghendershott/travis-racket.git
        fi
        bash < travis-racket/install-racket.sh
    else
        "./$INSTALL"
    fi
fi

which racket &>/dev/null
ESTATUS=$?
if [[ -n "$ESTATUS" ]]; then
    echo "Adding racket to PATH"
    export PATH="${PATH}:${RACKET_DIR}/bin"
fi

alias racket='$RACKET_DIR/bin/racket'

cd ..

但是在稍后在我的构建链中使用 racket 的脚本中,我不断得到

 racket: command not found

正如您在上面的代码片段中看到的那样,我尝试了一些解决方法来安装(以及稍后缓存以加快构建速度)没有 sudo 权限的球拍(因为这是 Travis CI 的容器的限制基于基础设施)。任何帮助将不胜感激,我很难过。

您需要弄清楚您已经成功显示的这个安装脚本是否将有效的 Racket 二进制文件放在磁盘上的任何位置。也许它甚至没有编译,或者它可能试图安装在 /usr/bin 中,如果没有 sudo 就没有写访问权限,或者二进制文件可能有问题。找到二进制文件,确保它有效。

如果它确实有效,您需要注意您的脚本将 Racket 放在哪里。它会转到 /usr/bin、$HOME 还是完全转到其他地方?

最后,您需要弄清楚失败的脚本在哪里寻找 Racket。从另一个 shell 脚本中可以看出,您设置 $PATH 的行不会影响 $PATH 。我敢打赌它安装在不在默认 $PATH 中的某个地方,而你失败的脚本只在默认 $PATH 中查找。