在正常情况下,如何通过带有提交ID的webhook触发Gitlab CI管道?

时间:2020-04-13 21:53:27

标签: gitlab gitlab-ci gitlab-ci-runner gitlab-ce

我有Gitlab CI管道,该管道由具有当前和最后提交ID的bitbucket Webhook触发。我还想在由webhook触发的构建创建的Gitlab CI文件无法正常工作时手动重新运行管道。 我尝试了RUN-PIPELINE选项,但显示错误:

该表单包含以下错误: 此管道没有阶段/职位。enter image description here

这是GitLab CI文件。包含是指其他项目,其中保留了管道的标准yaml文件:

include:
- project: Path/to/project
  ref: bb-deployment
  file: /bitbucket-deployment.yaml
variables:
  TILLER_NAMESPACE: <namespace>
  NAMESPACE: testenv
  REPO_REF: testenvbranch
  LastCommitSHA: <commit sha from webhook>
  CurrentCommitSHA: <Current commit she from webhook>

这是其他项目的详细gitlab-ci文件,该文件具有以下阶段:

stages:
  - pipeline
  - build

variables:
    ORG: test
    APP_NAME: $CI_PROJECT_NAME

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIIVATE_KEY2" | tr -d '\r' | ssh-add -
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts


Building CI Script:
  stage: pipeline
  image: python:3.6
  only:
    refs:
      - master
  script:
    - |
      curl https://github.com/org/scripts/branch/install.sh | bash -s latest
      source /usr/local/bin/pipeline-variables.sh
      git clone git@bitbucket.org:$ORG/$APP_NAME.git
      cd $APP_NAME
      git checkout $lastCommit
      cp -r env old
      git checkout $bitbucketCommit
      $CMD_DIFF old env
      $CMD_BUILD
      $CMD_INSTALL updatedReposList.yaml deletedReposList.yaml /tmp/test $NAMESPACE $REPO_REF $ORG $APP_NAME $lastCommit $bitbucketCommit
      cat cicd.yaml
      mv cicd.yaml ..

  artifacts:
    paths:
      - cicd.yaml

Deplopying Apps:
  stage: build
  only:
    refs:
      - master
  trigger:
    include:
      artifact: cicd.yaml
      job: Building CI Script
    strategy: depend

在手动触发器中,它应该重新构建应用程序,而不是考虑她的最新提交和最新提交。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢您的评论(如下),我看到您在一个include中使用.gitlab-ci.yml指令(https://docs.gitlab.com/ce/ci/yaml/#include)来包含来自另一个项目的GitLab CI YAML文件。 / p>

我可以通过在项目2上将GitLab CI YAML限制为{{时,在项目1上配置为包括项目2的GitLab CI YAML。 1}}分支,但是我正在另一个分支上运行项目。

例如,假设项目1被称为“ stackoverflow-test”,而其master为:

.gitlab-ci.yml

项目2被称为“测试”(在我自己的命名空间include: - project: atsaloli/test file: /.gitlab-ci.yml ref: mybranch 中),其atsaloli为:

.gitlab-ci.yml

如果在项目1的GitLab UI中的“ master”以外的分支上选择“运行管道”,则会收到错误消息“该管道没有阶段/作业”。

那是因为没有为我的非master分支定义任何工作,然后没有定义任何工作,所以我没有定义任何阶段。

我希望能为您的网络挂钩带来一些启发。