gitlab ci 中有没有办法创建类似函数的东西?我希望阶段中没有重复的代码,或者我应该使用外部脚本来完成这样的任务吗?
我查看了 gitlab 模板,但是使用模板我只能使用模板中的作业一次。
stages:
- build-artefakts
- build-image
variables:
CI_REGISTRY_NAMESPACE: 'main'
CI_BASE_IMAGE: '...'
1_GROUP_ID: '...'
1_ARTIFACT_ID: '...'
1_CLASSIFIER: '...'
1_JAR_NAME: '...'
1_IMAGE_NAME: '...'
2_GROUP_ID: '...'
2_ARTIFACT_ID: '...'
2_CLASSIFIER: '...'
2_JAR_NAME: '...'
2_IMAGE_NAME: '...'
deploy-maven:
image: maven:3.6-jdk-11
stage: build-artefakts
script:
- 'mvn deploy -f pom.xml -s ~config/maven/ci_settings.xml -P prod'
only:
- master
artifacts:
paths:
- ./target
expire_in: 1 weeks
deploy-docker-1:
image: $CI_BASE_IMAGE
stage: build-image
variables:
ARTIFACT_ID: $1_ARTIFACT_ID
JAR_NAME: $1_JAR_NAME
IMAGE_NAME: $1_IMAGE_NAME
before_script:
- 'docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_TOKEN $CI_REGISTRY'
script:
- 'cd docker'
- 'mv ../target/$ARTIFACT_ID/*.jar $JAR_NAME'
- 'docker build . -t $IMAGE_NAME:$PROJECT_VERSION --build-arg JAR_FILE=$JAR_NAME'
- 'docker tag $IMAGE_NAME:$PROJECT_VERSION $CI_REGISTRY/$CI_REGISTRY_NAMESPACE/$IMAGE_NAME:$PROJECT_VERSION'
- 'docker push $CI_REGISTRY/$CI_REGISTRY_NAMESPACE/$IMAGE_NAME:$PROJECT_VERSION'
deploy-docker-2:
image: $CI_BASE_IMAGE
stage: build-image
variables:
ARTIFACT_ID: $2_ARTIFACT_ID
JAR_NAME: $2_JAR_NAME
IMAGE_NAME: $2_IMAGE_NAME
before_script:
- 'docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_TOKEN $CI_REGISTRY'
script:
- 'cd docker'
- 'mv ../target/$ARTIFACT_ID/*.jar $JAR_NAME'
- 'docker build . -t $IMAGE_NAME:$PROJECT_VERSION --build-arg JAR_FILE=$JAR_NAME'
- 'docker tag $IMAGE_NAME:$PROJECT_VERSION $CI_REGISTRY/$CI_REGISTRY_NAMESPACE/$IMAGE_NAME:$PROJECT_VERSION'
- 'docker push $CI_REGISTRY/$CI_REGISTRY_NAMESPACE/$IMAGE_NAME:$PROJECT_VERSION'
Run Code Online (Sandbox Code Playgroud)
Jak*_*kow 10
您可以在“脚本”部分中使用YAML 锚点:
.some-script: &some-script
- echo "executed script"
.some-other-script: &some-other-script
- echo "executed other script"
first_job:
script:
- *some-script
second_job:
script:
- *some-other-script
Run Code Online (Sandbox Code Playgroud)
从 GitLab 13.9 开始,您还可以使用自定义 YAML 标签!reference
:
.some-script:
script:
- echo "executed script"
.some-other-script:
script:
- echo "executed other script"
first_job:
script:
- !reference [.some-script, script]
second_job:
script:
- !reference [.some-other-script, script]
Run Code Online (Sandbox Code Playgroud)
两种方法之间的区别在于 YAML 锚点不能跨包含的 YAML 文件使用。另一方面,引用的标签可以在包含的 YAML 文件中使用。
归档时间: |
|
查看次数: |
3005 次 |
最近记录: |