GitHub-ci:将多个 GitHubLab 存储库安装为具有不同 SSH 密钥的 npm 模块



我在gitlab上有一个项目,必须将另外两个gitlab项目安装为npm包。 当只有一个包时,我.gitlab-ci.yml设置如下:

stages:
    - lint
variables:
  PROJECT_1_KEY: $PROJECT_1_KEY
lint:
  stage: lint
  image: node-chrome:latest
  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # run ssh-agent
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$PROJECT_1_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config
    - cd app
    - npm install

这工作得很好。

但是,到目前为止,尝试添加需要自己的部署密钥的第二个项目尚未成功。

我在变量部分添加了第二个 env 变量PROJECT_2_KEY

我试过的事情:

使用 ssh-add 添加两个键

  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # run ssh-agent
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$PROJECT_1_KEY")
    - ssh-add <(echo "$PROJECT_2_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config
    - cd app
    - npm install

构建单独的文件,每个部署密钥一个文件,并将它们添加到.ssh/config文件中

  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # run ssh-agent
    - eval $(ssh-agent -s)
    - mkdir -p ~/.ssh
    - echo "$PROJECT_1_KEY" > ~/.ssh/project_1
    - echo "$PROJECT_2_KEY" > ~/.ssh/project_2
    - echo -e "Host project_1ntHostName gitlab.comntIdentityFile $HOME/.ssh/project_1" > ~/.ssh/config
    - echo -e "Host project_2ntHostName gitlab.comntIdentityFile $HOME/.ssh/project_2" >> ~/.ssh/config
    - cd app
    - npm install

将两个键添加到同一个id_rsa文件,并将 gitlab.com 添加到known_hosts

  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # run ssh-agent
    - eval $(ssh-agent -s)
    - mkdir -p ~/.ssh
    - echo "$PROJECT_1_KEY" >> ~/.ssh/id_rsa
    - echo "$PROJECT_2_KEY" >> ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - touch ~/.ssh/known_hosts
    - ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
    - cd app
    - npm install

我飞得有点瞎了。对于我正在尝试做的事情,是否有正确的技术?

我在不同的

上下文中进行了类似的战斗(PHP Composer需要私有的gitlab存储库(。我无法让基于 SSH 的示例以我满意的方式工作,所以我选择利用使用自定义 url 作为定义依赖项的参考的作曲家设置。

在PHP中,它看起来像这样:

"require": {
       "foo/bar": "dev-master",
...
"repositories": [
    {
        "type": "vcs",
        "url": "https://gitlab+deploy-token-1234:abc-def-ghijk@gitlab.com/path/to/repo.git"
    }
]

因此,给定 npm 上下文,是否可以使用 dependencies 关键字来定义使用包含要进行身份验证的令牌数据的 git url 的项目?

"dependencies" : {
  "foo/bar" : "https://gitlab+deploy-token-1234:abc-def-ghijk@gitlab.com/path/to/repo.git",
}

如果您不喜欢在提交的 package.json 中包含身份验证数据,您可以尝试省略它并只使用原始 git url。在构建过程中的某些项目中,我只是对另一个私有项目进行了直接的 git 克隆,并且似乎构建过程有权在不配置任何内容的情况下克隆。(我不完全确定构建过程是"谁",但大概是触发构建的用户?

最新更新