DevOps CI/CD之一: Jenkins和Github

最近周末没事,把开发过程中用到的东西重新整理一下,今天先从Jenkins开始,记录和github结合如何使用。

1. Jenkins 搭建和使用

    • 一、采用Docker安装Jenkins
    • 二、登录使用Jenkins
      • 登录:
      • 创建用户
      • 创建一个新的job, 点击“new Item”, 选择Multibranch Pipeline.
      • 添加Jenkinsfile
      • 自动触发Job
    • 总结
  • 2. gitlab搭建
  • 3. docker
  • 4. k8s
  • 5. sonar 代码扫描
  • 6. jacoco 代码覆盖率

一、采用Docker安装Jenkins

  1. 首先需要安装docker,安装完docker后运行:
docker pull jenkins/jenkins
#如果要指定特定image,例如weekly
docker pull jenkins/jenkins:weekly
  1. 创建网络桥接
docker network create jenkins
  1. 为了在Jenkins节点上可以执行Docker命令,我们下载Docker:dind
docker run --name jenkins-docker --rm --detach \
  --privileged --network jenkins --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume jenkins-docker-certs:/certs/client \
  --volume jenkins-data:/var/jenkins_home \
  --publish 2376:2376 \
  docker:dind --storage-driver overlay2

–name: 指定docker的名称
–rm: 当docker不运行是自动移除image
–detach: 让docker在后台运行, 后续我们可以通过docker stop jenkins-docker来停止这个docker
–network: 使用上一步创建的网络
– network-alias:网络别名
–env:指定docker TLS证书的根目录
–volume: 连续两个都是相当于建立映射,把/certs/client映射叫做jenkins-docker-certs
–pushlish: 暴露docker的端口,用于在本地机器发送命令之间的通讯
docker:dind: image本身
–storage-driver overlay2:docker存储驱动

  1. 建立一个Dockerfile定制docker images
FROM jenkins/jenkins:2.346.3-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.6 docker-workflow:1.29"
  1. 基于上面这个dockerfile创建docker image
docker built -t jenkins:2.346.3-jdk11 .
  1. 运行上面创建的docker image
docker run --name jenkins-blueocean --restart=on-failure --detach \
  --network jenkins --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  jenkins:2.346.3-jdk11

这里面最要注意的是 --publish,这两个当于建立本地和docker的端口映射,前面后面,前面一个是本地端口,后面一个是docker的端口。
最后一个是第5步建立image的名称

至此, 我们可以通过已经在docker中运行起来了jenkins, 如何查看当前有哪些docker呢?在terminal中执行:

docker ps -a

在这里插入图片描述

二、登录使用Jenkins

登录:

  1. 前面已经在docker中把Jenkins运行起来了
    接下来可以登录Jenkins并使用其功能
    在浏览器中输入: http://localhost:8080,会需要输入密码:
    DevOps CI/CD之一: Jenkins和Github_第1张图片
    我们可以通过以下命令获取:
#jenkins-blueocean 是docker的名字
docker logs jenkins-blueocean
cat /var/jenkins_home/secrets/initialAdminPassword

复制下来就可以登录了

创建用户

Name: Ekin
Password: *******
Full name: Ekin
Email: 53610289@qq.com
  1. 安装好很多的插件后,就可以看到这样的(我这里是已经加了一个job):
    DevOps CI/CD之一: Jenkins和Github_第2张图片

创建一个新的job, 点击“new Item”, 选择Multibranch Pipeline.

DevOps CI/CD之一: Jenkins和Github_第3张图片
6. 在Branch Source中选择github, 同事也需要创建credential用来登录github和执行job,以及填入项目git的URL.
而Credentials对于System和Global两种的区别是:

Global - if the credential/s to be added is/are for a Pipeline project/item. Choosing this option applies the scope of the credential/s to the Pipeline project/item “object” and all its descendent objects. (Pipeline等通用的选择这个)

System - if the credential/s to be added is/are for the Jenkins instance itself to interact with system administration functions, such as email authentication, agent connection, etc. Choosing this option applies the scope of the credential/s to a single object only. (对Jenkins系统本身的设置相关的选择System)

还有一个是只作用Job本身的Credentials, 等创建完job后可以看到
DevOps CI/CD之一: Jenkins和Github_第4张图片
Build设置通过Jenkinsfile:
DevOps CI/CD之一: Jenkins和Github_第5张图片
这样就添加好了一个Job

添加Jenkinsfile

  1. 但是我们希望的是Jenkins能够去执行job,这里就需要再github的项目中添加一个文件:Jenkinsfile,内容大致像这样,然后提交代码。具体如何编写一个Jenkinsfile可以参考这里:
pipeline {
//     agent any
    agent {
        docker {
            image 'node:16-alpine3.15'
            args '-p 3000:3000'
        }
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                sh 'PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true yarn install'
                echo 'Finished Built..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
//                 sh 'yarn dev'
                
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}
  1. 点击项目中 Scan Repository Now,就会生成一个执行任务
    DevOps CI/CD之一: Jenkins和Github_第6张图片 9. 点击Build/ Test /Deploy这几个步骤就可以查看里面的具体的log,支持基本完成CI设置。

自动触发Job

10 : 但我希望的提交代码后能够自动执行job,那这个需要再哪里设置呢?
有两种方式可以选择:
a. github webhook push的方式: 在github上设置回调url(这个url是jenkins上的),当有新的代码提交后,它会触发回调,执行相应的job。
Jenkins系统配置 --> github进行设置,获取到webhook url,然后在github项目settings-> webhook设置jenkins的回调url,由于是本地建立的localhost,没法成功回调,要求是通过域名回调。
b. 在Jenkins定时执行job,从github上pull code执行job。我们可以选择这种方式
DevOps CI/CD之一: Jenkins和Github_第7张图片

总结

本篇介绍了如何在Docker中建立Jenkins,以及在Jenkins建立一个job,使其在代码提交时可以自动触发任务,这个任务的定义步骤在Jenkinsfile中定义,Jenkinsfile中可做较多的事情:比如几个步骤stage,像我们常做的事情,跑单测, build项目,测试环境自动化,uat环境测试,以及跑完自动化用例后,通过脚本更新结果,部署代码到生产环境等。

后续:

2. gitlab搭建

3. docker

4. k8s

5. sonar 代码扫描

6. jacoco 代码覆盖率

你可能感兴趣的:(jenkins,devops,ci)