Nec*_*ttn 5 continuous-integration gitlab gitlab-ci gitlab-ci-runner electron
目前,我有两个主要项目。
1-) Vue 项目,其中包含(IOS 和 Android 的 webviews、网站和我们 Electron 的渲染器),它们共享组件和 API。
2-) 为(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
Run Code Online (Sandbox Code Playgroud)
基本上在捆绑电子项目之前,它会克隆 vue-project 安装依赖项并捆绑电子渲染器,然后在完成时。我正在运行包。
我想将这两个不同的工作分开。无论如何我可以使用来自不同项目 gitlab-CI 管道的工件吗?
任何帮助将不胜感激。
Bil*_*ale 11
Gitlab 当然可以支持这一点。为此,请按照下列步骤操作:
神器生成
在您的 Vue 项目中,修改您感兴趣的作业以存储与 Electron 项目相关的工件。每个作业的工件都使用Gitlab 作业工件符号进行定义,并在作业完成时上传到 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
Run Code Online (Sandbox Code Playgroud)
上面生成的工件将写入工作目录,该目录是项目存储库的克隆。因此要小心文件名冲突。为了安全起见,请将您的工件放在子目录中(例如:cat“foo”> ./subdir/artifact)并以相同的方式在路径中引用它们(路径:-./subdir/artifact)。您可以在脚本中使用“ls”来查看工作目录。
作业完成后,您可以使用 Gitlab UI 确认存储在 Gitlb 中的工件。查看作业输出,然后使用右侧面板上作业工件下的浏览按钮。
文物检索
在您的 Electron 项目中,修改您感兴趣的作业,以使用Gitlab 作业工件 API和curl检索存储在 Vue 项目中的工件。为了访问 Vue 工件,您将需要在其下创建工件的Vue Project、Branch和Job 。
项目:对于项目,请使用Gitlab UI 项目详细信息屏幕中显示的项目 ID 。
分支:通常是 master,但取决于管道执行的分支。尽管这与您的问题无关,但如果您在同一管道的执行中生成和使用工件,请使用分支的Gitlab 变量$CI_COMMIT_BRANCH 。
作业:通常是为您的项目生成工件的作业名称。但如果您需要特定作业生成的工件,请使用作业编号和相应的检索 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
Run Code Online (Sandbox Code Playgroud)
该脚本将工件单独检索到 Electron 项目的工作目录中。还可以选择以 zip 存档的形式一次性检索作业的所有工件。
各种各样的
尽管这不是所提出的问题,但值得注意的是,您可以在单个管道执行的生命周期内使用工件在作业之间传递信息。您还可以使用它在同一项目内的管道执行之间传递信息。
Gitlab 有一个API可以做很多技巧。
curl --header "PRIVATE-TOKEN: YOURPRIVATETOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test"
Run Code Online (Sandbox Code Playgroud)
将其作为文件下载。
curl --header "PRIVATE-TOKEN: YOURPRIVATETOKEN" -o artifacts.zip "http://gitlab.example.net/api/v4/projects/<projectnumber>/jobs/artifacts/master/download?job=build_desktop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6625 次 |
| 最近记录: |