Jenkins
install Jenkins in docker
docker run --name jk -it -p 90:8080 jenkins/jenkins:lts
- 不要直接
docker pull jenkins,这个拉的是旧版本的,需要执行docker run --name jk -it -p 90:8080 jenkins/jenkins:lts- 不推荐使用stable(linux), docker(lts),plugin版本与jenkins版本不匹配,进而导致报错。
- 实测Jenkins以docker里无法完成最终部署, 可能需要映射更多的端口,或者桥接的方式实现。
配置轮询触发
这里配置使用Jenkins的另外一种新方式--blueocean,下载blue ocean的插件即可使用,简化大量操作,其本质上也是接入的Jenkins multi-branch pipeline,然后不断轮询的方式,个人比较推荐这种方式,可以快速搭建。
pipeline {
agent any
triggers { pollSCM('* * * * *') }
stages {
stage('Build') {
steps {
echo 'Building..'
sh "g++ main.cpp"
}
}
stage('Test') {
agent { dockerfile true }
steps {
sh 'ls /'
sh 'ls -l'
}
}
stage('Deploy') {
agent {
docker { image 'ubuntu:latest' }
}
steps {
sh 'ls /'
sh 'ls -l'
sh 'sleep 5'
}
}
}
}
需要安装docker plugin 以及docker pipeline plugin stage test,基于dockerfile文件,动态build docker image,后面的命令都是运行在自己新建的环境内。 推荐使用
Jenkinsfile的形式,而不是直接在Jenkins server里面配置。pollSCM('* * * * *')可以是每分钟轮询检查是否有变化。 参考www.jenkins.io/doc/book/bl…
node 与 agent的概念很类似,但允许一些更多的配置。
配置通知触发
freestyle
- 官方教程配置docs.gitlab.com/ee/integrat…
- 删除jobs目录下的两行github.com/jenkinsci/g…
- 在jenkins server自定义编译命令。
pipeline
与上面类似,但是安装官方的文档里的内容,需要在Jenkinsfile里面,手动更新状态。
原理解析
- gitlab server 收到commit, post 一个http的请求给Jenkins server
- Jenkins 通过access key 去访问gitlab server。
- gitlab 默认不可以给局域网发送请求,需要管理员开启权限
- 某些公司防火墙限制,可能导致无法request无法发送,只能选择被动的方式
- Jenkins 如果使用docker,需要映射目录,
- Jenkins master 的know host 需要有slave的public key.
Github
# This is a basic workflow to help you get started with Actions
name: my_testing_ci
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
- name: Print CPU info
run : lscpu
- name: Print OS info
run: uname -a
- name: Install dev tools
run: sudo apt install -y cppcheck
- name: Check code
run: cppcheck .
- name: Compile code
run: make
- name: Upload result
uses: actions/upload-artifact@v3
with:
name: build_binary
path: hello.ko
test:
needs: build # Disable parallel
runs-on: ubuntu-latest
steps:
# There is no need to checkout/clone code here.
- name: Download result
uses: actions/download-artifact@v3
with:
name: build_binary
- run: sudo insmod ./hello.ko
- run: sudo rmmod hello
- run: sudo dmesg
Gitlab runner
What is gitlab runner
Gitlab runner 是一个CI工具,能够自动化编译gitlab的repo,gitlab runner 需要部署在一台机器独立的机器上,例如linux,并且作为server一直在后台运行,它会定期pull gitlab repo, 并且执行相应的build命令,并且将输出(artifacts)上传到gitlab server.
- 需要运行gitlab-runner register来将repo注册到这个runner, 后期可以手动修改文件/etc/gitlab-runner/config.toml相关的配置,但是创建必须要用命令行。
- gitlabrunner 可以有多个executor,例如shell,docker之类的。推荐docker这样不会污染主机的环境。
- gitlabrunner 每次build都会创建一个临时的全新的docker container
- gitlabrunner server 会自动artifacts上传到gitlab的server,自己不会保存,过期时间可以在ymal中配置。
- 只运行部分job: 在ymal中给每个job设置tag,然后在gitlabrunner register的时候或者gitlab webUI中设置,来控制运行某些job。
- 可以对一个repo注册多个executor,每个excutor运行不同的image, 然后再ymal文件中指定docker image来指定不同的executor.
- Register 就是在build server(runner) 与gitlabrunner 建立连接
- runner 相对与gitlab server 的一个机器概念,runner里面executor可以为实际物理机shell,也可以是docker(常用),多个runner可以在一台物理机上。
- gitlab sever会选择其中一个runner执行(可以通过tag设置)
- 进入runner之后可以通过image选择镜像。
set up (with docker excutor)
- install docker && build specific image.
- install gitlabrunner.
- register to gitlabrunner.
- add scripts to
.gitlab-ci.ymalfile in git repo.