Skip to content

Instantly share code, notes, and snippets.

@sursir
Last active December 19, 2017 02:42
Show Gist options
  • Select an option

  • Save sursir/70e588900a4c922e03501d4c0f343eae to your computer and use it in GitHub Desktop.

Select an option

Save sursir/70e588900a4c922e03501d4c0f343eae to your computer and use it in GitHub Desktop.
gitlab-ci
# Select image from https://hub.docker.com/_/php/
image: ci/ci
# Select what we should cache between builds
cache:
key: ${CI_PROJECT_ID}
paths:
- vendor/
- composer.lock.prev
- .env
# Bring in any services we need http://docs.gitlab.com/ee/ci/docker/using_docker_images.html#what-is-a-service
# See http://docs.gitlab.com/ce/ci/services/README.html for examples.
#services:
# - mysql:5.7
# Set any variables we need
#variables:
# Configure mysql environment variables (https://hub.docker.com/r/_/mysql/)
# MYSQL_DATABASE: mysql_database
# MYSQL_ROOT_PASSWORD: mysql_strong_password
stages:
- integrated
- test
- package
- deploy
## stages entity:
integrated-demo:
stage: integrated
script:
- php -r 'echo "integrated PHP, JS, CSS and CONFIGURE\n";'
- ([[ -f composer.lock ]] || (echo 'Error! composer.lock dont exists ! ' && exit 1))
- (
if [[ ! -f composer.lock.prev || ! -d vendor || $(md5sum composer.lock.prev | awk '{print $1}') != $(md5sum composer.lock | awk '{print $1}') ]]; then
( composer install && cp -f composer.lock composer.lock.prev && echo 'installed depend' || (echo 'install depend failed, exit' && exit 1));
else
echo 'no install depend, use cached';
fi;
)
- echo 'integrated-demo finished'
# env
- php -r "file_exists('.env') || copy('.env.example', '.env');"
# 清除缓存 生成 key
- php artisan cache:clear
- php artisan key:generate
phpunit-demo:
stage: test
script:
- vendor/bin/phpunit --configuration ./phpunit.xml --coverage-text --colors=never
- php -r 'echo "hello, PHPUNIT\n";'
- php -r 'var_export(scandir(".")); echo "\n";'
- sleep 2
- php -r 'echo "PHPUNIT END\n";'
test-demo:
stage: test
script:
- echo "test demo"
ant:
stage: test
script:
echo 'ant'
# - ant
compression-demo:
stage: package
script:
- echo 'hello, COMPRESSION'
- tar -p --exclude='package.tar.gz' -cz -f ../package.tar.gz .
- mkdir deploy-packages
- mv ../package.tar.gz deploy-packages/
artifacts:
name: package-dir
paths:
- deploy-packages
deploy-dev:
stage: deploy
script:
- echo 'hello, deploy dev'
- pwd
- ls deploy-packages
# 执行外部脚本进行部署
- /extra/scripts/deploy.sh ./deploy-packages/package.tar.gz
- echo 'byebye, deploy dev'
only:
- master
environment:
name: dev
url: http://blog.hs.app:82
deploy-testing:
stage: deploy
script:
- echo 'hello, deploy testing'
- pwd
- ls deploy-packages
- echo 'byebye, deploy testing'
only:
- pre-product
environment:
name: testing
url: http://blog.hs.app:82
deploy-product:
stage: deploy
script:
- echo 'hello, deploy product'
- pwd
- ls deploy-packages
- echo 'byebye, deploy product'
only:
- product
when: manual
environment:
name: product
url: http://blog.hs.app:82

cache

可以用来缓存ci过程中生成的文件,以便重复使用

  1. 可以添加 key 字段来标志此次 cache,如果在缓存中找到此 keycache,那么将会被提取

  2. 缓存时在缓存卷中会自动以 $volumes_data_dir/_data/projectnamespace/projectname/$key/cache.zip 来作为文件目录

  3. key 还可以用环境变量(environment variable)来进行定义,这就意味着可以在不同阶段,不同环境上进行缓存(重要)

    如:

      CI_COMMIT_REF_SLUG
      CI_ENVIRONMENT_SLUG
      CI_COMMIT_SHA
      CI_PIPELINE_ID
      CI_PIPELINE_TRIGGERED
      CI_JOB_STAGE
      CI_JOB_NAME
    
  4. 应该只有在 docker 容器 挂载了 /cache 时才支持 cache (未验证)

  5. gitlab-ci docker 默认挂载了 /cache ,但是并没有指定宿主机目录,所以会挂载到 /var/lib/docker/volumes/$container_id

    那么默认情况下 cache 的完整目录是 /var/lib/docker/volumes/$container_id/_data/projectnamespace/projectname/$key/cache.zip

  6. 所以最好指定一个固定目录作为 /cache 挂载缓存,或者指定一个相对路径来挂载

artifacts

构建过程中生成的文件,默认存储位置

 /var/opt/gitlab/gitlab-rails/shared/artifacts
  1. script 命令可以用多行 但是必须要用 () 括号括起来,特殊以及复杂命令也要括起来。
  2. 可以 exit 1 非零退出,return 只能用在函数里
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment