View here to log in or access your console

OK

Setup Jenkins Based Continuous Delivery Pipeline with Docker


As an important step in agile development, continuous integration is designed to maintain high quality while accelerating product iteration. Every time when the codes are updated, an automatic test is performed to test the codes and function validity. The codes can only be delivered and deployed after they pass the automatic test.

This section describes how to combine Jenkins, one of the most popular integration tools, with Alibaba Cloud Container Service to realize automatic test and image building push.

The following example demonstrates how to perform automatic test and Docker image building through Alibaba Cloud Container Service, which will lead to high-quality continuous integration.

Background information


Every time when codes are submitted to nodejs project in GitHub, Alibaba Cloud Container Service Jenkins will automatically trigger a unit test. If the test is successful, Jenkins continues to build images and then pushes them to a target image repository. At last, Jenkins notifies you of the results by email.

A general process is shown in the figure below.

slave-nodejs is a slave node used for unit test and for building and pushing the image.

Introduction to Jenkins

Jenkins is an open-source continuous integration tool developed on Java. It monitors and triggers continuously-repeated work and supports expansion of multiple platforms and plugins. It is an open-source tool featuring easy installation and interface-based management. Jenkins uses job to describe every work step, and node is a project execution environment. The master node is a default execution environment of a Jenkins job and also the installation environment for Jenkins applications.

Master/slave

Master/slave is equivalent to the server/agent concept. A master provides Web interface through which you manage your job and the slave. The job can run on the master or be assigned to the slave. One master can be associated with several slaves to serve different jobs or different configurations of the same job.

Several slaves can be configured to prepare a separate test and building environment for different projects.

Tips: Jenkins job and projects mentioned here all refer to a build unit of Jenkins, that is, an execution unit.

Deploy Jenkins applications and slave nodes


Building and test of different applications need different dependencies. The best practice is to use different slave containers containing corresponding runtime dependencies and tools to execute the test and building. Through slave images and sample templates provided by Alibaba Cloud Container Service for different environments such as Python, nodejs and go, you can quickly and easily generate Jenkins applications and various slave nodes, configure node information in Jenkins applications, and designate execution nodes in the build projects, so as to implement the entire integration process.

Note: For images provided by Alibaba Cloud Container Service for developing slave nodes, visit https://github.com/AliyunContainerService/jenkins-slaves.

Procedure

1.Create a Jenkins orchestration template.
Create a new template and create the orchestration based on the following content.

 jenkins:  image: 'registry.aliyuncs.com/acs-sample/jenkins:latest'  ports:      - '8080:8080'      - '50000:50000'  volumes:      - /var/lib/docker/jenkins:/var/jenkins_home  privileged: true  restart: always   labels:      aliyun.scale: '1'      aliyun.probe.url: 'tcp://container:8080'      aliyun.probe.initial_delay_seconds: '10'      aliyun.routing.port_8080: jenkins  links:      - slave-nodejs slave-nodejs:  image: 'registry.aliyuncs.com/acs-sample/jenkins-slave-dind-nodejs'  restart: always   volumes:      - /var/run/docker.sock:/var/run/docker.sock  labels:      aliyun.scale: '1' 

2.Use the template to create Jenkins applications and slave nodes.

You can also directly use a Jenkins sample template provided by Alibaba Cloud Container Service to create Jenkins applications and slave nodes.

3.After the successful creation, Jenkins applications and slave nodes will be displayed in the service list.

4.After opening the access endpoint provided by the Container Service, you can use the Jenkins application deployed just now.

Realize automatic test and automatic build and push of image

Configure the slave container as the slave node of the Jenkins application.

Open the Jenkins application and enter the System Settings interface. Select Manage Node > Create Node, and configure corresponding parameters. See the figure below.

Note:

  • Label is the only identifier of the slave.
  • The slave container and Jenkins container run on the Alibaba Cloud platform at the same time. Therefore, you can fill in a container node IP address that is inaccessible to the Internet to isolate the test environment.

  • Use the jenkins account and password (the initial password is jenkins) in Dockerfile for the creation of the slave-nodejs image when adding Credential. Image Dockerfile address: https://github.com/AliyunContainerService/jenkins-slaves/tree/master/jenkins-slave-dind-nodejs.
  • 2.Create a project to implement the automatic test.

    i.Create an item and choose to build a software project of free style.

    ii.Enter the project name and select a node for running the project. In this example, enter the slave-nodejs-ut node created above.

    iii.Configure the source code management and code branch. In this example, use GitHub to manage source codes..

    iv.Configure the trigger for building. In this example, automatically trigger project execution by combining GitHub Webhooks and services.

    v.Add the Jenkins service hook to GitHub to implement automatic triggering.

    Click the Settings tab on the Github project homepage, and click Webhooks & services > Add service and select Jenkins (Git plugin). Enter ${Jenkins IP}/github-webhook/ in the Jenkins hook URL dialog box.

    1. http://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/

    vi.Add a build step of Executes shell type and write shell scripts to execute the test.

    The command in this example is as follows.

    1. pwd
    2. ls
    3. cd chapter2
    4. npm test

    3.Create a project to automatically build and push images.

    i.Create an item and choose to build a software project of free style.

    ii.Enter the project name and select a node for running the project. In this example, enter the slave-nodejs-ut node created above.

    iii.Configure the source code management and code branch. In this example, use GitHub to manage source codes.

    iv.Add the following trigger and set it to implement automatic image building only after success of the unit test.

    v.Write shell scripts for building and pushing images..

    The command in this example is as follows.

     a.cd chapter2 b.docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo . c.docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com d.docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo 

    Automatically redeploy the application


    Deploy the application for the first time

    Use the orchestration template to deploy the image created above to the Container Service and create the nodejs-demo application.

    Example:

     1.```
    2.express:
    3.image: 'registry.aliyuncs.com/qinyujia-test/nodejs-demo'
    4.expose:
    5. - '22'
    6. - '3000'
    7.restart: always
    8.labels:
    9. aliyun.routing.port_3000: express
    10.```

    Automatic redeployment

    1.Select the application nodejs-demo just created, and create the trigger.

    2.Add a line to shell scripts wrote in Realize automatic test and automatic build and push of image. The address is the trigger link given by the trigger created above.

     i.curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’ 

    Change the Command in the example of Realize automatic test and automatic build and push of image as follows.

     i. cd chapter2
    ii. docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
    iii. docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com iv.docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
    v. curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’

    After pushing the image, Jenkins automatically triggers redeployment of the nodejs-demo application.

    Configure email notification of the results

    .If you want to send the unit test or image configuration results to relevant developers or project execution initiators through email, perform the following configurations.

    1.On the Jenkins homepage, click System Management > System Settings, and configure a Jenkins system administrator email.

    2.Install the Extended Email Notification plugin, configure SMTP server and other relevant information, and set the default recipient list. See the figure below.

    The above example shows the parameter settings of the Jenkins application system. The following example shows the relevant configurations for Jenkins projects whose results are to be pushed through email.

    1.Add post-building operation steps in the Jenkins project, select Editable Email Notification, and enter a recipient list.

    2.Add a mailing trigger.