Gitlab-CI如何在不同的管道中使用工件

时间:2017-08-21 03:43:33

标签: continuous-integration gitlab electron gitlab-ci gitlab-ci-runner

目前,我有两个主要项目。

1-)Vue Project包含(IOS和Android的网页浏览,网站和我们Electron的渲染器),他们正在共享组件& API' S。

2-)Electron Project为(windows,darwin,linux)构建桌面应用程序

我想自动化我们的建筑,发布过程。我当前的设置..

            before_script: 
                - apt-get update
                - apt-get install zip unzip 
                - rm -rf vue-project
                - git clone vue-project
                - cd vue-project
                - git checkout dev
                - git pull
                - sed -i "/\b\(areaCode\|inline-svg-loader\)\b/d" ./packages/devtool/package.json
                - yarn install
                - ln -s vue-project/packages/desktop/ web
                - npm install

            build_darwin:
                stage: build
                script:
                    - npm run package -- darwin --deploy
                cache:
                    paths:
                        - vue-project/node_modules
                        - node_modules

基本上在捆绑电子项目之前它克隆了vue-project安装依赖项并捆绑了电子渲染器然后它完成了。我正在运行包裹。

我想将这两个不同的工作分开。无论如何我可以使用来自不同项目gitlab-CI管道的工件吗?

任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

Gitlab有API用于做很多技巧。

curl --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test"

将其下载为文件。

curl --header "PRIVATE-TOKEN: YOURPRIVATETOKEN" -o artifacts.zip "http://gitlab.example.net/api/v4/projects/<projectnumber>/jobs/artifacts/master/download?job=build_desktop

答案 1 :(得分:0)

Gitlab当然可以支持这一点。为此,请按照下列步骤操作:

工件生成

在Vue项目中,修改您感兴趣的工作以存储与Electron项目相关的工件。每个作业的工件都使用Gitlab Job Artifacts符号定义,并在作业完成时上传到Gitlab,并与您的 Project Branch Job相关联地存储

注意:分支经常被忽略,当您要检索工件时,分支很重要,稍后会对此进行更多介绍。

说明:

Vue Project .gitlab_ci.yml

stages:
- stage1
- ...

vue-job1:
  stage: stage1
  script:
    - echo "vue-job1 artifact1" > ./artifact1
    - echo "vue-job1 artifact2" > ./artifact2
  artifacts:
    when: always
    paths:
    - ./artifact1
    - ./artifact2
    expire_in: 90 days

vue-job2:
  stage: stage1
  script:
    # error, would overwrite job1's artifacts since working
    # directory is a global space shared by all pipeline jobs
    # - echo "vue-job2 artifact1" > ./artifact1
    - echo "vue-job2 artifact1" > ./artifact3
  artifacts:
    when: always
    paths:
    - ./artifact3
    expire_in: 90 days

上面生成的工件被写入工作目录,该目录是项目存储库的副本。因此,请注意文件名冲突。为了安全起见,将工件放置在子目录中(例如:cat“ foo”> ./subdir/artifact),并以相同的方式在路径中引用它们(路径:-./subdir/artifact)。您可以在脚本中使用“ ls”来查看工作目录。

作业完成后,可以使用Gitlab UI确认存储在Gitlb中的工件。查看作业输出,然后使用右侧面板上“作业工件”下的“浏览”按钮。

工件检索

在您的Electron项目中,使用Gitlab Job Artifacts API curl 修改您感兴趣的作业以检索存储在Vue项目中的工件。为了访问Vue工件,您将需要在其下创建工件的Vue Project Branch Job

项目:对于项目,请使用Gitlab UI项目详细信息屏幕中显示的项目ID

分支:通常为 master ,但取决于您的管道执行的分支。尽管这与您的问题无关,但如果要在同一管道的各个执行之间生成和使用工件,请对分支使用Gitlab变量 $ CI_COMMIT_BRANCH

工作:通常为项目生成工件的工作名称。但是,如果您需要由特定Job生成的工件,则使用 Job Number 和相应的检索API。

说明:

Electron Project .gitlab_ci.yml

stages:
- stage1
- ...

electron-job1:
  stage: stage1
  script:
  - curl -o ./artifact1 -H "PRIVATE-TOKEN:$TOKEN" https://gitlab.example.com/api/v4/projects/$VUE_PROJECT_ID/jobs/artifacts/$BRANCH/raw/artifact1?job=vue-job1
  - curl -o ./artifact2 -H "PRIVATE-TOKEN:$TOKEN" https://gitlab.example.com/api/v4/projects/$VUE_PROJECT_ID/jobs/artifacts/$BRANCH/raw/artifact2?job=vue-job1
  - curl -o ./artifact3 -H "PRIVATE-TOKEN:$TOKEN" https://gitlab.example.com/api/v4/projects/$VUE_PROJECT_ID/jobs/artifacts/$BRANCH/raw/artifact3?job=vue-job2

此脚本将工件分别检索到Electron Project的工作目录。还有一些选项可以将您的工作中的所有工件作为zip存档一次检索。

其他

尽管这不是问题所在,但值得注意的是,您可以在单个管道执行的生命周期内使用工件,以在作业之间传递信息。您还可以使用它在同一项目中的管道执行之间传递信息。