我在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
这很好。
但是,到目前为止,尝试添加需要其自己的部署密钥的第二个项目一直没有成功。
我在变量部分添加了第二个环境变量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 *\n\tStrictHostKeyChecking no\n\n" > ~/.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_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
将两个密钥都添加到同一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
我有点瞎了。我要做什么是正确的技术?
答案 0 :(得分:0)
我只是在不同的上下文中进行了类似的战斗(PHP Composer需要私有gitlab存储库)。我无法使基于SSH的示例以我满意的方式工作,因此我选择利用composer设置,该设置使用自定义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定义项目,该git url包含要认证的令牌数据吗?
"dependencies" : {
"foo/bar" : "https://gitlab+deploy-token-1234:abc-def-ghijk@gitlab.com/path/to/repo.git",
}
如果您不喜欢在已提交的package.json中包含身份验证数据,则可以尝试忽略它,而只使用原始git url。在构建过程中的某些项目中,我只是对另一个私有项目进行了直接git克隆,并且看起来构建过程有权克隆而无需进行任何配置。 (我不能完全确定构建过程的身份是谁,但是大概是触发构建的用户?)