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 post describes how to combine Jenkins, one of the most popular integration tools, with Alibaba Cloud Container Service to realize automatic test and image building pushing.
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.
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.
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 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.
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 .
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.
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.
1. Create a project to implement the automatic test.
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/
The command in this example is as follows.
1. pwd
2. ls
3. cd chapter2
4. npm test
2. Create a project to automatically build and push 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
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.
1. Select the application nodejs-demo just created, and create the trigger.
2. Add a line to the shell scripts you 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 from 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.
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.
You have combined Jenkins with Alibaba Cloud Container Service to realize automatic test and image building push.
Visit the Alibaba Cloud Container Service page to learn more, or check out the Container Service tutorial to get started today.
Protect Your Apps and Websites with Web Application Firewall
2,599 posts | 763 followers
FollowJJ Lim - September 17, 2021
Alibaba Container Service - February 7, 2020
Alibaba Clouder - July 27, 2020
Alex - February 14, 2020
PM - C2C_Yuan - July 8, 2020
Alibaba Cloud Native Community - December 29, 2023
2,599 posts | 763 followers
FollowLearn More
A secure image hosting platform providing containerized image lifecycle management
Learn MoreAlibaba Cloud Container Service for Kubernetes is a fully managed cloud container management service that supports native Kubernetes and integrates with other Alibaba Cloud products.
Learn MoreMore Posts by Alibaba Clouder