This practical case explanation ——JAVA How to pass the project Docker Realize continuous deployment ( Just four simple steps ),

Namely : Development passed git push Upload code , through Git and Jenkins coordination , Automate program deployment , release , Operation and maintenance personnel are not required to participate in the whole process .

This is a true container level implementation , The benefits of this , It's not just efficiency , It is also a change :

For the first time, developers are really responsible for their own code —— Finally, we can skip the O & M and testing departments , Self maintenance operation environment ( The first is testing / development environment ).

Difficult people won't , It's not difficult for people to meet . Through simple 4 Configurations , You can achieve continuous deployment gracefully . This article is routinely placed in the table of contents , Please enjoy . Technical idea of continuous deployment

Effect display

to configure Git and Jenkins linkage

to configure Jenkins Automatically update code

Effect graphic explanation


ok , We officially begin .

1. Technical idea of continuous deployment

In this case , Suppose we JAVA The name of the project is hello. The brief technical ideas are as follows .

In this case, it is assumed that the code is hosted in upper ,Jenkins and Docker
Registry( be similar to yum source ) Each running in one Docker In container .JAVA The project itself also runs independently in a place called hello In the container of .

The continuous deployment scheme adopted in this paper , From private Docker
Reistry Pull code . Some flexible solutions , Put the code on the host computer , Let the container read through volume group mapping . The reason why this method is not recommended is , Split code out of container , It's against Docker Container principle of :

This also leads to increased handling complexity . From the perspective of freight workers , The whole is the most economical . such , Only in this way can we realize the real container level migration .

Or say , Container age , Abandon the idea of document distribution in the past , Is the right way . The last question and answer session of this article has more elaboration on this .

Container as process . We adopt the above scheme Docker Reasons and significance of continuous deployment , That's why . Container lifecycle , Should be much shorter than virtual machines , There is a problem with the container , It should be killed immediately , Instead of trying to recover .

2. Effect display

The final effect of this paper , How amazing is it ? Let's see the following demonstration .

2.1 Effect before program code update

We use time stamps for simplicity , Express program updates explicitly .

2.2 Submit program code updates

In this example , We put the timestamp of the home page from 201506181750, Change to 201506191410( See below ).

2.3 Upload new code to Git

Perform the following operations in sequence , Enter the correct git Account password .

so what ?

Then you don't have to do anything . Serve a cup of tea ( If you don't like coffee ), Wait quietly for automatic deployment to occur , Watch a series of automatically triggered processes , Run like a robot ( Please describe later ).

Why 3~5 minute ? Just because in this case JAVA project , Need to come from abroad download
Maven Package , For Jenkins Call and compile JAVA. In the formal application environment , Can put Maven The source is placed in the domestic or computer room . If you just need to PHP Continuous deployment of the project , That's faster .

2.4 View the effect of code update

After waiting quietly for a few minutes , The new code has indeed been automatically deployed .

that , How did all this happen ? Is it complicated ? Otherwise . Just follow these steps , It can be realized quickly .

3. to configure Git and Jenkins linkage

This process is also difficult , It's not difficult for people to meet . It is mainly divided into the following three steps .

3.1 Jenkins to configure Git source

Jenkins New project in java-app, And configure from Git Pull program code . The details are as follows :

3.2 Jenkins Configure remote build

Jenkins Medium configuration token, For git Use when calling remotely .

3.3 Git Open hook

How to let Git After receiving the updated code from the user , Deliver messages and tasks to Jenkins And ? With the help of Git of hook function , Configuration is also very simple , as follows .

4. to configure Jenkins Automatically update code

Jekins Received at Git After the message delivered , Trigger another remote build ( To the target server ), According to the predefined task list , Perform a series of work , Rebuild containers, etc . See below for details :

We put the most critical Shell Extract the script content .

5. Effect graphic explanation

stay 2.3 In this chapter , Our operation at that time was as follows , The purpose is to Git Submit update code .

At that time, he didn't elaborate on the subsequent events , Now that the above has made the principle clear , Then we can talk about what actually happened next .

5.1 Upload code to Git

It seems that the whole process has been completed and smoothly exited . actually , The backstage work has just begun .

This will trigger Git The server sends the corresponding Jenkins The server sends an operation request , This work is too fast , There's nothing to say , Let's see next Jenkins What are you doing .

5.2 Jenkins Wonderful interaction

1)Jenkins A build task will automatically appear .

2) Let's come in at , Look at the specific operation log . yes , Accepting from Git Task of .

3) download Maven Related software packages ( The process is slow ).

4) After downloading , Start using maven BUILD new hello Project package .

5) Then rebuild Maven container , Build new Image and Push reach Docker In private library .

6) last , Reset Docker Pull up the container . such , It's new again . ha-ha