Pro*_*gni 20 git continuous-integration pipeline gitlab gitlab-ci
我正在尝试实施GitLab CI Pipelines来构建和部署Angular应用程序.在我们的项目中,我们有两个一般分支:( master仅限生产)和develop.为了开发,我们feature/some-feature从develop分支创建分支.当开发完成后,我们创建合并请求feature/some-feature到develop.当合并请求被批准并合并到develop分支时,我想运行管道以构建应用程序并在某些环境中部署构建.
我在.gitlab-ci.yml中使用以下设置:
image: node:7.5-configured
stages:
- build
- deploy
build_job:
stage: build
only:
- develop
script:
- /bin/bash <some script here>
...
Run Code Online (Sandbox Code Playgroud)
问题是每次我进入任何feature/some-feature分支时都会执行Pipeline .我的设置有什么问题?我怎样才能迫使管道被执行只有当推进行到develop直接分支?
解决方案
这是我的错误 - 我在develop分支和feature/some-feature分支中有两个不同的.gitlab-ci.yml文件.
小智 7
虽然在这个讨论上已经过去了很多时间,但我想提出一个意见,我大部分时间都在使用它。
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
when: on_success
changes:
- folder/some_folder/**/*
- if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "development"'
when: manual
changes:
- folder/some_other_folder/**/*
Run Code Online (Sandbox Code Playgroud)
这个结构解决了我的各种问题,希望对你有帮助!
问候。
这是我的错误 - 我在develop分支和feature/some-feature分支中有两个不同的.gitlab-ci.yml文件,这就是为所有分支执行Pipeline的原因.
如果需要,您还可以在全局级别定义规则而不是作业
这是一个例子
image: python:3.8
stages:
- test
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "development" || ($CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "development" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" ))
unit_test:
stage: test
services:
- postgres:13.4
before_script:
- export PYTHONPATH=$PWD
script:
- export AWS_DEFAULT_REGION=us-west-2
- python -c "import sys;print(sys.path)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18817 次 |
| 最近记录: |