Gitlab-ci 私有包安装失败

Gitlab-ci private package install fails

我正在使用 gitlab-ci (13.9) 来测试和构建一个 React 项目。

在分支 develop 上一切正常。

在分支 validation 上,构建作业无法安装私有包:

[2/5] Resolving packages...
error An unexpected error occurred: "https://registry.yarnpkg.com/@company%2fname-of-my-package: Not found".
info If you think this is a bug, please open a bug report with the information provided in "/builds/code/conference/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
error Command failed with exit code 1.

两个分支的.gitlab-ci.yml相同:

variables:
    DOCKER_DRIVER: overlay2
    GIT_SSL_NO_VERIFY: 'true'
    DOCKER_TLS_CERTDIR: ''

stages:
    - install
    - test
    - build

install_dependencies:
    image: node:lts-alpine
    stage: install
    before_script:
        - apk update && apk add git openssh-client
        - eval $(ssh-agent -s)
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
        - mkdir -p ~/.ssh && touch ~/.ssh/known_hosts
        - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
        - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'>.npmrc

    artifacts:
        expire_in: 1 hour
        paths:
            - node_modules/
    script:
        - yarn install

test-job:
    image: node:lts-alpine
    stage: test
    script:
        - yarn run test

build-job:
    image: node:lts-alpine
    stage: build
    only:
        - develop
        - validation
    artifacts:
        expire_in: 1 hour
        paths:
            - dist/
    script:
        - yarn run build

什么会导致失败?

我通过在我的构建作业中复制 ssh/npmrc 配置,设法让我的 CI 通过了分支验证:

variables:
    DOCKER_DRIVER: overlay2
    GIT_SSL_NO_VERIFY: 'true'
    DOCKER_TLS_CERTDIR: ''

stages:
    - install
    - test
    - build
    - docker-build-push

install_dependencies:
    image: node:lts-alpine
    stage: install
    before_script:
        - apk update && apk add git openssh-client
        # run ssh agent
        - eval $(ssh-agent -s)
        # add ssh key stored in gitlab ci variables
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
        - mkdir -p ~/.ssh && touch ~/.ssh/known_hosts
        - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
        - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'>.npmrc
    artifacts:
        expire_in: 1 hour
        paths:
            - node_modules/
            - .npmrc
    script:
        - yarn install

test-job:
    image: node:lts-alpine
    stage: test
    script:
        - yarn run test

build-job:
    image: node:lts-alpine
    stage: build
    only:
        - develop
        - validation
    artifacts:
        expire_in: 1 hour
        paths:
            - dist/
    before_script:
        - apk update && apk add git openssh-client
        # run ssh agent
        - eval $(ssh-agent -s)
        # add ssh key stored in gitlab ci variables
        - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
        - mkdir -p ~/.ssh && touch ~/.ssh/known_hosts
        - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
        - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'>.npmrc
    script:
        - yarn run build

docker-job:
    services:
        - docker:dind
    image: docker:18.09.9
    stage: docker-build-push
    only:
        - develop
        - validation
    before_script:
        - apk update && apk add git rsync curl jq
        - docker login -u gitlab-ci-token -p ${PUBLISH_KEY} registry.apizee.com
    script:
        - docker login -u gitlab-ci-token -p ${PUBLISH_KEY} registry.apizee.com
        - /bin/sh docker/init.sh
        - docker push registry.apizee.com/docker/apizee-rancher/conf4:${CI_COMMIT_REF_NAME}
        - '[[ -f "docker/deploy.sh" ]] && sh docker/deploy.sh "${CI_COMMIT_REF_NAME}"'

所以默认分支上可能有默认 cache/artifacts 设置,而其他分支上没有?