【问题标题】:Travis CI build Racket Installation for Container-basedTravis CI 构建基于容器的 Racket 安装
【发布时间】:2015-06-25 22:25:24
【问题描述】:

我的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: command not found

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

【问题讨论】:

    标签: bash build continuous-integration racket travis-ci


    【解决方案1】:

    您需要确定您展示的这个安装脚本是否成功地将工作的 Racket 二进制文件放在磁盘上的任何位置。也许它甚至没有编译,或者它试图安装在 /usr/bin 中,在没有 sudo 的情况下你没有写访问权限,或者二进制文件有问题。找到二进制文件,确保它工作正常。

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

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

    【讨论】:

    • Francesco:我的.travis.yml sets RACKET_DIR to ~/racketmy .install-racket.sh to use。但它看起来像:(1)你没有从你的脚本中设置它,你默认为/usr/racket? (没有 sudo 会失败。)而且(2)你没有将它添加到 PATH 回到你的 .travis.yml 中?
    • 附注我同情。我没有太多的 shell 脚本经验,而且很难在 Travis 环境中工作。我欢迎拉取请求。
    • 我将脚本默认为 RACKET_DIR/usr/racket,因此我也可以在 Travis 构建之外使用它。不过你是对的,这是一个位置问题,现在已经解决了。调用. scripts/get_racket.sh 实际上也会导致正确设置$PATH 变量(这是source scripts/get_racket.sh 的解决方法——在本地尝试——但Travis 没有source,我试过了)(我使用脚本的目的这样我就可以在构建之间缓存安装脚本和球拍。我将在今天晚些时候提交带有固定脚本的 PR)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多