【问题标题】:gitlab-runner unable to use `pyenv, pip, ...`gitlab-runner 无法使用`pyenv,pip,...`
【发布时间】:2018-06-18 10:10:30
【问题描述】:

我在Debian9。和sudo su 成为root 用户。之后我运行命令gitlab-runner register。但由于某些原因。我得到的隔离环境与通过 ssh 登录服务器时不同

gitlab-runner --version
Version:      10.8.0
Git revision: 079aad9e
Git branch:
GO version:   go1.8.7
Built:        2018-05-22T03:24:56+00:00
OS/Arch:      linux/amd64

当我将env 放入before_script 时,我发现了不同的环境。 然后我把source ~/.bashrc 放到它上面。也不做任何改变。 如何让shell runner 使用我正常的登录用户环境?

更新:
当我执行env(通过输入before_script)时,我得到了这个输出

$ env
CI_RUNNER_EXECUTABLE_ARCH=linux/amd64
CI_COMMIT_TITLE=add config
CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
CI_BUILD_REF_NAME=master
CI_REGISTRY_PASSWORD=xxxxxxxxxxxxxxxxxxxx
CI_RUNNER_TAGS=provider, oauth, mp
CI_SHARED_ENVIRONMENT=true
CI_JOB_NAME=test
CI_SERVER_VERSION=10.8.4
DJANGO_SETTINGS_MODULE=config.settings.local
LANG=en_US.UTF-8
GITLAB_CI=true
CI_SERVER_REVISION=2268d0c
CI_PROJECT_VISIBILITY=private
OLDPWD=/home/gitlab-runner
INVOCATION_ID=7dd516612949410c8ca8e4e59696f9fd
CI_COMMIT_SHA=9030892858b5ca92c7b36a81f573f187e6d14090
CI_COMMIT_MESSAGE=add config

CI_BUILD_STAGE=test
CI_PROJECT_URL=https://mbx-git.magicboxasia.com/sarit/mhu_ped_oauth_provider
CI_COMMIT_REF_SLUG=master
CI_SERVER_NAME=GitLab
CI_RUNNER_VERSION=10.8.0
CI_BUILD_NAME=test
CI=true
XDG_SESSION_ID=c5
CI_REGISTRY_USER=gitlab-ci-token
USER=gitlab-runner
CI_PROJECT_ID=96
CI_PIPELINE_ID=4399
CI_COMMIT_DESCRIPTION=
PWD=/home/gitlab-runner/builds/f304ea76/0/sarit/mhu_ped_oauth_provider
GITLAB_FEATURES=
HOME=/home/gitlab-runner
JOURNAL_STREAM=8:19161
CI_REGISTRY=docker-registry.magicboxasia.com
CI_BUILD_TOKEN=xxxxxxxxxxxxxxxxxxxx
CI_BUILD_ID=5514
CONFIG_FILE=/etc/gitlab-runner/config.toml
GITLAB_USER_NAME=Sarit Ritwirune
CI_PROJECT_PATH_SLUG=sarit-mhu-ped-oauth-provider
DATABASE_URL=postgres://postgres:postgres@postgres:5432/mp_oauth_provider
POSTGRES_DB=poinkdb
GITLAB_USER_EMAIL=sarit@magicboxasia.com
CI_COMMIT_REF_NAME=master
CI_REGISTRY_IMAGE=docker-registry.magicboxasia.com/sarit/mhu_ped_oauth_provider
CI_SERVER_TLS_CA_FILE=/home/gitlab-runner/builds/f304ea76/0/sarit/mhu_ped_oauth_provider.tmp/CI_SERVER_TLS_CA_FILE
CI_RUNNER_ID=42
CI_SERVER=yes
CI_JOB_ID=5514
CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@mbx-git.magicboxasia.com/sarit/mhu_ped_oauth_provider.git
MAIL=/var/mail/gitlab-runner
SHELL=/bin/bash
GITLAB_USER_LOGIN=sarit
CI_RUNNER_REVISION=079aad9e
CI_CONFIG_PATH=.gitlab-ci.yml
CI_PROJECT_NAME=mhu_ped_oauth_provider
POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
SHLVL=2
CI_RUNNER_DESCRIPTION=MP OAuth Provider
CI_PROJECT_PATH=sarit/mhu_ped_oauth_provider
LOGNAME=gitlab-runner
XDG_RUNTIME_DIR=/run/user/999
GITLAB_USER_ID=39
CI_BUILD_BEFORE_SHA=e36e718d09f89095972ddf60ebf1fc1931282ae4
CI_BUILD_REF=9030892858b5ca92c7b36a81f573f187e6d14090
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
CI_PIPELINE_SOURCE=push
CI_PROJECT_NAMESPACE=sarit
CI_PROJECT_DIR=/home/gitlab-runner/builds/f304ea76/0/sarit/mhu_ped_oauth_provider
CI_JOB_STAGE=test
CI_BUILD_REF_SLUG=master
_=/usr/bin/env
$ python -V
Python 2.7.13

【问题讨论】:

  • 你是如何设置 gitlab-runner 的?如果您使用sudo 设置亚军,它将创建一个单独的gitlab-runner 帐户,因此将使用不同的用户环境。
  • 我有单独的gitlab-runner。但问题不存在。问题是当我让它运行python, pip, pyenv, ... 时,它返回找不到命令。
  • python, pip, pyenv 是否已全局安装?您是否尝试过成为gitlab-runner 并访问那里的命令?
  • @Rekovni 当然。我已经设置好了。这只是在以前的项目10.8.0 发生的10.7.0 没有这个问题。在最坏的情况下,我将使用 docker runner 而不是 shell runner

标签: shell gitlab gitlab-ci-runner


【解决方案1】:

我不确定这是否是最佳实践,但我直接通过此设置PATH,以便让gitlab-runner 使用与ssh 远程到服务器时相同的使用方式。但至少它有效。

variables:
    PATH: "/home/gitlab-runner/.pyenv/plugins/pyenv-virtualenv/shims:/home/gitlab-runner/.pyenv/shims:/home/gitlab-runner/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"

【讨论】:

    【解决方案2】:

    类似于直接在gitlab-ci中设置变量...

    job: 
      variables:
        MY_CUSTOM_VARIABLE:my_variable
    

    最好将环境文件放在项目的主目录中,例如文件 .ci/env。 在项目目录中(与.gitlab-ci.yml同级):

    $ mkdir .ci
    $ vi .ci/env
    

    然后,在.gitlab-ci.yml 中将文件复制到构建上下文中:

    before_script:
      - . .ci/env
    

    您可以在其中放置自定义或修改的变量,如下所示:

    任何自定义变量

    export MY_CUSTOM_VARIABLE=my_variable
    

    Pyenv 和 pipenv 上下文变量:

    export PYENV_ROOT="$HOME/.pyenv"
    export PATH=/home/gitlab-runner/.pyenv/shims:/home/gitlab-runner/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    export PIPENV_PYTHON="$PYENV_ROOT/shims/python"
    

    【讨论】:

    • 感谢您的回答。下次我会在新项目中尝试你的答案。
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2019-12-02
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多