我在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 克隆,并且似乎构建过程有权在不配置任何内容的情况下克隆。(我不完全确定构建过程是"谁",但大概是触发构建的用户?