跳到内容

在 GitLab 上托管

  • 添加并提交所有内容

    $ git add -A && git commit -am "shard complete"
    
  • 在 GitLab 上创建一个项目,名称和描述与您在 shard.yml 中指定的相同。

  • 添加远程仓库: (请务必将 <YOUR-GITLAB-USERNAME><YOUR-REPOSITORY-NAME> 替换为您的实际值)

    $ git remote add origin https://gitlab.com/<YOUR-GITLAB-USERNAME>/<YOUR-REPOSITORY-NAME>.git
    

    或者如果您使用 SSH

    $ git remote add origin [email protected]:<YOUR-GITLAB-USERNAME>/<YOUR-REPOSITORY-NAME>.git
    
  • 推送

    $ git push origin master
    

管道

接下来,让我们设置一个 GitLab 管道,它可以在我们向仓库推送代码时运行测试并构建/部署文档。

简单来说,您只需将以下文件添加到仓库的根目录,并将其命名为 .gitlab-ci.yml

image: "crystallang/crystal:latest"

before_script:
  - shards install

cache:
  paths:
  - lib/

spec & format:
  script:
  - crystal spec
  - crystal tool format --check

pages:
  stage: deploy
  script:
  - crystal docs -o public src/palindrome-example.cr
  artifacts:
    paths:
    - public
  only:
  - master

这将创建两个作业。第一个作业名为“spec & format”(您可以使用任何名称),默认情况下位于管道的“test”阶段。它只是在由 image 指定的 Docker 容器的新实例上运行 script 中的命令数组。您可能希望将该容器锁定到您正在使用的 Crystal 版本(在您的 shard.yml 中指定),但在此示例中,我们将只使用 latest 标签。

管道的“test”阶段将通过(数组的每个元素都返回一个健康的退出代码)或失败(其中一个元素返回一个错误)。

如果通过,则管道将继续执行我们在此定义的第二个作业,该作业 必须命名为 “pages”。这是一个专门用于将内容部署到您的 Gitlab Pages 站点的作业!它在测试通过后执行,因为我们指定它应该在“deploy”阶段发生。它再次运行 script 中的命令(这次构建文档),但这次我们告诉它将 public 路径(我们在其中存放了文档)保留为作业的工件。

将此作业命名为 pages,并将我们的文档放在 public 目录中,并将其指定为 artifact 的结果是,GitLab 将将该目录中的站点部署到默认 URL https://<YOUR-GITLAB-USERNAME>.gitlab.io/<YOUR-REPOSITORY-NAME>

文件中 before_scriptcache 键用于在每个作业中运行相同的脚本 (shards install) 以及保留创建的文件 (cache)。如果您没有依赖项,它们不是必需的。

如果您将上述文件提交到您的项目并推送,您将触发新的管道的第一次运行。

$ git add -A && git commit -am 'Add .gitlab-ci.yml' && git push origin master

一些徽章

在管道运行时,让我们在项目中添加一些徽章来展示我们的文档以及(希望)成功的管道状态。(您可能想阅读 徽章文档)。

徽章只是一个带图像的链接。所以让我们创建一个链接到我们的管道,并从 Gitlab 管道徽章 API 获取徽章图像。

通用设置的徽章部分,我们首先添加一个发布徽章。链接是:https://gitlab.com/<YOUR-GITLAB-USERNAME>/<YOUR-REPOSITORY-NAME>/pipelines徽章图片 URL 是:https://gitlab.com/<YOUR-GITLAB-USERNAME>/<YOUR-REPOSITORY-NAME>/badges/master/pipeline.svg

现在,如果管道已完成,我们将拥有文档,并且可以使用 shields.io 的通用徽章链接到它们。

  • 链接:https://<YOUR-GITLAB-USERNAME>.gitlab.io/<YOUR-REPOSITORY-NAME>
  • 图像:https://img.shields.io/badge/docs-available-brightgreen.svg

发布

发布只是您历史记录中的一个特殊提交,带有名称(请参阅 标记)。

根据 Crystal Shards README

当从 Git 仓库安装库时,预计该仓库具有版本标记,这些标记遵循类似 semver 的格式,以 v 为前缀。例如:v1.2.3、v2.0.0-rc1 或 v2017.04.1

GitLab 还具有一个 发布功能,它允许您将文件和描述与该标记关联起来。这样,您可以(例如)分发二进制文件。

正如您从 发布文档 中看到的那样,您可以在 UI 中创建一个带注释的标记以及发布说明/文件

gitlab new tags UI

或者您也可以从命令行创建标记,如下所示

$ git tag -a v0.1.0 -m "Release v0.1.0"

将其推送到远程仓库

$ git push origin master --follow-tags

然后使用 UI 添加/编辑发布说明并附加文件。

最佳实践

发布徽章

如果您愿意,您还可以为发布添加一个 shields.io 徽章。GitLab 并不完全支持这种功能,而且在有人为 shields.io 添加 gitlab 版本徽章 之前,我们必须直接在 URL 中编码版本号。

  • 链接:https://img.shields.io/badge/release-<VERSION>-brightgreen.svg
  • 图像:https://img.shields.io/badge/release-<VERSION>-brightgreen.svg

其中 <VERSION> 是版本号,以 v 为前缀,如:v0.1.0

镜像到 GitHub

GitHub 上的项目通常有更多的曝光度,并且与其他服务的集成度更高,因此,如果您希望您的库也在那里托管,您可以从 GitLab 设置到 GitHub 的“推送镜像”。

  1. 在 GitHub 上创建一个与您的项目同名的仓库。
  2. 按照此处的说明操作: https://docs.gitlab.com/ee/workflow/repository_mirroring.html#setting-up-a-push-mirror-from-gitlab-to-github-core
  3. 编辑您的 GitHub 描述。您可以使用以下内容
    • 描述:正反读都一样的单词。这是
    • 链接:https://gitlab.com/<YOUR-GITLAB-USERNAME>/<YOUR-REPOSITORY-NAME>/

这是一个推送镜像,这意味着更改只会单向传播。因此,请务必让潜在的合作者知道,拉取请求和问题应该提交到您的 GitLab 项目。