#环境centos 7.4 docker 18.03.0-cejava
# nuxus,建立maven本地源(可选,编译java时下载jar依赖包)
# maven,编译打包java web为war包
# jenkins,自动化构建、发布等git# jenkins容器里不能执行docker命令,用ssh远程方式
# jenkins容器 -> ssh -> maven编译java web -> 构建docker镜像,war包+tomcat
# war包+tomcat从新构建镜像,便可运行java webweb
#下载镜像 docker pull sonatype/nexus3 #data目录设置 mkdir -p /docker/cicd/nexus-data chown -R 200 /docker/cicd/nexus-data #运行nuxus容器 docker rm -f nexus docker run -dit -p 8081:8081 --name nexus \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/nexus-data:/nexus-data \ --restart=always sonatype/nexus3 #查看 docker ps -l docker logs nexus #浏览器打开,右上角->Sign in ,初始帐户admin admin123 #配置阿里maven源加快下载 #新建maven2(proxy)源 #或直接更改maven-central,原地址 https://repo1.maven.org/maven2/ #阿里源地址 http://maven.aliyun.com/nexus/content/groups/public/
#下载镜像 docker pull maven:alpine #配置maven使用私有仓库(使用上面搭建的nuxus) #ip地址为neuxs的10.2.1.18为内网地址 mkdir -p /docker/cicd/maven-data cd cd /docker/cicd cat > /docker/cicd/maven-settings.xml<<EOF <?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>elven-maven</id> <name>elven-maven</name> <url>http://10.2.1.18:8081/repository/maven-public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <localRepository>/repository</localRepository> </settings> EOF
#maven容器编译java测试docker
#下载源码(我写的hello world测试) mkdir -p /docker/cicd/git cd /docker/cicd/git git clone https://gitee.com/almi/helloworld.git #运行maven容器构建war包测试 docker run --rm \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml \ -v /docker/cicd/maven-data:/repository \ -v /docker/cicd/git:/git \ maven:alpine \ mvn clean package -f /git/helloworld/pom.xml #查看 ls -l /docker/cicd/git/helloworld/target/ #如上maven容器构建war,是挂载本地源码目录到maven容器编译war包 #另外一种方式,构建docker镜像时调用maven编译,而后建立容器拷贝出war包
#下载镜像 docker pull jenkins:alpine #data目录设置 mkdir -p /docker/cicd/jenkins-data cd /docker/cicd cat > /docker/cicd/jenkins-data/log.properties <<EOF handlers=java.util.logging.ConsoleHandler jenkins.level=FINEST java.util.logging.ConsoleHandler.level=FINEST EOF #目录权限为1000 chown -R 1000:1000 /docker/cicd/jenkins-data #启动jenkins容器 docker rm -f jenkins docker run --name jenkins -dit \ -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/jenkins-data:/var/jenkins_home \ --restart=always -p 8082:8080 jenkins:alpine #查看 docker ps -l docker logs jenkins #查看初始密码 cat /docker/cicd/jenkins-data/secrets/initialAdminPassword #浏览器登陆,安装插件
#步骤:jenkins -> git拉源码 -> 构建war包 -> docker镜像 -> 运行
#jenkins容器没法直接运行宿主机docker命令,可以使用ssh远程方式shell
# 建立一个自由风格的软件项目 ->
# 源码管理 -> git -> https://gitee.com/almi/helloworld.git
# 增长构建后操做步骤——Send build artifacts over SSH
# Exec command:在目标主机执行的shell命令
# 执行的shell以下apache
env Gitdir=${JOB_NAME} bash /docker/cicd/jenkins-data/workspace/${JOB_NAME}/build.sh
#build.sh的shell内容以下:centos
#!/bin/bash Gitdir=${Gitdir:-helloworld} # echo 'docker run maven --------' docker run --rm \ -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml \ -v /docker/cicd/maven-data:/repository \ -v /docker/cicd/jenkins-data/workspace/:/git/ \ maven:alpine \ mvn clean package -f /git/$Gitdir/pom.xml # echo 'docker build --------' cd /docker/cicd/jenkins-data/workspace/$Gitdir docker build -t helloworld . docker images helloworld # echo "docker run helloworld --------" docker rm -f helloworld sleep 1 [[ `netstat -lntp |grep 8090 |wc -l` -ge 1 ]] && { echo "Port 8090 is used";exit; } docker run -dit --name helloworld -p 8090:8080 helloworld [[ -n `docker ps |awk '/8090/{print $1}'` ]] && { echo "run helloworld successful"; } || { echo "run helloworld error"; } docker ps -l
#jenkins还有更多实用功能如web钩子、定时任务、邮件通知等……