服务部署

    • k8s集群安装
    • gitlab环境安装
    • jenkins环境安装
    • redis&mysql&nginx&etcd安装

    1.1、添加SSH Key

    进入gitlab,点击用户中心,找到,在左侧找到SSH Keystab

    • 1、在jenkins所在机器上查看公钥
    • 2、如果没有,则需要生成,如果存在,请跳转到第3步
    1. $ ssh-keygen -t rsa -b 2048 -C "email@example.com"
    • 3、将公钥添加到gitlab中

    1.2、上传代码到gitlab仓库

    新建工程go-zero-demo并上传代码,这里不做细节描述。

    2.1、添加凭据

    • 查看jenkins所在机器的私钥,与前面gitlab公钥对应
    • 进入jenkins,依次点击Manage Jenkins-> Manage Credentials credentials

    • 进入全局凭据页面,添加凭据,Username是一个标识,后面添加pipeline你知道这个标识是代表gitlab的凭据就行,Private Key`即上面获取的私钥

    2.2、 添加全局变量

    2.3、配置git

    进入Manage Jenkins->Global Tool Configureation,找到Git条目,填写jenkins所在机器git可执行文件所在path,如果没有的话,需要在jenkins插件管理中下载Git插件。 jenkins-git

    2.4、 添加一个Pipeline

    • 进入jenkins首页,点击新建Item,名称为user jenkins-add-item

    • 查看项目git地址

    • 添加服务类型Choice Parameter,在General中勾选This project is parameterized,点击添加参数选择Choice Parameter,按照图中添加选择的值常量(api、rpc)及接收值的变量(type),后续在Pipeline script中会用到。 jenkins-choice-parameter

    • 配置user,在user配置页面,向下滑动找到Pipeline script,填写脚本内容

    1. pipeline {
    2. agent any
    3. parameters {
    4. gitParameter name: 'branch',
    5. type: 'PT_BRANCH',
    6. branchFilter: 'origin/(.*)',
    7. defaultValue: 'master',
    8. selectedValue: 'DEFAULT',
    9. sortMode: 'ASCENDING_SMART',
    10. description: '选择需要构建的分支'
    11. }
    12. steps {
    13. sh 'echo 分支:$branch'
    14. sh 'echo 构建服务类型:${JOB_NAME}-$type'
    15. }
    16. }
    17. stage('check out') {
    18. steps {
    19. checkout([$class: 'GitSCM',
    20. branches: [[name: '$branch']],
    21. doGenerateSubmoduleConfigurations: false,
    22. extensions: [],
    23. submoduleCfg: [],
    24. userRemoteConfigs: [[credentialsId: '${credentialsId}', url: '${gitUrl}']]])
    25. }
    26. }
    27. stage('获取commit_id') {
    28. steps {
    29. echo '获取commit_id'
    30. git credentialsId: '${credentialsId}', url: '${gitUrl}'
    31. script {
    32. env.commit_id = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
    33. }
    34. }
    35. }
    36. stage('goctl版本检测') {
    37. steps{
    38. sh '/usr/local/bin/goctl -v'
    39. }
    40. }
    41. stage('Dockerfile Build') {
    42. steps{
    43. sh '/usr/local/bin/goctl docker -go service/${JOB_NAME}/${type}/${JOB_NAME}.go'
    44. env.image = sh(returnStdout: true, script: 'echo ${JOB_NAME}-${type}:${commit_id}').trim()
    45. }
    46. sh 'echo 镜像名称:${image}'
    47. sh 'docker build -t ${image} .'
    48. }
    49. stage('上传到镜像仓库') {
    50. steps{
    51. sh '/root/dockerlogin.sh'
    52. sh 'docker tag ${image} ${dockerServer}/${image}'
    53. sh 'docker push ${dockerServer}/${image}'
    54. }
    55. }
    56. stage('部署到k8s') {
    57. steps{
    58. script{
    59. env.deployYaml = sh(returnStdout: true, script: 'echo ${JOB_NAME}-${type}-deploy.yaml').trim()
    60. env.port=sh(returnStdout: true, script: '/root/port.sh ${JOB_NAME}-${type}').trim()
    61. }
    62. sh 'echo ${port}'
    63. sh 'rm -f ${deployYaml}'
    64. sh '/usr/local/bin/goctl kube deploy -secret dockersecret -replicas 2 -nodePort 3${port} -requestCpu 200 -requestMem 50 -limitCpu 300 -limitMem 100 -name ${JOB_NAME}-${type} -namespace hey-go-zero -image ${dockerServer}/${image} -o ${deployYaml} -port ${port}'
    65. sh '/usr/bin/kubectl apply -f ${deployYaml}'
    66. }
    67. }
    68. stage('Clean') {
    69. steps{
    70. sh 'docker rmi -f ${image}'
    71. sh 'docker rmi -f ${dockerServer}/${image}'
    72. cleanWs notFailBuild: true
    73. }
    74. }
    75. }
    76. }

    其中dockerlogin.sh内容

    1. docker login --username=$docker-user --password=$docker-pass $docker-server
    • $docker-user: docker登录用户名
    • $docker-pass: docker登录用户密码
    • $docker-server: docker私有地址

    build with parameters

    猜你想看