如何在同一名称空间下托管项目及其GitLab页面?

时间:2017-04-11 20:04:47

标签: gitlab

我有一个名为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页面的推荐方法吗?

1 个答案:

答案 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项目并使用Gi​​tlab页面进行部署。然后应该提供文档。

设置webhook

您可能需要的是,每次推送到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

其中IDprojectname的ID,REF_NAME是运行管道的分支或标记的名称(例如master)和TOKEN }是您在上一步中生成的令牌。

确保选中push事件并添加webhook。