我们将gitlab引入环境,并尝试使用gitlab CI创建一些CI CD管道。使用以下.gitlab-ci.yml,在运行一些maven目标,创建管道和归档工件方面,我取得了一些更好的进步。我试图在脚本无效后给标签。现在,我试图弄清楚如何将git标签自动化到我的源代码中。在master分支成功构建之后,我想为源代码创建标签。我们正在使用语义版本来标记我们的源代码。最后,每当master成功构建时,我都想为我的master分支创建一个标签。

image: maven:3.5-jdk-8-alpine

stages:
 - build
 - deploy
 - tag

maven_build:
  stage: build

  script:
   - mvn clean package
artifacts:
 paths:
 - target/*.jar

after_script:
   - ls -a
   - cd target && ls -a
   - git --version
   - git tag -a 1.0.15 -m "Version created by gitlab-ci Build"
   - git push origin 1.0.15
only:
  - master


日志:

Running after script...
$ ls -a
.
..
.git
.gitignore
.gitlab-ci.yml
 LICENSE
README.md
pom.xml
src
target
$ cd target && ls -a
.
..
apidocs
classes
generated-sources
generated-test-sources
javadoc-bundle-options
maven-archiver
maven-simple-0.2-SNAPSHOT-javadoc.jar
maven-simple-0.2-SNAPSHOT-sources.jar
maven-simple-0.2-SNAPSHOT.jar
maven-status
surefire-reports
test-classes
Uploading artifacts...
target/maven-simple-0.2-SNAPSHOT-javadoc.jar: found 1 matching files 
Uploading artifacts to coordinator... ok            id=60598296 
responseStatus=201 Created token=Gu-eH1es


求职成功

评论

请添加日志

附件是logs @ 030

#1 楼

我试图更改docker映像,并为git标签添加了几个步骤。以下是为我工作的答案,

image: maven

stages:
- build
- deploy
- tag

maven_build:
stage: build

  script:
   - mvn clean package
   artifacts:
  paths:
   - target/*.jar

  after_script:
   - ls -a
   - cd target && ls -a
   - git --version
   - git remote remove origin
   - git remote set-url origin https://"username:passwd"@gitlab.com/accountname/projectname
   - git tag -a 1.0.15 -m "Version created by gitlab-ci Build"
   - git push origin 1.0.15
  only:
    - master


评论


如果要将源设置为Gitlab访问令牌,请使用oauth2:$ {GITLAB_ACCESS_TOKEN}作为基本身份验证。

–过度杂交
18-10-24在10:04



我还要指出的是,您不需要删除源,只需git remote add api-origin https:// ...即可删除一行。稍后在git push api-origin 1.0.15中使用该新起点。

–过度杂交
18-10-24在10:05

我需要添加两行,git config user.email“ $ {GITLAB_USER_EMAIL}”和git config user.name“ $ {GITLAB_USER_NAME}”才能使其顺利推送。

–过度杂交
18-10-24在10:28

您还可以跳过git push命令中添加-o ci.skip的作业/管道执行

–尼古拉斯·皮平斯特(Nicolas Pepinster)
19年4月12日在8:58

#2 楼

git push origin 1.0.15应该可以工作,并且应该将新标签添加到gitlab中的标签中

https://docs.gitlab.com/ee/university/training/topics/tags.html


git checkout master

# Lightweight tag
git tag my_lightweight_tag

# Annotated tag
git tag -a v1.0 -m ‘Version 1.0’
git tag

git push origin --tags



评论


我认为奔跑者仅获得一个读取密钥来克隆回购,奔跑者将无法回退回购IIRC

–滕西拜
18年4月2日在18:42



有可能,但这未在日志中显示。 @pandey您可以发布完整的日志吗?

– 030
18年4月2日在18:51

@ 030 git命令在脚本后定义时不起作用...我需要创建为job1和job 2吗?

– Pandey
18-4-3在13:05



如果在docker映像中安装了git并且身份验证成功,则它应该可以工作。

– 030
18年4月3日在14:27

@ 030这通常不起作用,运行程序实际上通常仅具有对存储库的只读访问权限。日志中的错误如下所示:$ git push origin --tags \ nremote:不允许上传代码。

–肯·威廉姆斯
18年11月12日在19:29

#3 楼

结合https://devops.stackexchange.com/a/3854/10932的答案和Overbryd的评论以及稍作修改,对我来说很奏效。在这里,我没有使用git remote set-url命令,而是使用git remote add。
代码将如下所示:
image: maven

stages:
- build
- deploy
- tag

maven_build:
stage: build

  script:
   - mvn clean package
   artifacts:
  paths:
   - target/*.jar

  after_script:
   - ls -a
   - cd target && ls -a
   - git --version
   - git remote remove origin
   - git remote add origin https://"username:passwd"@gitlab.com/accountname/projectname.git
   - git config user.email "${GITLAB_USER_EMAIL}"
   - git config user.name "${GITLAB_USER_NAME}"
   - git tag -a 1.0.15 -m "Version created by gitlab-ci Build"
   - git push origin 1.0.15
  only:
    - master

都感谢。

评论


我们还可以使用Gitlab个人访问令牌,而不是直接使用Gitlab的用户名和密码。链接:docs.gitlab.com/ee/user/profile/personal_access_tokens.html

– Neron Joseph
20-10-2在19:23

#4 楼

我发现自己处在相同的情况下,在发布构件的构建之后,我想用版本号标签来标记提交。

我正在考虑的一种解决方案是创建服务(在GitLab内部或外部),能够将标签推送到任何存储库,但不能执行其他任何操作。该服务本身将具有允许其写入存储库的凭据,因此不需要授予每个项目构建对存储库的写访问权限。

我喜欢这种解决方案,因为GitLab似乎并不提供可以将标签推送到现有提交上的权限级别,而无需授予推送包含新内容的提交的功能。通用写访问权限比此用例所需的权限要多,因此,如果有的话,我们可能需要通过为每个有权创建该存储库的权限的用户创建用户或令牌来限制范围。然后,我们需要随着时间的推移来管理所有这些用户或令牌,这似乎很笨拙。