Jenkins+Docker实现CI/CD

看到这一张图,我们就知道践行持续集成(CI)、持续部署(CD),可以简化工作流程,提高工作效率。


Jenkins+Docker流程标准.png

docker配置阿里云镜像仓库

1、阿里云docker仓库
2、进去注册帐号后,点击自己的管理中心。
3、在管理中心点击加速器,右边面板会有你的加速地址,右边面板下面有详细设置步骤。
4、配置docker镜像加速器

image.png

maven构建docker镜像

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.11</version>

                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>

                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                        <imageTag>latest</imageTag>
                    </imageTags>

                    <dockerDirectory>src/main/docker</dockerDirectory>

                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

src/main/docker 目录下新增文件 Dockerfile

如果是jar包的话

FROM frolvlad/alpine-oraclejdk8:slim
MAINTAINER cmazxiaoma
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
RUN sh -c 'touch /demo.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /demo.jar" ]

如果是war包的话

from docker.io/tomcat:latest
maintainer 1363xx39xx@qq.com
copy demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/demo.war

创建阿里云docker镜像

1.创建镜像仓库


image.png

2.选择代码源、构建设置、构建规则设置。


image.png

3.操作指南


image.png
image.png

jenkins部署项目

配置之前先配置好jenkins服务器和应用服务器的密钥认证
  • Jenkins服务器上生成密钥对,使用ssh-keygen -t rsa命令

    image.png

  • 将jenkins服务器的公钥192.168.0.6.pub中的内容复制到应用服务器 的~/.ssh/下的 authorized_keys文件(这里我的jenkins服务器和应用服务器都是192.168.0.6)

ssh-copy-id -i 192.168.0.6.pub 192.168.0.6
cd /root/.ssh
chmod 644 authorized_keys(别写成了664)
  • 进入到/etc/ssh/sshd_config配置PermitRootLogin no

  • 在应用服务器上重启 ssh 服务service sshd restart,现在 Jenkins 服务器可免密码直接登陆应用服务器。

1.关于jenkins的基本操作,可以看这一篇文章Jenkins环境搭建部署web应用

2.构建触发器,轮询SCM就是查看源码管理的代码有没有更新,如果更新了就去构建,没有更新就不会构建。 H/5 * * * * 代表每5分钟就去查看源码有没有更新

image.png

3.设置build

clean package -Dmaven.test.skip=true docker:build
image.png

4.设置构建的shell脚本


image.png

5.构建脚本如下:

echo '================开始推送镜像================'
sudo docker login --username=xx@163.com --password=xx registry.cn-shenzhen.aliyuncs.com
sudo docker tag cmazxiaoma/demo:0.0.1-SNAPSHOT registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
sudo docker push registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
echo '================结束推送镜像================'
echo '================开始远程启动================'

#首先要ssh上去注意这里的<< remotessh,需要做公钥密钥
ssh root@192.168.0.6 -tt << remotessh       

#从这里开始都是在远程机器上执行命令
cd /usr/local/aliyun-docker

./jenkins.sh demo-container

echo '========停止并删除旧的容器成功============='


sudo docker login --username=xx@163.com --password=xx registry.cn-shenzhen.aliyuncs.com 
sudo docker pull registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT

sudo docker run -itd -m 500m -p 9020:9020 --name=demo-container --restart=always registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
echo "finished!"

#执行完毕,退出远程机器
exit
remotessh
echo '================结束远程启动================'

6.jenkins.sh(记得chmod 777)脚本停掉并删除无用的docker容器

#!/bin/sh
sudo docker stop  $(sudo docker ps | grep $1|awk '{print  $1}'|sed 's/%//g')
sudo docker rm $(sudo docker ps -a | grep $1|awk '{print  $1}'|sed 's/%//g')

7.可以通过日志查看构建情况。


image.png

8.构建完成后,我们可以在阿里云查看镜像。


image.png
  1. 访问http://192.168.0.6:9020/jenkins/hello,成功
    image.png

docker一些有用的命令

删除无效的none镜像:docker rmi $(docker images -f "dangling=true" -q)

尾言

用docker一时爽,一直用docker一直爽。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269