基于Docker的微服务CI CD流水线

为什么80%的码农都做不了架构师?>>>   hot3.png

基于Docker的CI/CD流水线

环境准备

ip 操作系统
192.168.2.110 centos 7.2

JDK安装


mkdir -p /opt/java
cd /opt/java

wget http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz

tar -zxvf jdk-8u172-linux-x64.tar.gz

配置环境变量

vim /etc/profile

加入
# Java Environment Path
export JAVA_HOME=/opt/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

Maven安装


mkdir -p /opt/maven
cd /opt/maven

wget http://117.143.109.148/cache/mirrors.shu.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz

tar -zxvf apache-maven-3.5.3-bin.tar.gz

配置环境变量

vim /etc/profile

加入
MAVEN_HOME=/opt/apache/apache-maven-3.5.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

执行

source /etc/profile

项目版本控制工具gitlab、git

1.git安装

yum –y install git

2.gitlab安装

采用docker部署gitlab

mkdir -p /opt/docker/gitlab/config
mkdir -p /opt/docker/gitlab/logs
mkdir -p /opt/docker/gitlab/data

docker pull gitlab/gitlab-ce:latest

sudo docker run --detach \
    --hostname dev.devstack.com \
    --privileged=true \
    -e 'GITLAB_PORT=3380' \
    -e 'GITLAB_SSH_PORT=3322' \
    --publish 3443:443 \
    --publish 3380:80  \
    --publish 3322:22 \
    --name gitlab \
    --volume /opt/docker/gitlab/config:/etc/gitlab \
    --volume /opt/docker/gitlab/logs:/var/log/gitlab \
    --volume /opt/docker/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

下载镜像时间会长点,看网络情况,也可以科学上网,会好点

启动成功后,第一次登录使用的用户名和密码为 root 和 5iveL!fe,开始更改密码和配置ssh key

Jenkins安装

mkdir -p /opt/jenkins
cd /opt/jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenkins.war

nohup java -jar jenkins.war >/opt/jenkins/jenkins.log 2>&1 &
命令行参数 参数说明
--httpPort=$HTTP_PORT 使用标准http协议在端口$ HTTP_PORT上运行Jenkins侦听器。默认值为端口8080.要禁用(因为您使用的是https),请使用端口-1
--httpListenAddress=$HTTP_HOST 将Jenkins绑定到由$ HTTP_HOST表示的IP地址。默认值为0.0.0.0 - 即侦听所有可用的接口。例如,要仅侦听来自localhost的请求,可以使用–httpListenAddress = 127.0.0.1
--httpsPort=$HTTP_PORT 在端口$ HTTP_PORT上使用HTTPS协议
--httpsListenAddress=$HTTPS_HOST 绑定Jenkins在$ HTTPS_HOST表示的IP地址上侦听HTTPS请求。
--prefix=$PREFIX 运行Jenkins以在URL的末尾包含$ PREFIX。例如,要使Jenkins可以在http // myServer 8080 / jenkins上访问,请设置–prefix = / jenkins
--ajp13Port=$AJP_PORT 使用标准AJP13协议在端口$ AJP_PORT上运行Jenkins侦听器。默认值为端口8009.要禁用(因为您使用的是https),请使用端口-1。
--ajp13ListenAddress=$AJP_HOST 将Jenkins绑定到由$ AJP_HOST表示的IP地址。默认值为0.0.0.0 - 即侦听所有可用的接口。
--argumentsRealm.passwd.$ADMIN_USER 设置用户$ ADMIN_USER的密码。如果Jenkins安全性已打开,则必须以$ ADMIN_USER身份登录才能配置Jenkins或Jenkins项目。注意还必须指定此用户具有管理员角色。 (见下面的参数)。
--argumentsRealm.roles.$ADMIN_USER=admin 将$ ADMIN_USER设置为管理用户,如果Jenkins的安全性已打开,可以配置Jenkins。有关详细信息,请参阅Jenkins安全。
-Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n 设置调试开关,您可以访问$ DEBUG_PORT上的调试。
logfile=$LOG_PATH/winstone_date +”%Y%m-%d_%H-%M”.log 定义日志格式
-XX:PermSize=512M -XX:MaxPermSize=2048M -Xmn128M -Xms1024M -Xmx2048M 参考Oracle Jave设置

访问Jenkins只需要在客户端浏览器输入:http://ip:8080/ ,即可

默认初始访问Jenkin需要管理员密码,密码位置:/root/.jenkins/secrets/initialAdminPassword cat /root/.jenkins/secrets/initialAdminPassword

进入选择插件安装界面,选择第一个(Install suggested plugins)

启动脚本

#!/bin/sh

DESC="Jenkins CI Server"
NAME=jenkins
PIDFILE=/var/run/$NAME.pid
RUN_AS=jenkins
COMMAND="java -- -jar /opt/jenkins/jenkins.war"

d_start() {
    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}

d_stop() {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    if [ -e $PIDFILE ]
        then rm $PIDFILE
    fi
}

case $1 in
    start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
    ;;
    restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
    *)
    echo "usage: $NAME {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

等待安装好插件后,登录Jenkins,配置jenkins需要的maven、jdk路径,并安装的需要插件

•发布插件 Deploy to container Plugin 必须

•Maven插件 Maven Integration plugin必须

docker仓库安装

docker私有仓库管理系统harbor的部署使用:https://my.oschina.net/orrin/blog/1820462

nexus安装

mkdir -p /opt/nexus
cd /opt/nexus

wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.3-02-bundle.tar.gz

tar xfvz nexus-2.14.3-02-bundle.tar.gz

cd nexus-2.14.3-02-bundle

启动nexus

nexus-2.14.3-02/bin/nexus start

访问页面:http://192.168.2.110:8081/nexus

注意:nexus的默认端口是8081,后面可以修改。 用默认账户和密码登录 账户:admin 密码:admin123

maven设置

docker-harbor密码设置

1、控制台执行:

mvn --encrypt-master-password 

2、在{user.home}/.m2/目录创建settings-security.xml文件,将主密码(第一步生成的密码)写入:



  {K/cB3R+gXBgH3LMUGFhs4FV9PKIgqKPsBNNrMM1w/dc=}

3、控制台执行:

mvn --encrypt-password 

将生成的密码写入到settings.xml的

	
	  docker-harbor
	  admin
	  {RPYxhVXHfpkHXH30T4Y82RSycGbN9SQo0NB3F7FvGIQ=}
	  
		[email protected]
	  
	
nexus密码设置

将密码写入到settings.xml的

   
    releases 
    admin 
    admin123 
   
   
    snapshots 
    admin 
    admin123 
  

项目集成

1.修改pom.xml文件



    
    192.168.2.150
    
    abcd

    
    http://192.168.2.110:8081/nexus/content




    
        dev
        
            true
        
        
            dev
        
    

    
        test
        
            test
        
    

    
        prod
        
            prod
        
    






    
        ${project.basedir}/src/main/docker
        true
        
            **/Dockerfile
        
        ../docker
    
    
        ${project.basedir}/src/main/resources
        true
    





    com.spotify
    docker-maven-plugin
    0.4.13
    
        
            deploy
            
                build
            
        
        
            tag-image
            deploy
            
                tag
            
            
                
                    ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${spring.profiles.active}-${project.version}
                
                
                    ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${spring.profiles.active}-${project.version}
                
            
        
        
            push-image
            deploy
            
                push
            
            
                
                    ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${spring.profiles.active}-${project.version}
                
            
        
    
    
        
        docker-harbor
        ${docker.repostory}

        
        

        
        
        ${project.basedir}/target/docker
        
            ${docker.repostory}/${docker.registry.name}/${project.artifactId}:${spring.profiles.active}-${project.version}
        
        
            
            ${spring.profiles.active}.${project.version}
            ${spring.profiles.active}.latest
        
        
            
                /
                ${project.build.directory}
                ${project.build.finalName}.jar
            
        
    





    
        public
        local private nexus
        ${repository.url}/groups/public
        
            true
        
        
            true
        
    



    
        releases
        ${repository.url}/repositories/releases/
    
    
        snapshots
        ${repository.url}/repositories/snapshots/
    


Dockerfile文件:

# Version 0.0.1
FROM java:8

MAINTAINER orrin "[email protected]"

# 环境变量
ENV WORK_PATH /home/project/nmcp
ENV APP_NAME @project.build.finalName@[email protected]@
ENV APP_VERSION @project.version@

EXPOSE 10087

#USER
#USER user:group

#VOLUME
VOLUME ["/home/project", "/tmp/data"]

#ADD

#COPY
COPY $APP_NAME $WORK_PATH/

#LABEL
#STOPSIGNAL
#ARG
#ONBUILD

# WORKDIR
WORKDIR $WORK_PATH

RUN echo "Asia/Shanghai" > /etc/timezone

# ENTRYPOINT 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom"]

# CMD
CMD ["-jar", "@project.build.finalName@[email protected]@"]

2.配置Jenkins

输入项目名称,配置项目git地址及maven命令

选择配置后的项目,点击立即构建,构建完成后,即可在harbor上看到生成的镜像。

转载于:https://my.oschina.net/orrin/blog/1828755

你可能感兴趣的:(基于Docker的微服务CI CD流水线)