我需要通过composer从Gitlab CI的公司命名空间安装一个私有包。
composer.json.
"repositories": [
{
"type": "git",
"url": "git@gitlab.com:namespace/package.git"
}
],
"require": {
"namespace/package": "dev-master",
}
在.gitlab.ci.yml
image: registry.gitlab.com/namespace/project:1.0.0
stages:
- deploy
.setup_ssh: &setup_ssh
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client zip unzip -y )'
- eval $(ssh-agent -s)
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pub
- echo "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_rsa
- ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
- ssh-keyscan $DEV_HOST >> ~/.ssh/known_hosts
- chmod 600 ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa.pub
- chmod 644 ~/.ssh/known_hosts
- ssh-add ~/.ssh/id_rsa
.setup_composer: &setup_composer
- composer i -n
deploy to dev:
stage: deploy
script:
- *setup_ssh
- *setup_composer
在私有包上安装composer i -n会崩溃。
克隆到裸存储库'/root/.composer/cache/vcs/git-gitlab.com-namespace-package.git'…远程:远程 : ========================================================================远程:remote:您正在寻找的项目找不到,或者您没有权限查看它。远程:远程 : ========================================================================远程:致命:无法从远程存储库读取。请确保您有正确的访问权限
我尝试在本地运行容器,并在容器内交互式地安装编写器依赖项。
-同步命名空间/包(dev-master fa27046)到缓存克隆失败,请输入您的GitLab凭据以访问私有仓库一个令牌将被创建并存储在"/root/.composer/auth.json"中,你的密码将永远不会被存储要撤销对该令牌的访问权限,可以访问https://gitlab.com/-/profile/personal_access_tokens
我配置了2FA。对于测试,我创建了一个令牌并尝试登录。
composer config --global gitlab-token.gitlab.com [token]
之后,一切正常。但问题是,这是我的私人令牌。
我如何登录到一个Gitlab CI容器?
找到了一个解决方案,很简单!
为了将主项目部署到服务器,我在设置中添加了公钥deploy keys。
因此,有必要在每个私有存储库的设置中启用此键,该存储库位于编写器中。json依赖性。
私有包Repo>设置在库比;部署密钥>私有访问的部署密钥>使(主项目关键字)
例如
https://docs.gitlab.com/ee/user/project/deploy_keys/how-to-enable-deploy-keys
可以输入验证。在composer.json旁边放上你的Gitlab Token。如果存在,Composer会自动使用它。有了它,您就可以在像CI部署这样的自动化过程中进行验证。也许可以创建一个特定于项目的Gitlab用户,该用户可以访问项目所需的所有内容——除此之外什么都没有。然后使用该用户的令牌。
查看auth的更多详细信息。json: https://getcomposer.org/doc/articles/authentication-for-private-packages.md