npm - gitlab-ci:使用不同的 ssh key 将多个 gitlab 存储库安装为 npm 模块

标签 npm ssh gitlab gitlab-ci

我在 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 *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - cd app
    - npm install

这个效果很好。

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

我已将第二个环境变量 PROJECT_2_KEY 添加到变量部分。

我尝试过的事情:

使用ssh-add添加两个 key

  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 *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - cd app
    - npm install

构建单独的文件,每个部署 key 一个,并将它们添加到 .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_1\n\tHostName gitlab.com\n\tIdentityFile $HOME/.ssh/project_1" > ~/.ssh/config
    - echo -e "Host project_2\n\tHostName gitlab.com\n\tIdentityFile $HOME/.ssh/project_2" >> ~/.ssh/config
    - cd app
    - npm install

将两个 key 添加到同一个 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 需要私有(private) gitlab 存储库)。我无法让基于 SSH 的示例以我满意的方式工作,因此我选择利用使用自定义 url 作为已定义依赖项的引用的 Composer 设置。

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

"require": {
       "foo/bar": "dev-master",
...
"repositories": [
    {
        "type": "vcs",
        "url": "https://gitlab+deploy-token-1234:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8a9aaabe5acadaee5afa0a1a2a388afa1bca4a9aae6aba7a5" rel="noreferrer noopener nofollow">[email protected]</a>/path/to/repo.git"
    }
]

因此,鉴于 npm 上下文,您可以使用 dependencies关键字来定义使用包含要进行身份验证的 token 数据的 git url 的项目?

"dependencies" : {
  "foo/bar" : "https://gitlab+deploy-token-1234:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e3828180ce878685ce848b8a8988a3848a978f8281cd808c8e" rel="noreferrer noopener nofollow">[email protected]</a>/path/to/repo.git",
}

如果您不喜欢在提交的 package.json 中包含身份验证数据,您可以尝试忽略它并仅使用原始 git url。在构建过程中的某些项目中,我只是直接 git 克隆另一个私有(private)项目,并且构建过程似乎有权克隆而无需配置任何内容。 (我不完全确定构建过程被授权为“谁”,但大概是触发构建的用户?)

关于npm - gitlab-ci:使用不同的 ssh key 将多个 gitlab 存储库安装为 npm 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548786/

相关文章:

windows - 如何使用 ssh 将 git push 到远程 Windows 机器

linux - Visual Studio 2017 无法创建目录,mkdir 退出代码 : 1

javascript - nodejs + ssh2 + Node sh

Gitlab 提交消息

javascript - ESLint:可以自动修复 "react/sort-prop-types"错误吗?

javascript - 我如何使用 postinstall 编辑 package.json

node.js - 如何将一个 `npm run script.js` 的返回值作为参数传递给另一个 `npm run script2.js` ?

gitlab - 如何通过APIcurl向gitlab中的项目添加组?

git - 如何配置 GitLab 以允许所有用户共享组或全局命名空间?

css - 将 gulp-clean-css 添加到现有的 gulpfile.js