상황 인프라 성장 경로 (47) - CI GitLab의 사용은 지속적인 통합을 달성

0 소개
  얼마 전, 한 시스템의 구축을 고려하는 것은 CI / CD의 연습. 이일과 함께 처음 젠킨스는 이해하기 고려하여, GitLab의 최신 버전이 이미 CI를 제공 발견 / CD 통합. 이 블로그의 CI / CD 모듈 내부 단순히 한 단계, 직접 GitLab 그래서. 젠킨스는 고급 애플리케이션을해야 할 수도 있습니다. 테스트 GitLab 완전히 내 요구를 충족 기능이 함께 제공됩니다.

GitLab 및 GitLab-CI (gitlab 주자) 설치 1.
  영어 더 나은, 당신은 공식 문서를 직접 볼 수 있습니다. https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose https://docs.gitlab.com/ee/ci/quick_start/README.html
  docker- I 사용 아래에 제공 compose.yml

1 버전이 '3'
 (2 개)  서비스 :
 3      gitlab :
 4          이미지 : twang2218 / gitlab-CE-에서 zh : 최신
 5          #image : gitlab / gitlab-CE : RC
 6          재시작 : 항상
 7          호스트 '172.16.23.203'
 8          환경 :
 9              GITLAB_OMNIBUS_CONFIG : |
10                  external_url 'http://172.16.23.203:8929'
 11                  gitlab_rails [ "TIME_ZONE"] = "아시아 / 상하이"
 12 개          포트 :
 13              - 8929 : 8929
 14              - (1080) : 80
 15              - 1443 :
(16)              - (1022) : 22
 (17)          볼륨 :
 18              - / 루트 / 작업 / 고정 표시기 / gitlab / 1 / 설정 / 등 / gitlab
 19              - / 루트 / 작업 / 고정 표시기 / gitlab / 1 / 로그 / var에 / 로그 / gitlab
 20              - / 루트 / 작업 / 고정 표시기 / gitlab / 1 / 데이터의 경우 : / var / 옵션 / gitlab
 21      gitlab 주자 :
 22          이미지 : gitlab / gitlab 주자 : 최근
 23          재시작 : 항상
 24          볼륨 :
 25              - / 루트 / 작업 / 고정 표시기 / gitlab / 2 / 설정 / 등 / gitlab 주자
 26              - /var/run/docker.sock:/var/run/docker.sock

  포인트를 실행할 수 -d까지 실행 고정 표시기-작성을 주목해야한다
    1. gitlab 이미지, 중국어 또는 영어 버전 버전을 선택할 수 있습니다
    로컬 IP 주소를 지정하기 위해 여기 2. 호스트 이름을
    3. gitlab 환경 변수를 external_url 표현은 IP에 대한 액세스를 제공합니다 및 포트, 시간대 설정 상하이
    4. 포트 매핑, 80 포트 구성 위의 8929 I, 및 호스트 호스트에 매핑 8929 년부터, 기본값은
    5 볼륨 지속적 구성 데이터
    여기에 6 /var/run/docker.sock은 매핑 할 이 호스트의 자원의 일부를 사용하기 때문에 호스트로, 또한 고정 표시기 고정 표시기의 내부에 설치되어있는
  아래의 결과는, 첫 번째 실행이 거울을 끌어 때문에, 상대적으로 긴하고 GitLab 초기화됩니다

GitLab 사용하여 로그인
  , 비밀번호를 먼저 로그인을. 기본 사용자 이름은 root 로그인입니다
  템플릿을 사용하여이 새 봄 프로젝트를 생성

  IDE를 사용하거나 다른 도구 또는 GitLab에서 직접 코드를 수정

GitLab에 등록 3. 구성 CI / CD, 기계 (gitlab 주자)
  프로젝트의 CI / CD 시스템을 구성 할 수는 또한 모든 프로젝트에서 관리자 CI / CD 기계에 의해 구성 할 수있는 모든 개인 항목을 구성 할 수 있습니다. 원리 및 방법은 동일하지만 젠킨스보다 세밀하게 제어된다.

  초기화 명령 gitlab-CI-멀티 주자 레지스터를 수행 도커의 gitlab 주자를 입력 한 다음 명령을 완료하십시오

1  sudo를 고정 표시기 간부 - 그것은 gitlab 주자 gitlab-CI-멀티 러너 레지스터

  需要录入的信息,安装上图进行,填写,后续还可以修改。

  如果需要修改,可以修改之前volumes配置的路径下, config/config.toml

 

 1 concurrent = 1
 2 check_interval = 0
 3 
 4 [session_server]
 5   session_timeout = 1800
 6 
 7 [[runners]]
 8   name = "myRunner"
 9   url = "http://172.16.23.203:8929/"
10   token = "96beefdaa54832b0c8369ffa3811c9"
11   executor = "docker"
12   [runners.custom_build_dir]
13   [runners.docker]
14     tls_verify = false
15     image = "docker:latest"
16     privileged = true
17     disable_entrypoint_overwrite = false
18     oom_kill_disable = false
19     disable_cache = false
20     volumes = ["/cache", "/root/.m2:/root/.m2", "/var/run/docker.sock:/var/run/docker.sock"]
21     shm_size = 0
22   [runners.cache]
23     [runners.cache.s3]
24     [runners.cache.gcs]

 

  上面这个是配置文件,里面有几个注意点
    1. privileged 这里要配置 true,因为要在docker里面安装docker
    2. /root/.m2 这个是配置maven的仓库使用宿主主机的缓存,这样就不用每次CI都要下载依赖
    3. /var/run/docker.sock 这个也要配置,在构建dockerfile的时候会用到
  还有一个需要配置的就是,这个Runner需要设置tag,这个是标识Runner的名称。在.gitlab-ci.yml中会用到


4. 配置CI/CD
  默认GitLab是启用该功能的,根目录配置新增 .gitlab-ci.yml 文件,然后每次git push,都会触发CI持续集成。当然可以在yml配置,在主线master触发。
  来个简单的配置,测试一下

 1 image: maven:3-jdk-8
 2 cache:
 3     paths:
 4         - .m2/repository
 5 test:
 6     stage: test
 7     script:
 8         - mvn package
 9     tags:
10         - tag

  上面这个配置,写到.gitlab-ci.yml然后提交到repo,我们提交该文件到gitlab对应项目上去。

1 git add .gitlab-ci.yml
2 git commit -m "Add .gitlab-ci.yml"
3 git push origin master

  如果嫌慢,pom.xml 可以换个阿里源

 1         <repository>
 2             <id>maven-ali</id>
 3             <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 4             <releases>
 5                 <enabled>true</enabled>
 6             </releases>
 7             <snapshots>
 8                 <enabled>true</enabled>
 9                 <updatePolicy>always</updatePolicy>
10                 <checksumPolicy>fail</checksumPolicy>
11             </snapshots>
12         </repository>


  一提交,就会触发自动构建

  可以看到整个构建过程,如果出现错误,也是到这个日志里面排查问题。

 

 

5. 测试、打包、发布
  这一步,我们实现一个简单的测试、打包、发布
5.1 增加 Dockerfile

1 FROM openjdk:8-jdk-alpine
2 VOLUME /tmp
3 COPY  target/demo-0.0.1-SNAPSHOT.jar app.jar
4 ENV PORT 5000
5 EXPOSE $PORT
6 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=${PORT}","-jar","/app.jar"]

5.2 修改 .gitlab-ci.yml

 1 image: maven:3-jdk-8
 2 
 3 variables:
 4     DOCKER_TAG: test/demo-spring:0.1
 5 
 6 cache:
 7     paths:
 8         - .m2/repository
 9 
10 stages:
11     - test
12     - package
13     - deploy
14 
15 test:
16     stage: test
17     tags:
18         - tag
19     script:
20         - mvn test
21 
22 package:
23     stage: package
24     tags:
25         - tag
26     script:
27         - mvn clean package -Dmaven.test.skip=true
28     artifacts:
29         paths:
30             - target/*.jar
31 
32 deploy:
33     image: docker:latest
34     stage: deploy
35     services:
36         - docker:dind
37     tags:
38         - tag
39     script:
40         - docker version 
41         - docker build -t $DOCKER_TAG .
42         - docker rm -f test || true
43         - docker run -d --name test -p 5000:5000 $DOCKER_TAG

  那个artifacts.paths 配置,提交target目录下的文件到下一个流水线,因为不同流水线,由于是基于Docker,所以每一步都是隔离的。同时,上传的附件还可以在构建成功后,在流水线pipelines界面进行下载。每一步的image都是可以指定的,那个tags也是可以指定的。可以提交到不同的机器进行构建。
  上面一共就三步流程,先test(测试),然后package(打包编译),最后deploy(发布测试)。前两个比较好理解,就是maven的基本命令。最后那个deploy就是利用docker里面的docker来进行打包成docker,然后运行起来,作为测试发布。
  更新代码.gitlab-ci.yml,然后提交,触发持续集成。

  查看构建日志

  查看宿主机镜像和运行状态

  查看浏览器,已经发布到测试环境了


5.3 钉钉通知

 1 image: maven:3-jdk-8
 2 
 3 variables:
 4     DOCKER_TAG: test/demo-spring:0.1
 5 
 6 cache:
 7     paths:
 8         - .m2/repository
 9 
10 stages:
11     - test
12     - package
13     - deploy
14     - notify
15 
16 test:
17     stage: test
18     tags:
19         - tag
20     script:
21         - mvn test
22 
23 package:
24     stage: package
25     tags:
26         - tag
27     script:
28         - mvn clean package -Dmaven.test.skip=true
29     artifacts:
30         paths:
31             - target/*.jar
32 
33 deploy:
34     image: docker:latest
35     stage: deploy
36     services:
37         - docker:dind
38     tags:
39         - tag
40     script:
41         - docker version 
42         - docker build -t $DOCKER_TAG .
43         - docker rm -f test || true
44         - docker run -d --name test -p 5000:5000 $DOCKER_TAG
45 
46 notify:
47     image: appropriate/curl:latest
48     stage: notify
49     tags:
50         - tag
51     script: "curl 'https://oapi.dingtalk.com/robot/send?access_token=d6c15304c1***************************************' -H 'Content-Type: application/json' -d '{\"msgtype\": \"text\", \"text\": {\"content\": \"功能已更新部署至测试环境\"}}' "

  有了这个通知,就可以做很多事情了,写个脚本,封装成一个Docker 镜像,可以发送钉钉,发送邮件,可以对接到第三方系统等。


  更多高级应用,如集成之前了解的Harbor,Rancher。使整个系统更加强大,更加智能化。

 

参考资料
  https://cloud.tencent.com/developer/article/1010595
  https://www.cnblogs.com/Sinte-Beuve/p/11582511.html
  https://my.oschina.net/u/2303182/blog/3072694/
  https://docs.gitlab.com/omnibus/docker/#install-gitlab-using-docker-compose
  https://docs.gitlab.com/ee/ci/quick_start/README.html

本文地址:https://www.cnblogs.com/wunaozai/p/11865362.html
本系列目录: https://www.cnblogs.com/wunaozai/p/8067577.html
个人主页:https://www.wunaozai.com/

volumes

추천

출처www.cnblogs.com/wunaozai/p/11865362.html