按文件gitlab-CI通过CI亚军

问题描述 投票:13回答:4

我使用gitlab CI转轮来测试我的代码,并生成一些文件。我只是想推生成的文件通过CI转轮gitlab库。有没有办法做到这一点?

gitlab gitlab-ci gitlab-ci-runner
4个回答
15
投票

我已经这样做解决了这个问题:

  1. 生成API范围新gitlab访问令牌:User Settings > Access Tokens
  2. 添加一个受保护的CI变量与新的令牌项目设置:Your project > Settings > Secret variable

- >编辑:如果你想混帐推到非保护的分支没有设置亚军变量保护

然后你可以使用此令牌,而不是在你的默认gitlab慈脚本。例如 :

before_script:
  - git remote set-url origin https://USERNAME:${CI_PUSH_TOKEN}@gitlab.com/your-project.git
  - git config --global user.email 'your@email.com'
  - git config --global user.name 'yourname'

...

- git checkout -B branch
- change files
- git commit -m '[skip ci] commit from CI runner'
- git push --follow-tags origin branch

8
投票

生成gitlab一个SSH密钥

- >配置文件设置 - > SSH密钥 - >生成它

生成的gitlab变量命名SSH的SSH密钥库后

- >项目设置 - >变量 - >添加变量

在.gitlab-ci.yml添加下面的线。

before_script:
   - mkdir -p ~/.ssh
   - echo "$SSH" | tr -d '\r' > ~/.ssh/id_rsa
   - chmod 600 ~/.ssh/id_rsa
   - ssh-keyscan -H 'Git_Domain' >> ~/.ssh/known_hosts 

在此之后,文件推到仓库使用下面的js代码这一点。

var child_process = require("child_process");
child_process.execSync("git checkout -B 'Your_Branch'");
child_process.execSync("git remote set-url origin Your_Repository_Git_Url");
child_process.execSync("git config --global user.email 'Your_Email_ID'");
child_process.execSync("git config --global user.name 'Your_User_Name'");
for (var i=0;i<filesToBeAdded.length;i++) {
          child_process.execSync("git add "+filesToBeAdded[i]);
}   
var ciLog = child_process.execSync("git commit -m '[skip ci]Automated commit for CI'");
var pushLog = child_process.execSync("git push origin Your_Branch");

[跳过Cl]在提交消息是最重要的。否则,它会启动CI过程的无限循环。


2
投票

你可以使用SSH当然键,但你也可以提供用户名和密码的秘密变量(与写访问用户),并使用它们。

例:

before_script:
 - git remote set-url origin https://$GIT_CI_USER:$GIT_CI_PASS@gitlab.com/$CI_PROJECT_PATH.git
 - git config --global user.email 'myuser@mydomain.com'
 - git config --global user.name 'MyUser'

你必须定义GIT_CI_USERGIT_CI_PASS作为秘密变量(你总是可以为此创建了专门的用户)。

有了这个配置,你可以正常使用Git工作。我使用这种方式发布后推标签(与公理发布摇篮Pluing - http://axion-release-plugin.readthedocs.io/en/latest/index.html

例如解除作业:

release:
  stage: release
  script:
    - git branch
    - gradle release -Prelease.disableChecks -Prelease.pushTagsOnly
    - git push --tags
  only:
   - master

1
投票

您正在寻找的功能被称为文物。文物是被连接到一个构建时,他们是成功的文件。

为了能够把这个在您的.gitlab-ci.yml的神器:

artifacts:
  paths:
    - dir/
    - singlefile

这将上传dir目录和文件singlefile回GitLab。


推荐问答