Jenkins 基於 Docker git JAVA CI/CD

準備兩臺機器css

192.168.31.200 centos7  docker harbor githtml

192.168.31.201 centos7  docker jenkins maven gitjava

Habor Docker 安裝參考前面的文章。node

 咱們的項目到時候會部署到192.168.31.201 上linux

1、git 安裝配置git

在192.168.31.200 安裝git 作服務器端
yum install git -y

設置git用戶
useradd git
passwd git
su - git mkdir tomcat-java-demo.git && cd tomcat-java-demo.git 初始化 git --bare init 在192.168.31.201 安裝git 作客戶端 yum install git -y 測試服務器端地址是否能拉取 git clone git@192.168.31.200:/home/git/tomcat-java-demo.git mv tomcat-java-demo tomcat-java-demo.bak 網上clone個java 項目的demo git clone https://github.com/lizhenliang/tomcat-java-demo cd tomcat-java-demo 修改提交私有git倉庫地址 vim .git/config ##修改URL部分,替換成私有git倉庫地址 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@192.168.31.200:/home/git/tomcat-java-demo.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master git add . git commit -m 'all' 提交的時候出現問題 設置用戶名和郵箱 git config --global user.name "test" git config --global user.email "test@123.com"

 

192.168.31.201 Jenkins上配置免密登錄git倉庫 git用戶。github

ssh-keygenweb

ssh-copy-id git@192.168.31.200docker

ssh git@192.168.31.200shell

2、tomcat java 鏡像 

在192.168.31.200上生成 tomcat鏡像,及提交至Harbor倉庫

vim Dockerfile-tomcat

FROM centos:7
MAINTAINER test

ENV VERSION=8.5.38

RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
    yum clean all && \
    rm -rf /var/cache/yum/*

RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
    mkdir /usr/local/tomcat/webapps/test && \
    echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
    sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080
CMD ["catalina.sh", "run"]

build 鏡像

docker build -t tomcat:v1 -f Dockerfile-tomcat .

配置docker 私有倉庫地址

[root@node1 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"],
  "insecure-registries":["http://192.168.31.200"]
}

重啓docker
systemctl daemon-reload
systemctl restart docker  

提交本地Harbor倉庫,使用默認library倉庫

docker tag tomcat:v1 192.168.31.200/library/tomcat:v1
docker login 192.168.31.200
docker push 192.168.31.200/library/tomcat:v1

  

3、安裝Jenkins

192.168.31.201 主機安裝
安裝以前須要安裝JAVA環境,本文裏使用的JDK1.8.0_45
jenkins 下載地址 https://jenkins.io/download/ ,本文使用jenkins war包

JAVA環境配置
# tar zxf jdk-8u45-linux-x64.tar.gz
# mv jdk-8u45-linux-x64 /usr/local/jdk1.8
# vi /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
# source /etc/profile

Jenkins 安裝啓動
# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-
8.5.32.tar.gz
# tar zxf apache-tomcat-8.5.32.tar.gz
# mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins
# rm /usr/local/tomcat-jenkins/webapps/* -rf
# unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT
# cd /usr/local/tomcat-jenkins/bin/
# ./startup.sh

部署成功,訪問Jenkins:http://192.168.31.201:8080
網絡好的狀況下,咱們能夠選擇在線安裝。很差的咱們能夠跳過

離線安裝,咱們將https 改爲http 而後提交就好。

 

 

咱們安裝Pipeline插件和SCM to job  這兩個插件,有須要咱們再安裝其餘插件

安裝完成後咱們新建一個測試項目

一、參數化構建,咱們這裏的Branch是後面用語pipeline腳本中的變量,master是表明git的分支

二、pipeline 腳本設置

Pipline Syntax 能夠生成你pipeline中的參數。

 

鏈接git倉庫拉去代碼

將上面生成的這段替換下面Pipeline腳本中。*/master 替換爲${Branch} 變量

 

pipeline 腳本

node { 
   // 拉取代碼
   stage('Git Checkout') { 
       checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '863606a1-a10e-45a0-8643-001b9d8eb05e', url: 'git@192.168.31.200:/home/git/tomcat-java-demo.git']]])   
   }
   // 代碼編譯
   stage('Maven Build') {
        sh '''
        export JAVA_HOME=/usr/local/jdk1.8
        /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
        '''
   }
   // 項目打包到鏡像並推送到鏡像倉庫
   stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.31.200/library/tomcat-java-demo:${branch}
cat > Dockerfile << EOF
FROM lizhenliang/tomcat 
MAINTAINER www.ctnrs.com
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
EOF
docker build -t $REPOSITORY .
docker login 192.168.31.200 -u admin -p Harbor12345
docker push $REPOSITORY
'''
   }
   // 部署到Docker主機
   stage('Deploy to Docker') {
        sh '''
        REPOSITORY=192.168.31.200/library/tomcat-java-demo:${branch}
        docker rm -f tomcat-java-demo |true
        docker image rm $REPOSITORY |true
        docker container run -d --name tomcat-java-demo -p 88:8080 $REPOSITORY
        '''
   }
}

上面pipeline腳本核心主要在於拉去docker 鏡像,推送鏡像,已經部署這塊。基本用shell實現。

三、保存,而後構建。

 

4、查看鏡像狀態,訪問測試網站

 

[root@node1 app]# docker ps
CONTAINER ID        IMAGE                                     COMMAND             CREATED             STATUS              PORTS                  NAMES
6bfe67c44c19        192.168.31.200/library/java-demo:master   "catalina.sh run"   2 hours ago         Up 2 hours          0.0.0.0:88->8080/tcp   java-demo


[root@node1 app]# docker container ps
CONTAINER ID        IMAGE                                     COMMAND             CREATED             STATUS              PORTS                  NAMES
6bfe67c44c19        192.168.31.200/library/java-demo:master   "catalina.sh run"   2 hours ago         Up 2 hours          0.0.0.0:88->8080/tcp   java-demo
[root@node1 app]# docker container logs 6bfe67c44c19
16-Mar-2019 19:30:45.806 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.38
16-Mar-2019 19:30:45.817 INFO [main] 
……………

16-Mar-2019 19:30:47.527 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
16-Mar-2019 19:30:47.528 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.38

 

咱們的容器暴露的是88端口

[root@master ~]# curl  192.168.31.201:88 -I
HTTP/1.1 200 
Content-Type: text/html;charset=utf-8
Content-Language: en-US
Content-Length: 2538
Date: Sat, 16 Mar 2019 13:36:13 GMT

  

Jenkins 還可使用docker 插件。

固然要想學好pipeline 你須要花,大量的時間。

Jenkins CI/CD 主要是在於他的工做流程 思想。

工做流程:1. 開發人員提交代碼到Git版本倉庫;2. Jenkins人工/定時觸發項目構建;3. Jenkins拉取代碼、代碼編碼、打包鏡像、推送到鏡像倉庫;4. Jenkins在Docker主機建立容器併發布。

相關文章
相關標籤/搜索