首先基础环境为
示例共有两个项目 一个为k8s集群中的环境变量项目,另一个为springboot微服务项目
1环境变量项目的自动部署
先看gitlab-ci的内容
image: gongdear/alpine-ssh:latest
stages:
- deploy-test
- deploy-demo
before_script:
# 预先装 ssh-agent
# 2019-09-19 使用已经安装ssh-agent的镜像
# - 'which ssh-agent || ( apk update && apk add openssh-client)'
# 启动服务
- eval $(ssh-agent -s)
# 将私钥写入deploy.key 文件
- echo "$SSH_PRIVATE_KEY" > deploy.key
# 配置较低权限
- chmod 0600 deploy.key
# 注入密钥
- ssh-add deploy.key
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
recreate-configmap-test:
stage: deploy-test
script:
# 连接远程服务器并执行拉取代码 重新创建测试环境的 configmap
- ssh root@$DEPLOY_SERVER -tt "cd /data/envdeploy && git pull && cd test && ./recreate_config_map.sh"
only:
- test-ci
recreate-configmap-demo:
stage: deploy-demo
script:
# 连接远程服务器并执行拉取代码 重新创建测试环境的 configmap
- ssh root@$DEPLOY_SERVER -tt "cd /data/envdeploy && git pull && cd demo && ./recreate_config_map.sh"
only:
- demo-ci
如果提交到测试环境分支test-ci 就执行测试环境的重建脚本
如果提交到演示环境分支demo-ci 就执行演示环境的重建脚本
这里的前提是alpine-ssh:latest
这个镜像可以ssh到远程机器上去执行脚本,所以如何定制这个镜像是重点
Dockerfile:
FROM alpine
RUN which ssh-agent || ( apk update && apk add openssh-client)
其实这里就简单基于alpine镜像 在每次ci的时候去安装ssh也可以,但是实际效果很差,这一步要执行很久,所以我就定制了一个安装好ssh的镜像。
2springboot微服务项目的部署
这个项目我的思路跟上面一样,想定制一个有jdk和maven可以编译代码,又有docker环境可以push到harbor私服的镜像,但这一步遇到了很多坑
坑1 基于官方的maven:3-jdk-8镜像装了一个docker,编译没问题,但调用docker时遇到了错误 docker ps指令
说docker可能没启动?
docker -v有内容
docker ps不可以
基于maven:3-jdk-8镜像安装一个docker19.03.2总是失败。。。
查了一通文档,感觉应该是docker版本不一致导致的,这个镜像里docker版本确实不是19.03.2 那么直接pull一个最新的镜像
docker pull docker:19.03.2
查看了一下这又是基于alpine的,先试一下能不能成功调用docker ps
可以执行,那么说明基于这个镜像进行编译docekr镜像和push都应该是没问题的,那现在的方案就变为基于这个镜像安装一个jdk和maven了。
1 先安装jdk
FROM docker:19.03.2
RUN apk update && apk add openjdk8 curl busybox tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone && apk del tzdata && rm -rf /tmp/* /var/cache/apk/*
第一步很顺利,openjdk8看起来是装好了,来试一下
jdk成功安装,可喜可贺
然后基于这个新的镜像装maven。。。
2 安装maven
FROM gongdear/docker-jdk8
ENV MAVEN_VERSION 3.6.2
ENV MAVEN_HOME /usr/local/maven/default-maven
ENV MAVEN_DOWNLOAD_URL http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz
RUN apk add --no-cache bash tar wget ca-certificates unzip \
&& mkdir -p ${MAVEN_HOME} \
&& wget ${MAVEN_DOWNLOAD_URL} \
&& tar -zxf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C ${MAVEN_HOME} --strip-components=1 \
&& ln -s ${MAVEN_HOME}/bin/mvn /usr/local/bin/mvn \
&& apk del tar wget ca-certificates unzip \
&& rm -rf apache-maven-${MAVEN_VERSION}-bin.tar.gz \
${MAVEN_HOME}/bin/*.bat \
/tmp/*
CMD ["bash"]
好了 再试一下maven可以用了不
好了 非常完美的一个镜像,可以继续后面的ci大工程了