Gitlab CI runner shell grep无法拿到变量

我设置的变量有:

variables:
  IMAGE_ID: registry.xxx.xxx:5000/xxx/xxx
  DOCKER_LOCAL_PORT: 10000

这是我的job yml

docker_local:
  variables:
    GIT_STRATEGY: fetch
  stage: build
  when: manual
  before_script:
    - sudo systemctl restart docker
  script:
    - echo $IMAGE_ID
    - echo $DOCKER_LOCAL_PORT
    - docker ps | grep $IMAGE_ID
    - docker ps | grep $DOCKER_LOCAL_PORT
    - sudo chown -R gitlab-runner /home/gitlab-runner/
    - id=$(docker ps | grep $IMAGE_ID | grep $DOCKER_LOCAL_PORT | awk '{print $1}'); if [ $id ]; then docker kill $id && docker rm $id; fi
    - id=$(docker images | grep $IMAGE_ID | awk '{print $3}'); if [ $id ]; then sudo docker rmi --force $id; fi
    - mvn $MAVEN_CLI_OPTS clean package -Dmaven.test.skip=true
    - rm -rf ${CI_PROJECT_DIR}/docker-temp/
    - mkdir -p ${CI_PROJECT_DIR}/docker-temp/
    - cp ${CI_PROJECT_DIR}/target/*.war ${CI_PROJECT_DIR}/docker-temp/
    - cp ${CI_PROJECT_DIR}/Dockerfile ${CI_PROJECT_DIR}/docker-temp/
    - cd ${CI_PROJECT_DIR}/docker-temp/
    - docker build --no-cache --force-rm -t $IMAGE_ID:${CI_COMMIT_SHORT_SHA} ${CI_PROJECT_DIR}/docker-temp/
    - docker run -p $DOCKER_LOCAL_PORT:8080 -d $IMAGE_ID:${CI_COMMIT_SHORT_SHA}
  tags:
    - xxx

其中

- echo $IMAGE_ID
- echo $DOCKER_LOCAL_PORT
- docker ps | grep $IMAGE_ID
- docker ps | grep $DOCKER_LOCAL_PORT

这四行脚本是我为了测试单独写的, 目前是

- echo $IMAGE_ID
- echo $DOCKER_LOCAL_PORT

可输出正确的值
但一旦执行到

- docker ps | grep $IMAGE_ID
- docker ps | grep $DOCKER_LOCAL_PORT

时就会报错, 但具体原因不明.
报错截图(给项目关键字打码了)
image.png
目前gitlab-runner已经在docker组下了.
使用gitlab-runner账号连接服务器执行

docker ps | grep $IMAGE_ID
docker ps | grep $DOCKER_LOCAL_PORT

均可成功, 但以gitlab ci的方式执行便失败了.

阅读 2.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进