我有一个名为groupname
的组,在该组中有一个名为projectname
的项目。该组有一个GitLab页面,可在http(s)://groupname.gitlab.io/
获得。
现在我想为这个项目创建一个GitLab页面,该页面应该在http(s)://groupname.gitlab.io/projectname
处可用。为了实现这一目标 - 据我从the docs了解 - gitlab-page-project需要在组下托管,其名称必须为projectname
。但那已经是页面引用的实际项目的名称了!
虽然我可以在不同的路径下托管项目 - 比如groupname/projectname-doc
- 并且仍然将其重命名为projectname
,但这会使两个项目在组的项目中显示相同的名称概述。我在这里遗漏了什么,或者这是在同一命名空间下托管项目及其GitLab页面的推荐方法吗?
答案 0 :(得分:1)
以下是我们对您的问题的评论中的讨论的后续行动。
首先生成SSH密钥对。您可以使用ssh-keygen -t rsa
。
然后为页面创建一个gitlab项目,让我们称之为projectname-docs
。在此项目中,找到Deploy Keys
设置。你应该粘贴你刚刚生成的公钥。
然后转到projectname
并找到Variables
页面。例如,创建一个名为SSH_PRIVATE_KEY
的新私有变量,并粘贴您在那里生成的私钥。
在.gitlab-ci.yml
项目的projectname
文件中,添加以下内容,以便您的私钥可供CI环境使用:
pages:
stage: deploy
script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- git clone git@gitlab.com:groupname/projectname-docs.git
- cd projectname-docs
- mkdir ~/.public
- cp -r * ~/.public
- cd ../
- mv ~/.public public
artifacts:
paths:
- public
此时,每次向主项目推送内容时,它都将拉出projectname-docs
项目并使用Gitlab页面进行部署。然后应该提供文档。
您可能需要的是,每次推送到projectname-docs
时都能够运行主项目的管道,以便更新网页。
执行此操作的一种方法是通过webhooks。
首先转到主项目的gitlab页面,然后转到Settings -> CI/CD Pipelines -> Triggers
并点击Add Trigger
按钮。这将创建一个我们稍后将使用的新令牌。
然后,转到projectname-docs
并导航至Settings -> Integrations
并为网址插入以下内容:
http://gitlab.com/api/v4/projects/ID/ref/REF_NAME/trigger/pipeline?token=TOKEN
其中ID
是projectname
的ID,REF_NAME
是运行管道的分支或标记的名称(例如master
)和TOKEN
}是您在上一步中生成的令牌。
确保选中push
事件并添加webhook。