jenkins 凭据处理、钉钉token问题

我们在使用jenkins 编写 pipeline 时,难免会有一些 token 的调用;

切实这些调用完全可以使用 jenkins 中的凭据来解决;

解决 钉钉 token 问题

默认情况下

# token 是明文。不管是在 jenkinsfile 或者 pipeline 中,都不安全
curl 'https://oapi.dingtalk.com/robot/send?access_token=31eaac64808eb1f76251e7c8435d0647bcc9070212e4eaf6186e7d9e060bb9f9' \
   -H 'Content-Type: application/json' \
   -d '{"msgtype": "text",
"text": {
"content": "jenkins-hk, 测试推送"
} }'

配置凭据解决该问题;

jenkins 系统管理 -> Manage Credentials -> 全局凭据 -> 添加凭据

这里我们只需要将 钉钉的 token 写入密码行即可;

image-20220726134052117

credentials

Jenkins 的声明式流水线语法有一个 credentials() 辅助方法(在 environment 指令中使用),它 支持 secret 文本,带密码的用户名,以及 secret 文件凭据。

下面的流水线代码片段展示了如何创建一个使用带密码的用户名凭据的环境变量的流水线。

在该示例中,带密码的用户名凭据被分配了环境变量,用来使你的组织或团队以一个公用账户访问

Bitbucket 仓库;这些凭据已在 Jenkins 中配置了凭据 ID jenkins-bitbucket-common-creds 。 当在 environment 指令中设置凭据环境变量时:

environment {
    BITBUCKET_COMMON_CREDS = credentials('jenkins-bitbucket-common-creds')
}

这实际设置了下面的三个环境变量:

  • BITBUCKET_COMMON_CREDS - 包含一个以冒号分隔的用户名和密码,格式为 username:password 。
  • BITBUCKET_COMMON_CREDS_USR - 附加的一个仅包含用户名部分的变量。
  • BITBUCKET_COMMON_CREDS_PSW - 附加的一个仅包含密码部分的变量。

示例:

pipeline {
		agent {
				// 此处定义 agent 的细节
		}
environment {
		//顶层流水线块中使用的 environment 指令将适用于流水线中的所有步骤。
    BITBUCKET_COMMON_CREDS = credentials('jenkins-bitbucket-common-creds')
}
stages {
    stage('Example stage 1') {
				//在一个 stage 中定义的 environment 指令只会将给定的环境变量应用于 stage 中
		    environment {
    		    BITBUCKET_COMMON_CREDS = credentials('another-credential-id')
				} 
				steps {
						//
				}
		}
		stage('Example stage 2') {
    		steps {
						//
				}
		}
	}
}

引用

如下:

// # Jekinsfile 中调用
// # cat Jenkinsfile
pipeline {
    agent { label '10.23.1.33'}

    environment {
        //顶层流水线块中使用的 environment 指令将适用于流水线中的所有步骤。
        // 获取 dingTalk 的密文,这里使用的是 dingTalk 生成的 ID。jenkins生成的。切记
        DINGTALK_CREDS = credentials('97bd1f06-a2c7-48fa-83aa-b10de2c6a2fd')
    }
    
    stages {
        stage('printenv') {
            steps {
            echo 'Hello World'
            sh 'printenv'
            }
        }
        stage('check') {
            steps {
                checkout scm
            }
        }
        stage('build-image') {
            steps {
            	retry(2) { sh 'docker build . -t myblog:${GIT_COMMIT}'}
            }
        }
    }
    post {
        success {
            echo 'Congratulations!'
            sh """
                curl 'https://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_CREDS_PSW}' \
                    -H 'Content-Type: application/json' \
                    -d '{"msgtype": "text",
                            "text": {
                                "content": "jenkins-hk \n 😄👍构建成功👍😄\n 项目名称: ${JOB_BASE_NAME}\n Commit Id: ${GIT_COMMIT}\n 构建地址:${RUN_DISPLAY_URL}
                                 "
                             }
                        }'
            """
        }
        failure {
            echo 'Oh no!'
            sh """
                curl 'https://oapi.dingtalk.com/robot/send?access_token=${DINGTALK_CREDS_PSW}' \
                    -H 'Content-Type: application/json' \
                    -d '{"msgtype": "text",
                            "text": {
                                "content": "jenkins-hk \n 😄👍构建成功👍😄\n 项目名称: ${JOB_BASE_NAME}\n Commit Id: ${GIT_COMMIT}\n 构建地址:${RUN_DISPLAY_URL}
                                 "
                            }
                        }'
            """
        }
        always {
            echo 'I will always say Hello again!'
        }
    }
}
posted @ 2022-07-26 14:10  Star-Hitian  阅读(698)  评论(0编辑  收藏  举报