溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

gitlab,gitlab runner自動化部署docke

發(fā)布時間:2020-04-06 23:37:38 來源:網(wǎng)絡(luò) 閱讀:1375 作者:wangnannan36 欄目:系統(tǒng)運(yùn)維

一 、知識點(diǎn)

gitlab,gitlab CI/CD相關(guān)組件以及介紹

  • GitLab - 基于Git的項(xiàng)目管理軟件:
    • GitLab 是一個用于倉庫管理系統(tǒng)的開源項(xiàng)目。使用Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來的web服務(wù)
  • gitlab-runner
    • GitLab Runner是一個開源項(xiàng)目,是gitlab的插件,用于執(zhí)行.gitlab-ci.yml腳本中的命令
  • GitLab CI / CD是GitLab內(nèi)置的強(qiáng)大工具,允許您將所有連續(xù)方法(持續(xù)集成,交付和部署)應(yīng)用于您的軟件,而無需第三方應(yīng)用程序或集成。

  • GitLab CI/CD工作原理
    • 在代碼倉庫的根目錄下去創(chuàng)建.gitlab-ci.yml文件(注意是.gitlab-ci.yml)
    • .gitlab-ci.yml文件中需要定義要運(yùn)行的腳本,定義包含和緩存依賴項(xiàng),選擇要按順序運(yùn)行的命令以及要并行運(yùn)行的命令,定義要部署應(yīng)用程序的位置等
    • 每次提交代碼,gitlab根據(jù).gitab-ci.yml腳本出發(fā)對應(yīng)的runner,運(yùn)行腳本命令,腳本被分組到作業(yè)中,它們一起組成一個自動化部署流水線

docker基礎(chǔ)知識

二、自動化部署流程


第一步:開發(fā)人員將代碼上傳到代碼倉庫,gitlab 根據(jù)gitlab-ci.yml中的命令,觸發(fā)ci/cd邏輯,通知gitlab-runner進(jìn)行構(gòu)建部署
第二步:gitlab-runner根據(jù).gitlab-ci.yml腳本進(jìn)行代碼檢測,單元測試
第三步: gitlab-runner根據(jù).gitlab-ci.yml腳本進(jìn)行構(gòu)建打包
第四步:gitlab-runner根據(jù).gitlab--ci.yml腳本將代碼部署到相應(yīng)的環(huán)境中

三、利用gitlab CI/CD 自動部署spring boot實(shí)例講解


運(yùn)維架構(gòu)流程圖

gitlab,gitlab runner自動化部署docke

gitlab/gitlab runner安裝

docker搭建gitlab

docker run -d --publish 22:22 -p 80:80 -p 443:443 --name gitlab --restart unless-stopped -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab -v /var/run/docker.sock:/var/run/docker.sock twang2218/gitlab-ce-zh:10.5.4

  • 簡單說明
    • twang2218/gitlab-ce-zh:10.5.4:啟動的鏡像名稱,次鏡像是gtilab漢化版,鏡像地址:
    • 22端口:git端口,與本地的SSH端口沖突,我已經(jīng)將本地ssh默認(rèn)端口修改成其他的端口
    • 80/443:gitlab web端口

docker啟動gitlab-runner

sudo docker run -d --name gitlab-runner --restart=always -v /data/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:v10.6.0

友情鏈接:gitlab-runner官網(wǎng)安裝指南

gitlab-runner注冊到gitlab中

  • 進(jìn)入容器:sudo docker exec -it gitlab-runner bash
  • 執(zhí)行注冊命令:gitlab-runner register

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) :輸入gitlab地址\
Please enter the gitlab-ci token for this runner:輸入gitlab token
Please enter the gitlab-ci description for this runner:輸入runner描述信息\
Please enter the gitlab-ci tags for this runner (comma separated):輸入runner tag信息\
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:輸入runner的類型\
Please enter the Docker image (eg. ruby:2.1):(如果選擇docker需要輸入鏡像)
gitlab,gitlab runner自動化部署docke

.gitlab-ci.ym腳本編寫

stages:
  - test
  - build
  - deploy
cache:
  paths:
    - .m2/

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2"
  MAVEN_IMAGE: registry.cn-beijing.aliyuncs.com/qian/prod:maven3-jdk8
  CONTAINER_NAME: daily_report_java

  LAN_REPO:  registry-vpc.cn-beijing.aliyuncs.com/qian/prod
  WAN_REPO: registry.cn-beijing.aliyuncs.com/qian/prod

  DEV_REPO: $WAN_REPO/dev
  PRED_REPO: $WAN_REPO/pred
  PROD_REPO: $LAN_REPO/prod

test and build image:
    image: $MAVEN_IMAGE
    stage: test
    script:
      - mvn  package docker:build -q -Dmaven.test.skip=false -Dspring.profiles.active=test sonar:sonar -Dsonar.host.url=http://sonar.allhome.com.cn -Dsonar.login=admin -Dsonar.password=admin -Dsonar.projectName=$CONTAINER_NAME
    tags:
      - maven
    only:
      - release

build image:
    image: $MAVEN_IMAGE
    stage: test
    script:
      - mvn  package docker:build -q -Dmaven.test.skip=true
    tags:
      - maven
    only:
      - dev
      - master

push image dev:
    stage: build
    before_script:
      - docker login --username=阿里云鏡像倉庫地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - echo $version
      - docker tag  $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_dev:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_dev:$CONTAINER_NAME
    tags:
      - docker-run   
    only:
      - dev
    when: on_success

push image master:
    stage: build
    before_script:
     - docker login --username=阿里云鏡像倉庫地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - docker tag $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_pred:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_pred:$CONTAINER_NAME
    tags:
      - docker-run  
    only:
      - release
    when: on_success

push image prod:
    stage: build
    before_script:
      - docker login --username=阿里云鏡像倉庫地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com
    script:
      - docker tag $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_prod:$CONTAINER_NAME
      - docker push $LAN_REPO/qianjia_prod:$CONTAINER_NAME
    tags:
      - docker-run
    only:
      - master
    when: on_success

ssh run on remote machine dev:
    stage: deploy
    script:
      - bash ~/.local/bin/200.sh   $CONTAINER_NAME    8801 8801    $DEV_REPO:$CONTAINER_NAME  guojia   192.168.10.200
    tags:
      - shell-200
    only:
      - dev 
    when: on_success

ssh run on remote machine master:
    stage: deploy
    script:
      - bash ~/.local/bin/deploy.sh   $CONTAINER_NAME    8801 8801    $PRED_REPO:$CONTAINER_NAME  zp   預(yù)生產(chǎn)ip地址
    tags:
      - shell-prod
    only:
      - release
    when: on_success

ssh run on remote machine prod:
    stage: deploy
    script:
      - bash ~/.local/bin/deploy.sh   $CONTAINER_NAME  8801 8801   $PROD_REPO:$CONTAINER_NAME   zp   生產(chǎn)ip地址
    tags:
      - shell-prod
    only:
      - master
    when: on_success

修改pom.xml,添加如下代碼

        <!--熱部署-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 如果沒有該項(xiàng)配置,devtools不會起作用,即應(yīng)用不會restart -->
                <fork>true</fork>
            </configuration>
        </plugin>
        <!--

        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.3</version>
            <configuration>
                <imageName>registry.cn-beijing.aliyuncs.com/qian2018/qianjia_dev:${project.artifactId}
                </imageName>
                <dockerDirectory>.</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>target</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>
<distributionManagement>
    <repository>
        <id>server</id>
        <name>releases</name>
        <url>http://nexus地址:9000/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>server</id>
        <name>snapshots</name>
        <url>http://nexusi地址:9000/repository/maven-snapshots</url>
    </snapshotRepository>
</distributionManagement>
<repositories>
    <repository>
        <id>maven-public</id>
        <name>maven-public</name>
        <url>http://nexus地址:9000/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>maven-public</id>
        <name>maven-public</name>
        <url>http://39.106.145.141:9000/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

項(xiàng)目根目錄下添加 Dockerfile文件

FROM  registry-vpc.cn-beijing.aliyuncs.com/qian/qianjia_public:oraclejdk
VOLUME /tmp
add target/*.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  • 開發(fā)人員提交代碼,自動觸發(fā)runner流水線

Pipelines 中文稱為流水線,是分階段執(zhí)行的構(gòu)建任務(wù),一次自動發(fā)布流程就稱為一次流水線,以上邊腳本舉例,安裝依賴、運(yùn)行測試、打包、部署開發(fā)服務(wù)器等整套流程叫做一次流水線

  • 查看流水線:進(jìn)行g(shù)itlab項(xiàng)目目錄-----CI/CD----流水線即可查看項(xiàng)目部署的流水線
    gitlab,gitlab runner自動化部署docke

Stages:Stages 表示構(gòu)建階段,一次流水線包括多個stages,在腳本實(shí)例中stages定義了一次流水線的三個階段:第一個階段:運(yùn)行測試,進(jìn)行代碼檢測,第二個階段:打包java程序并生成鏡像,第三個階段:執(zhí)行shell腳本,把容器部署到服務(wù)器

  • 每個階段有tag制定的runner去執(zhí)行
  • 每個階段按照腳本順序進(jìn)行

Jobs :表示構(gòu)建的作業(yè)(或稱之為任務(wù)),表示某個 Stage 里面執(zhí)行的具體任務(wù)。我們可以在 Stages 里面定義多個 Jobs

  • 相同 Stage 中的 Jobs 無執(zhí)行順序要求,會并行執(zhí)行
  • 相同 Stage 中的 Jobs 都執(zhí)行成功時,該 Stage 才會成功
  • 如果任何一個 Job 失敗,那么該 Stage 失敗

  • 總結(jié):
    • 一次自動發(fā)布流程稱為一次流水線,每個流水線有多個階段,每個階段有多個任務(wù)
    • 上邊的博客只是寫了一個整體發(fā)布流程,沒有具體寫每個工具的使用方法,請自行查閱
    • gitlab比較占內(nèi)存,必須保證系統(tǒng)的內(nèi)存在4GB以上,否則可能導(dǎo)致gitlab不能啟動
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI