d8657661247c76c57a2c5eed9b084a2b.png
随着微服务的火热,传统的手动部署服务已经渐渐的无法满足实际工程需求,当一个项目按模块拆分成10个的时候,使用ci-自动集成模式就能完美的解决这一问题。

本文主要介绍gitlab+gitlab-runner搭建git私服+持续集成环境。

  • 准备一台电脑pc或者liunx
  • 安装docker
  • 通过docker-compose直接部署gitlab服务,docker-compose up
version: '2'

services:
  redis:
    restart: always
    image: sameersbn/redis:4.0.9-2
    volumes:
      - redis-data:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:10-2
    volumes:
      - postgresql-data:/var/lib/postgresql:Z
    environment:
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production
      - DB_EXTENSION=pg_trgm

  gitlab:
    restart: always
    image: sameersbn/gitlab:12.3.5
    depends_on:
      - redis
      - postgresql
    ports:
      - "10080:80"
      - "10022:22"
    volumes:
      - gitlab-data:/home/git/data:Z
    environment:
      - DEBUG=false

      - DB_ADAPTER=postgresql
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=gitlab
      - DB_PASS=password
      - DB_NAME=gitlabhq_production

      - REDIS_HOST=redis
      - REDIS_PORT=6379

      - TZ=Asia/Kolkata
      - GITLAB_TIMEZONE=Kolkata

      - GITLAB_HTTPS=false
      - SSL_SELF_SIGNED=false

      - GITLAB_HOST=localhost
      - GITLAB_PORT=10080
      - GITLAB_SSH_PORT=10022
      - GITLAB_RELATIVE_URL_ROOT=
      - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
      - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
      - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

      - GITLAB_ROOT_PASSWORD=
      - GITLAB_ROOT_EMAIL=

      - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
      - GITLAB_NOTIFY_PUSHER=false

      - GITLAB_EMAIL=notifications@example.com
      - GITLAB_EMAIL_REPLY_TO=noreply@example.com
      - GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com

      - GITLAB_BACKUP_SCHEDULE=daily
      - GITLAB_BACKUP_TIME=01:00

      - SMTP_ENABLED=false
      - SMTP_DOMAIN=localhost
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_USER=mailer@example.com
      - SMTP_PASS=password
      - SMTP_STARTTLS=true
      - SMTP_AUTHENTICATION=login

      - IMAP_ENABLED=false
      - IMAP_HOST=imap.gmail.com
      - IMAP_PORT=993
      - IMAP_USER=mailer@example.com
      - IMAP_PASS=password
      - IMAP_SSL=true
      - IMAP_STARTTLS=false

      - OAUTH_ENABLED=false
      - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
      - OAUTH_ALLOW_SSO=
      - OAUTH_BLOCK_AUTO_CREATED_USERS=true
      - OAUTH_AUTO_LINK_LDAP_USER=false
      - OAUTH_AUTO_LINK_SAML_USER=false
      - OAUTH_EXTERNAL_PROVIDERS=

      - OAUTH_CAS3_LABEL=cas3
      - OAUTH_CAS3_SERVER=
      - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
      - OAUTH_CAS3_LOGIN_URL=/cas/login
      - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
      - OAUTH_CAS3_LOGOUT_URL=/cas/logout

      - OAUTH_GOOGLE_API_KEY=
      - OAUTH_GOOGLE_APP_SECRET=
      - OAUTH_GOOGLE_RESTRICT_DOMAIN=

      - OAUTH_FACEBOOK_API_KEY=
      - OAUTH_FACEBOOK_APP_SECRET=

      - OAUTH_TWITTER_API_KEY=
      - OAUTH_TWITTER_APP_SECRET=

      - OAUTH_GITHUB_API_KEY=
      - OAUTH_GITHUB_APP_SECRET=
      - OAUTH_GITHUB_URL=
      - OAUTH_GITHUB_VERIFY_SSL=

      - OAUTH_GITLAB_API_KEY=
      - OAUTH_GITLAB_APP_SECRET=

      - OAUTH_BITBUCKET_API_KEY=
      - OAUTH_BITBUCKET_APP_SECRET=

      - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
      - OAUTH_SAML_IDP_CERT_FINGERPRINT=
      - OAUTH_SAML_IDP_SSO_TARGET_URL=
      - OAUTH_SAML_ISSUER=
      - OAUTH_SAML_LABEL="Our SAML Provider"
      - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
      - OAUTH_SAML_GROUPS_ATTRIBUTE=
      - OAUTH_SAML_EXTERNAL_GROUPS=
      - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
      - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
      - OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
      - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
      - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=

      - OAUTH_CROWD_SERVER_URL=
      - OAUTH_CROWD_APP_NAME=
      - OAUTH_CROWD_APP_PASSWORD=

      - OAUTH_AUTH0_CLIENT_ID=
      - OAUTH_AUTH0_CLIENT_SECRET=
      - OAUTH_AUTH0_DOMAIN=
      - OAUTH_AUTH0_SCOPE=

      - OAUTH_AZURE_API_KEY=
      - OAUTH_AZURE_API_SECRET=
      - OAUTH_AZURE_TENANT_ID=

volumes:
  redis-data:
  postgresql-data:
  gitlab-data:
  • 账号:root
  • 密码:5iveL!fe
  • 访问localhost:10080,自动提示修改密码

e051fb7d36c105a2489092405ca7779d.png
gitlab搭建成功
此处gitlab搭建参考自
sameersbn/docker-gitlab​github.com
40c28edd7c737992e84f6d1ea1e675d4.png
  • 安装gitlab-runner服务,去官网找对应的环境安装
https://docs.gitlab.com/runner/install/​docs.gitlab.com
  • 之后注册你的gitlab-runner服务
gitlab-ci-multi-runner register

687bf6818056c157ec26993c451b750f.png
gitlab-runner必要参数
  • 在项目的设置内找到gitlab-runner必要的参数 域名和token
  • 最后一步建议选择shell,因为作者选的是shell
  • 创建一个项目并编写.gitlab-ci.yml文件,文件参考
stages:
  - deploy #步骤名称

deploy:
  stage: deploy #步骤名称
  tags:
    - strategy #标签
  only:
    - master #当且仅当master分支合并时 出发该ci脚本
  script:  #ci脚本
    - mvn clean package
    - "docker build . -t strategy:last"
    - docker stop strategy_image || true
    - docker rm strategy_image || true
    - docker run --name strategy_image -p 7002:80 -d strategy:last

这里解释一下自己理解的gitlab runner工作原理和gitlab-ci.yml这个文件内容

首先 定义一个deploy工作任务

  • 该任务在master分支合并时被触发且执行定义好的script脚本

由于gitlab-runner原理是 当定义的分支合并时

  • 执行 git clone命令拉取该分支代码
  • 在代码根目录执行脚本

所以作者的脚本应该很好理解

  • 在根目录执行mvn clean package打jar包(小公司不需要测试用例 如需要请加上)
  • 执行dockerfile构建镜像(因为作者的项目都是跑在docker上的)
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/strategy.jar /app/app.jar
COPY target/lib /app/lib
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=prod","/app/app.jar"]

分享一下dockerfile

  • 镜像很简单 copy jar包 安装java 执行
  • 最后触发ci时

125eec8a56cddbe196c1a9a37b527855.png

1328b763392b1300ba08cc698394de30.png

开发测试上线时再也不用自己手动部署项目啦

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐