必备知识
- 了解 CI/CD 本身
- GitLab的基本使用(开户、创建仓库等)
- Git 基础知识
什么是 GitLab CI/CD
它是 GitLab 中内置的 CI/CD 工具。
优点是无需引入第三方工具或库即可使用。
- 适用于 Saas 和本地
- 可读性高,因为管道处理可以在 yml 文件中定义
- 容器可以用作执行环境
等等
与其他 CI 工具的比较
*货币成本视使用情况而定,此处不再赘述。
| 工具 | 介绍费用 | 如何定义工作 |
|---|---|---|
| 詹金斯 | 高的 (因为你需要准备一个服务器来运行Jenkins) |
Jenkinsfile(你自己的 UDL) |
| 圈子CI | 期间~ (不需要服务器,但需要与 Github 配合使用) |
yml |
| Github 操作 | 低的 |
yml |
| GitLab CI/CD | 低的 |
yml |
我认为引入成本将是 Jenkins > CircleCI > GithubActions = GitLabCI/CD。
另外,与其他工具不同,Jenkins 用自己的符号定义了流水线处理,因此学习成本略高。
考虑到引入成本和学习成本,截至 2022 年,似乎没有理由采用 Jenkins 作为 CI 工具。
此外,CircleCI 需要时间与 Github 和 GibLab 合作。
(两者都只是初始成本,所以可能在可接受的范围内……)
作为 CI 工具,GitHubActions 和 GitLabCI/CD 被认为是强大的。
如果你使用 Github,你将使用前者,如果你使用 GitLab,你将使用后者。
(当我简单地谈到两家公司时,并没有太大区别。没有“我从 GitHub 切换到 GitLab,因为 GitLabCI/CD 更好”之类的东西。
似乎没有必要考虑。 (反之亦然))
亚搏体育app亚军
需要一个名为 GitLab Runner 的执行环境来执行管道处理。
可以在自己的服务器上安装Runner,但是这次GitLab已经准备好了
使用环境。即使您不更改设置也没有问题。
.gitlab-ci.yml
在存储库的根目录中创建一个名为 .gitlab-ci.yml 的文件来定义您的作业。
如果您在根目录之外创建它,它将不会被读取。
另外,请注意 .gitlab-ci.yml 很容易变得臃肿,因为在一个存储库中只能创建一个 .gitlab-ci.yml。
(解决方案将单独介绍。)
实际运行(最低配置)
现在让我们创建实际的作业。
推送后运行作业
默认情况下,该作业将在您推送时运行。
# ジョブの名前
build-job:
# ジョブのステージ
stage: build
# 実行する処理をscript句に配列形式で定義
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
# 複数行の処理を定義することも可能
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
让我们定义一个作业并将其推送到远程存储库。
您可以从 GitLab 的 CI/CD > Pipelines 查看管道的执行结果。
你已经成功地做到了。
提交合并请求时运行作业
接下来,将作业更改为在创建合并请求(Github 中的拉取请求)以及推送时运行。
什么都可以执行,所以这次我们改一下test-job1。
# 変更箇所のみ記載
test-job1:
stage: test
script:
- echo "This job tests something"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
您可以使用规则语法来定义执行作业的条件。
这次它将在创建合并请求时执行。
合并后运行作业
我希望作业在上次更改合并到主分支时运行。
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
# mainブランチにコミットされた時にジョブを実行する
rules:
- if: $CI_COMMIT_BRANCH == 'main'
推送您的更改并创建合并请求⇒ 合并。
您可以看到 test-job2 正在运行。
我能够让管道正常工作。
从下一次开始,我们将组织高级工作创建的语法和程序。
参考
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308632016.html