spring boot項(xiàng)目基于docker、gitlab持續(xù)集成配置

本次配置全部都是基于docker的環(huán)境進(jìn)行杯活。
其中使用了gitlab匆帚、gitlib-cidocker旁钧、spring boot吸重、maven等技術(shù)互拾。
請(qǐng)首先安裝docker

背景

使用spring boot 開(kāi)發(fā) 短信發(fā)送程序嚎幸,并自建gitlab作為代碼版本管理颜矿,使用gitlab-ci作為持續(xù)CI/CD工具。
所有工具運(yùn)行在docker之上嫉晶。

下面提到的

  • git.sdibt.com是我配置的gitlab域名骑疆,請(qǐng)自行替換。
  • sms 是maven project name替废,請(qǐng)自行替換箍铭。

一、Gitlab 配置

docker stop gitlab && docker rm gitlab
docker run --detach \
        --hostname git.sdibt.com \
        --publish 443:443 \
        --publish 80:80 \
        --publish 22:22 \
        --name gitlab \
        --restart always \
        --env 'GITLAB_TIMEZONE=Beijing' \
        --volume "$PWD"/srv/gitlab/config:/etc/gitlab \
        --volume "$PWD"/srv/gitlab/logs:/var/log/gitlab \
        --volume "$PWD"/srv/gitlab/data:/var/opt/gitlab \
        gitlab/gitlab-ce

其中GITLAB_TIMEZONE=Beijing 使用了 ruby on rails 的時(shí)區(qū)設(shè)置椎镣。通過(guò)--volume 將配置放在容器外诈火,便于以后升級(jí)。

二状答、GitlabRunner配置

從project中獲取注冊(cè)Runner的token


注冊(cè)runner所需url冷守、token獲取頁(yè)面截圖

請(qǐng)用上圖所示的url、token 替換下面提到的url惊科、token

1拍摇、啟動(dòng)runner

docker run -d --name gitlab-runner-dockersock \
        --restart always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v "$PWD"/srv/gitlab-runner/config:/etc/gitlab-runner \
         gitlab/gitlab-runner:alpine

將docker.sock掛載到Runner中,將配置文件保存在"$PWD"/srv/gitlab-runner/config

2译断、注冊(cè)runner

docker exec -it gitlab-runner-dockersock  gitlab-runner register -n \
  --url http://gitlab.8dat.com/ci \
  --registration-token bfab7e07b5e57c1e0ac2dc37ff4475 \
  --tag-list=dockersock,docker \
  --description "dockersock" \
  --docker-privileged=true \
  --docker-pull-policy="if-not-present" \
  --docker-image "docker:latest" \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
  --docker-volumes /root/m2:/root/.m2 \
  --executor docker 

給runner設(shè)置了tag后授翻,可以在.gitlab-ci.yml中指定job運(yùn)行的runner。tag一般是用來(lái)區(qū)分不同類型的runner孙咪,或標(biāo)志特定配置的runner堪唐。

生成的配置文件 cat /etc/gitlab-runner/config.toml,如下所示:

[[runners]]
  name = "dockersock"
  url = "http://git.sdibt.com/ci"
  token = "bfab7e07b5e57c1e0ac2dc37ff4475"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]
    pull_policy = "if-not-present"
  [runners.cache]
  • volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]中增加了/root/m2:/root/.m2翎蹈,避免maven每次都下載jar包淮菠,提高效率。
  • pull_policy = "if-not-present" 避免docker 鏡像每次都pull

3荤堪、可以運(yùn)行docker的maven鏡像

dockerhub上的maven鏡像并不能執(zhí)行docker命令合陵,導(dǎo)致我們無(wú)法使用docker build 等命令。所以我們自己制作一個(gè)docker_maven鏡像澄阳。

FROM maven:alpine
RUN apk add --no-cache \
        ca-certificates \
        curl \
        openssl
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.12.5
ENV DOCKER_SHA256 0058867ac46a1eba283e2441b1bb5455df846144f9d9ba079e97655399d4a2c6
RUN set -x \
    && curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz" -o docker.tgz \
    && echo "${DOCKER_SHA256} *docker.tgz" | sha256sum -c - \
    && tar -xzvf docker.tgz \
    && mv docker/* /usr/local/bin/ \
    && rmdir docker \
    && rm docker.tgz \
    && docker -v

docker build -t docker-maven:alpine . 得到鏡像文件拥知。

三、項(xiàng)目配置

pom.xml配置

    <build>
        <finalName>sms</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker的maven插件碎赢,官網(wǎng):https://github.com/spotify/docker-maven-plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <configuration>
                    <!-- 注意imageName一定要是符合正則[a-z0-9-_.]的低剔,否則構(gòu)建不會(huì)成功 -->
                    <!-- 詳見(jiàn):https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed-->
                    <imageName>${project.build.finalName}</imageName>
                    <baseImage>openjdk:alpine</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>


.gitlab-ci.yml配置

image: docker-maven:alpine
services:
  - redis:3-alpine

#Maven 阿里云鏡像
before_script:
  - rm -rf /root/.m2/settings.xml
  - echo -e "<?xml version=\""1.0\"" encoding=\""UTF-8\""?><settings xmlns=\""http://maven.apache.org/SETTINGS/1.0.0\"" xmlns:xsi=\""http://www.w3.org/2001/XMLSchema-instance\"" xsi:schemaLocation=\""http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd\""><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors></settings>" > /root/.m2/settings.xml

# 定義 stages
stages:
  - test
  - build

# 定義 jobs
test app:
  stage: test
  script:
    - echo "I am test job"
    - mvn test

# 定義 job
build app:
  stage: build
  tags:
    - dockersock
  script:
    - mvn  -Dmaven.test.skip=true clean package docker:build

查看鏡像

docker images | grep sms
鏡像已經(jīng)躺好了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市襟齿,隨后出現(xiàn)的幾起案子姻锁,更是在濱河造成了極大的恐慌,老刑警劉巖猜欺,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件位隶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡开皿,警方通過(guò)查閱死者的電腦和手機(jī)涧黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)副瀑,“玉大人弓熏,你說(shuō)我怎么就攤上這事】匪” “怎么了挽鞠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)狈孔。 經(jīng)常有香客問(wèn)我信认,道長(zhǎng),這世上最難降的妖魔是什么均抽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任嫁赏,我火速辦了婚禮,結(jié)果婚禮上油挥,老公的妹妹穿的比我還像新娘潦蝇。我一直安慰自己,他們只是感情好深寥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布攘乒。 她就那樣靜靜地躺著,像睡著了一般惋鹅。 火紅的嫁衣襯著肌膚如雪则酝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天闰集,我揣著相機(jī)與錄音沽讹,去河邊找鬼。 笑死武鲁,一個(gè)胖子當(dāng)著我的面吹牛爽雄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沐鼠,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盲链,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起刽沾,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎排拷,沒(méi)想到半個(gè)月后侧漓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡监氢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年布蔗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浪腐。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纵揍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出议街,到底是詐尸還是另有隱情泽谨,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布特漩,位于F島的核電站吧雹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涂身。R本人自食惡果不足惜雄卷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛤售。 院中可真熱鬧丁鹉,春花似錦、人聲如沸悴能。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搜骡。三九已至拂盯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間记靡,已是汗流浹背谈竿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摸吠,地道東北人空凸。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寸痢,于是被迫代替她去往敵國(guó)和親呀洲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)道逗,斷路器兵罢,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • 這是阿里內(nèi)網(wǎng)的一篇文章,感有用滓窍,故轉(zhuǎn)載來(lái)了卖词,自己實(shí)際搭建了,故記錄一下: 背景在日常工作中吏夯,我們往往會(huì)搭建基于je...
    新強(qiáng)吖閱讀 5,944評(píng)論 0 4
  • SonarQube系列 目錄 SonarQube (1) 基本環(huán)境搭建 SonarQube (2) sonar r...
    嚴(yán)北閱讀 26,016評(píng)論 8 11
  • 一此蜈、持續(xù)集成(Continuous Integration) 要了解GitLab-CI與GitLab Runner...
    tsyeyuanfeng閱讀 97,877評(píng)論 18 134
  • 信息靈通無(wú)比,商機(jī)無(wú)可限量噪生, 每次出征都有新的發(fā)現(xiàn)裆赵, 但夢(mèng)想有時(shí)會(huì)因征程的坎坷 有時(shí)失意和得意。 歸程窗外無(wú)限多變...
    賣(mài)菜詩(shī)人閱讀 206評(píng)論 0 2