gitlab-ci 自动打包部署

使用gitlab-ci 完成持续集成和持续部署

安装gitlab-runner

1.添加yum仓库

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

2.安装指定版本

yum install gitlab-runner-12.9.0-1

向gitlab 注册gitlab-runner

gitlab-runner register

根据提示信息添加对应的值

项目仓库添加.gitlab-ci.yml

采用引用模板的方式实现,这样方便调试,对开发影响不大,不用每次改动都通知开发进行变更.gitlab-ci.yml 文件

在gitlab 项目下添加.gitlab-ci.yml 文件内容如下

include:
  - remote: 'http://xxx/test/ci-templates/raw/master/java.gitlab-ci.yml'

java.gitlab-ci.yml文件内容如下:

image: xxxx/xxx/maven-docker-kubectl:v0.0.1
include:
  - remote: 'http://xxxx/xxx/ci-templates/raw/master/java.gitlab-cd.yml'

stages:
  - rebase
  - build
  - deploy

variables:
  MAVEN_CLI_OPTS: "-s /usr/local/maven/conf/settings_v1.xml"
  MAVEN_OPTS: "-Dnexus-host=xxx.com -Dmaven.test.skip=true -DpushImage"
  MAVEN_TEST_OPTS: "-Dmaven.test.skip=true -DpushImage -Dskywalking.collector.backend_service=127.0.0.1:11800"
  DINGDING_TOKEN: "xxx"
  DINGDING_KEYWORKD: "."
  PROJECT_NAME: ${CI_PROJECT_NAME}
  GIT_BRANCH: "${CI_COMMIT_REF_NAME}"
  PROJECT_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}"
  VARIABLES_FILE: ./variables.txt

rebase:
  stage: rebase
  script:
    - git rebase origin/master || ( dingtalk ${DINGDING_TOKEN} ${DINGDING_KEYWORKD} "Git rebase 失败了" ${PROJECT_NAME} ${GIT_BRANCH} ${PROJECT_URL} ;exit -1)
  only:
    - /^feature.*$/i
    - /^fix.*$/i

test_build:
  stage: build
  script:
    - dirName=$(find cloud-* -type f -name "pom.xml"|awk -F'/' '{print $1}')
    - export appName=$(echo ${dirName}|tr '[A-Z]' '[a-z]')
    - echo "export appName=$appName" > $VARIABLES_FILE
    - export imageRepo="xxx.com/xxx/${appName}"
    - export imageName=$(echo ${imageRepo}|tr '[A-Z]' '[a-z]')
    - echo "export imageName=$imageName" >> $VARIABLES_FILE
    - export imageTag=${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}-$(date +%Y%m%d%H%M)
    - export imageTag=$(echo ${imageTag}|tr '[A-Z]' '[a-z]')
    - echo "export imageTag=$imageTag" >> $VARIABLES_FILE
    - cat $VARIABLES_FILE
    - cd ${dirName}
    - mvn clean package docker:build $MAVEN_TEST_OPTS -Dversion_tag=$imageTag
  artifacts:
    paths:
      - $VARIABLES_FILE
  except:
    - /^feature.*$/i
    - /^fix.*$/i

build:
  stage: build
  script:
    - dirName=$(find cloud-* -type f -name "pom.xml"|awk -F'/' '{print $1}')
    - export appName=$(echo ${dirName}|tr '[A-Z]' '[a-z]')
    - echo "export appName=$appName" > $VARIABLES_FILE
    - export imageRepo="xxx.com/xxx/${appName}"
    - export imageName=$(echo ${imageRepo}|tr '[A-Z]' '[a-z]')
    - echo "export imageName=$imageName" >> $VARIABLES_FILE
    - export imageTag=${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA:0:8}-$(date +%Y%m%d%H%M)
    - export imageTag=$(echo ${imageTag}|tr '[A-Z]' '[a-z]')
    - echo "export imageTag=$imageTag" >> $VARIABLES_FILE
    - cat $VARIABLES_FILE
    - cd ${dirName}
    - mvn $MAVEN_CLI_OPTS clean package docker:build $MAVEN_OPTS -Dversion_tag=$imageTag
  artifacts:
    paths:
      - $VARIABLES_FILE
  only:
    - /^feature.*$/i
    - /^fix.*$/i

 

java.gitalb-cd.yaml 文件内容如下:

test:
  stage: deploy
  script:
    - source $VARIABLES_FILE
    - echo "$appName $imageName $imageTag"
    - kubectl --kubeconfig=/.kube/config-dev -n test set image deploy/${appName} ${appName}=${imageName}:${imageTag}
  needs:
    - job: test_build
  when: manual
  except:
    - /^feature.*$/i
    - /^fix.*$/i



preline_deploy:
  stage: deploy
  script:
    - kubectl --kubeconfig=/.kube/config-pre -n test set image deploy/${appName} ${appName}=${imageName}:${imageTag}
  needs:
    - job: build
  when: manual
  only:
    - /^feature.*$/i
    - /^fix.*$/i
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值