12 Dec 2019
.gitlab-ci.yml说明参考链接:.gitlab-ci.yml 官方文档 .gitlab-ci.yml是用于配置gitlab的pipeline,里面定义了
image: dind stages: - build - docker-build variables: DOCKER_HOST: unix:///var/run/docker.sock DOCKER_DRIVER: overlay2 MAVEN_OPTS: -Dmaven.repo.local=${CI_PROJECT_DIR}/.m2 before_script: - docker login -u user -p password private.docker-registry.net build: stage: build script: - mvn clean install ${MAVEN_OPTS} cache: paths: - ${CI_PROJECT_DIR}/.m2 artifacts: paths: - target expire_in: 1 day docker-build: stage: docker-build script: - docker build --cache-from private.docker-registry.net/web:latest -t private.docker-registry.net/web:${CI_COMMIT_SHA:0:6} -t private.docker-registry.net/web:latest . - docker push private.docker-registry.net/web:${CI_COMMIT_SHA:0:6} only: - master
注意点:
- 只有一个stage里面的所有job都执行完毕了,才会去执行下一个stage
- 同一个stage里面的job是同时被执行的
- only限定了只有master分支commit后才会触发pipeline的执行
CI_BUILDS_DIR,执行build的根目录,默认是/buildsCI_PROJECT_DIR,当前project的被clone到的目录,也就是默认你所有script执行命令运行的目录CI_COMMIT_SHA,commit的sha值script: >- curl -X POST -H "Content-Type:application/json" -H "Authorization: 认证字符串" -d "{\"extra_vars\": {\"role\": \"test_role\",\"project\": {\"version\": \"${CI_COMMIT_SHA:0:6}\",\"name\": \"project_name\"},\"host\": \"project_host\"}}" http://awx_domain/api/v2/job_templates/deploy_test/launch/
别问我为啥,我是尝试了很多形式才成功的,最终这样成功了 gitlab issues stackoverflow
另外一种简单方法
script: - msg='{"extra_vars": {"role": "test_role","project": {"version": "'${CI_COMMIT_SHA:0:6}'","name": "project_name"},"host":"project_host"}}' - > curl -X POST -H "Content-Type:application/json" -H "Authorization: 认证字符串" -d ${msg} http://awx_domain/api/v2/job_templates/deploy_test/launch/
注意msg变量不能用空格,curl命令的json格式里面都不要有空格
script: - echo ${rsyncpass} > ./rsyncpass && chmod 600 ./rsyncpass - for ip in ${rsync_dest_all}; do rsync -auvz --progress --no-o --no-g --no-p --delete --password-file=./rsyncpass --exclude="properties" --exclude="config.properties" --exclude="ftp.properties" --exclude="log4j.properties" ./demo/target/demo/* rsync@<ip>::<RSYNC_DEST_MOD_PREF>; done
失败的尝试是在rsync的多行命令末尾增加
\
通过设定GIT_STRATEGY,我们可以来给job设定不同的git策略
如果遇到需要复用的部分,可以使用anchors
.job_template: &java-project cache: paths: - ${PROJECT_CACHE} artifacts: paths: - ${PROJECT_ARTIFACTS} javaproject01: <<: *java-project varibles: PROJECT_CACHE: .m2 PROJECT_ARTIFACTS: ./target script: - test1 project javaproject02: <<: *java-project varibles: PROJECT_CACHE: .m2 PROJECT_ARTIFACTS: ./target script: - test2 project
如果遇到多个project复用的部分逻辑,可以使用include
# 多个project都需要同样的before_script # put it in https://gitlab.com/awesome-project/raw/master/.before-script-template.yml before_script: - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs - gem install bundler --no-document - bundle install --jobs $(nproc) "${FLAGS[@]}" # 在另外一个.gitlab-ci.yml中 include: - 'https://gitlab.com/awesome-project/raw/master/.before-script-template.yml' - '/templates/.after-script-template.yml' - template: Auto-DevOps.gitlab-ci.yml - project: 'my-group/my-project' ref: master file: '/templates/.gitlab-ci-template.yml'