Jenkins

Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件,有丰富的插件支持,可以监控持续重复的工作。

Jenkins的安装

Jenkins可以作为一个服务直接安装在操作系统上,但是由于对java环境的要求,我这里选择使用docker安装。
Jenkins的核心配置和运行时文件都放在/var/jenkins_home目录,所以可以选择将这个目录挂载到宿主机上。
首先创建一个volume

[root@k8s-master data] docker volume create my-jenkins-data
my-jenkins-data

然后运行启动Jenkins容器

docker run \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v my-jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=always \
jenkinsci/blueocean

启动完以后,就可以在浏览器访问8080端口进入Jenkins后台页面。
然后会发现需要在/var/jenkins_home/secrets/initialAdminPassword目录下拿到密码才能登录Jenkins。
在这里插入图片描述

咱们在第一步中已经把这个目录挂载出来了,要找到对应的位置,然后查看密码。

[root@k8s-master data] docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS
75b0ccfa6398   jenkinsci/blueocean    "/sbin/tini -- /usr/…"   5 minutes ago    Up 5 minutes    0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::

[root@k8s-master data] docker inspect 75b0ccfa6398 |grep Mounts -A 20
        "Mounts": [
            {
                "Type": "volume",
                "Name": "my-jenkins-data",
                "Source": "/var/lib/docker/volumes/my-jenkins-data/_data",
                "Destination": "/var/jenkins_home",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "bind",
                "Source": "/var/run/docker.sock",
                "Destination": "/var/run/docker.sock",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {

[root@k8s-master _data] cd /var/lib/docker/volumes/my-jenkins-data/_data && cat  secrets/initialAdminPassword
b3bf3530017a44d3a6421f1e1e054b41

使用这个密码登陆进去后台,然后就是一系列的初始化操作,跟着提示完成Jenkins的初始化。

Jenkins插件的安装和加速配置

下面选择安装一个Docker Pipeline,这个插件可以让Jenkins在流水线运行时使用docker容器作为代理。

在这里插入图片描述
修改jenkins_home下面的hudson.model.UpdateCenter.xml,将url修改为下面的内容

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>

然后在jenkins_home/updates下运行

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

Jenkins的简单demo

这里是通过一个简单的打包运行的案例展示Jenkins的使用。
新建一个流水线任务,流水线选择Pipeline script from SCM,将自己的git项目配置进去。
我这边是一个go的项目,内容如下:

package main

import "fmt"

func main()  {
	fmt.Println("hello Jenkins")
}

然后配置pipeline,这种声明式api使用起来还是非常的舒服的。
这里使用到了上面安装的Docker Pipeline插件。
本身Jenkins容器内并没有go的运行环境,所以要用容器代理的方式,使用具有go环境的容器去编译go的文件,然后在后面的阶段使用。

pipeline {
    agent any
    environment {
     ws =  "$WORKSPACE"
    }

  stages {
    stage('打包'){
      agent {
        docker { image 'golang:1.14-alpine' }
      }
      steps {
        sh 'go version'
        sh 'cd $ws && go build -o server'
      }
    }
    stage('测试运行'){
      steps {
      	echo "测试运行..."
      	sh './server'
      }
    }
  }
}

在这里插入图片描述
在这里插入图片描述

Jenkins的更多使用

Jenkins的功能很强大,可以实现测试、docker镜像的打包、推送等很多功能,如果代理镜像集成了kubectl的话还可以很方便的做到kubernetes的自动部署,大多数功能都可以使用sh + groovy脚本组合实现,大家可以参考下官方文档。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐