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 中查找。
我的 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 中查找。